Index: tools/telemetry/third_party/rope/ropetest/objectdbtest.py |
diff --git a/tools/telemetry/third_party/rope/ropetest/objectdbtest.py b/tools/telemetry/third_party/rope/ropetest/objectdbtest.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ab59084b2ea7d60b9f4345a2a43a9dd60d1a9fc6 |
--- /dev/null |
+++ b/tools/telemetry/third_party/rope/ropetest/objectdbtest.py |
@@ -0,0 +1,160 @@ |
+import unittest |
+ |
+from rope.base.oi import objectdb, memorydb |
+from ropetest import testutils |
+ |
+ |
+def _do_for_all_dbs(function): |
+ def called(self): |
+ for db in self.dbs: |
+ function(self, db) |
+ return called |
+ |
+ |
+class _MockValidation(object): |
+ |
+ def is_value_valid(self, value): |
+ return value != -1 |
+ |
+ def is_more_valid(self, new, old): |
+ return new != -1 |
+ |
+ def is_file_valid(self, path): |
+ return path != 'invalid' |
+ |
+ def is_scope_valid(self, path, key): |
+ return path != 'invalid' and key != 'invalid' |
+ |
+ |
+class _MockFileListObserver(object): |
+ |
+ log = '' |
+ |
+ def added(self, path): |
+ self.log += 'added %s ' % path |
+ |
+ def removed(self, path): |
+ self.log += 'removed %s ' % path |
+ |
+ |
+class ObjectDBTest(unittest.TestCase): |
+ |
+ def setUp(self): |
+ super(ObjectDBTest, self).setUp() |
+ self.project = testutils.sample_project() |
+ validation = _MockValidation() |
+ self.dbs = [ |
+ objectdb.ObjectDB(memorydb.MemoryDB(self.project), validation)] |
+ |
+ def tearDown(self): |
+ for db in self.dbs: |
+ db.write() |
+ testutils.remove_project(self.project) |
+ super(ObjectDBTest, self).tearDown() |
+ |
+ @_do_for_all_dbs |
+ def test_simple_per_name(self, db): |
+ db.add_pername('file', 'key', 'name', 1) |
+ self.assertEqual(1, db.get_pername('file', 'key', 'name')) |
+ |
+ @_do_for_all_dbs |
+ def test_simple_per_name_does_not_exist(self, db): |
+ self.assertEquals(None, db.get_pername('file', 'key', 'name')) |
+ |
+ @_do_for_all_dbs |
+ def test_simple_per_name_after_syncing(self, db): |
+ db.add_pername('file', 'key', 'name', 1) |
+ db.write() |
+ self.assertEquals(1, db.get_pername('file', 'key', 'name')) |
+ |
+ @_do_for_all_dbs |
+ def test_getting_returned(self, db): |
+ db.add_callinfo('file', 'key', (1, 2), 3) |
+ self.assertEquals(3, db.get_returned('file', 'key', (1, 2))) |
+ |
+ @_do_for_all_dbs |
+ def test_getting_returned_when_does_not_match(self, db): |
+ db.add_callinfo('file', 'key', (1, 2), 3) |
+ self.assertEquals(None, db.get_returned('file', 'key', (1, 1))) |
+ |
+ @_do_for_all_dbs |
+ def test_getting_call_info(self, db): |
+ db.add_callinfo('file', 'key', (1, 2), 3) |
+ |
+ call_infos = list(db.get_callinfos('file', 'key')) |
+ self.assertEquals(1, len(call_infos)) |
+ self.assertEquals((1, 2), call_infos[0].get_parameters()) |
+ self.assertEquals(3, call_infos[0].get_returned()) |
+ |
+ @_do_for_all_dbs |
+ def test_invalid_per_name(self, db): |
+ db.add_pername('file', 'key', 'name', -1) |
+ self.assertEquals(None, db.get_pername('file', 'key', 'name')) |
+ |
+ @_do_for_all_dbs |
+ def test_overwriting_per_name(self, db): |
+ db.add_pername('file', 'key', 'name', 1) |
+ db.add_pername('file', 'key', 'name', 2) |
+ self.assertEquals(2, db.get_pername('file', 'key', 'name')) |
+ |
+ @_do_for_all_dbs |
+ def test_not_overwriting_with_invalid_per_name(self, db): |
+ db.add_pername('file', 'key', 'name', 1) |
+ db.add_pername('file', 'key', 'name', -1) |
+ self.assertEquals(1, db.get_pername('file', 'key', 'name')) |
+ |
+ @_do_for_all_dbs |
+ def test_getting_invalid_returned(self, db): |
+ db.add_callinfo('file', 'key', (1, 2), -1) |
+ self.assertEquals(None, db.get_returned('file', 'key', (1, 2))) |
+ |
+ @_do_for_all_dbs |
+ def test_not_overwriting_with_invalid_returned(self, db): |
+ db.add_callinfo('file', 'key', (1, 2), 3) |
+ db.add_callinfo('file', 'key', (1, 2), -1) |
+ self.assertEquals(3, db.get_returned('file', 'key', (1, 2))) |
+ |
+ @_do_for_all_dbs |
+ def test_get_files(self, db): |
+ db.add_callinfo('file1', 'key', (1, 2), 3) |
+ db.add_callinfo('file2', 'key', (1, 2), 3) |
+ self.assertEquals(set(['file1', 'file2']), set(db.get_files())) |
+ |
+ @_do_for_all_dbs |
+ def test_validating_files(self, db): |
+ db.add_callinfo('invalid', 'key', (1, 2), 3) |
+ db.validate_files() |
+ self.assertEquals(0, len(db.get_files())) |
+ |
+ @_do_for_all_dbs |
+ def test_validating_file_for_scopes(self, db): |
+ db.add_callinfo('file', 'invalid', (1, 2), 3) |
+ db.validate_file('file') |
+ self.assertEquals(1, len(db.get_files())) |
+ self.assertEquals(0, len(list(db.get_callinfos('file', 'invalid')))) |
+ |
+ @_do_for_all_dbs |
+ def test_validating_file_moved(self, db): |
+ db.add_callinfo('file', 'key', (1, 2), 3) |
+ |
+ db.file_moved('file', 'newfile') |
+ self.assertEquals(1, len(db.get_files())) |
+ self.assertEquals(1, len(list(db.get_callinfos('newfile', 'key')))) |
+ |
+ @_do_for_all_dbs |
+ def test_using_file_list_observer(self, db): |
+ db.add_callinfo('invalid', 'key', (1, 2), 3) |
+ observer = _MockFileListObserver() |
+ db.add_file_list_observer(observer) |
+ db.validate_files() |
+ self.assertEquals('removed invalid ', observer.log) |
+ |
+ |
+def suite(): |
+ result = unittest.TestSuite() |
+ result.addTests(unittest.makeSuite(ObjectDBTest)) |
+ return result |
+ |
+ |
+if __name__ == '__main__': |
+ unittest.main() |