Index: tools/json_schema_compiler/feature_compiler_test.py |
diff --git a/tools/json_schema_compiler/feature_compiler_test.py b/tools/json_schema_compiler/feature_compiler_test.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..02d366fb505b5e3e90e09e403a158ace70efce53 |
--- /dev/null |
+++ b/tools/json_schema_compiler/feature_compiler_test.py |
@@ -0,0 +1,81 @@ |
+#!/usr/bin/env python |
+# Copyright 2015 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+import feature_compiler |
+import unittest |
+ |
+class FeatureCompilerTest(unittest.TestCase): |
+ """Test the FeatureCompiler. Note that we test that the expected features are |
+ generated more thoroughly in features_generation_unittest.cc. And, of course, |
+ this is most exhaustively tested through Chrome's compilation process (if a |
+ feature fails to parse, the compile fails). |
+ These tests primarily focus on catching errors during parsing. |
+ """ |
+ def _parseFeature(self, value): |
+ """Parses a feature from the given value and returns the result.""" |
+ f = feature_compiler.Feature('alpha') |
+ f.Parse(value) |
+ return f |
+ |
+ def _hasError(self, f, error): |
+ """Asserts that |error| is present somewhere in the given feature's |
+ errors.""" |
+ self.assertTrue(f.errors) |
+ self.assertNotEqual(-1, str(f.errors).find(error), str(f.errors)) |
+ |
+ def setUp(self): |
+ feature_compiler.ENABLE_ASSERTIONS = False |
+ feature_compiler.STRINGS_TO_UNICODE = True |
+ |
+ def testFeature(self): |
+ # Test some basic feature parsing for a sanity check. |
+ f = self._parseFeature({ |
+ 'blacklist': ['aaa', 'bbb'], |
+ 'channel': 'stable', |
+ 'command_line_switch': 'switch', |
+ 'component_extensions_auto_granted': False, |
+ 'contexts': ['blessed_extension', 'blessed_web_page'], |
+ 'default_parent': True, |
+ 'dependencies': ['dependency1', 'dependency2'], |
+ 'extension_types': ['extension'], |
+ 'location': 'component', |
+ 'internal': True, |
+ 'matches': ['*://*/*'], |
+ 'max_manifest_version': 1, |
+ 'noparent': True, |
+ 'platforms': ['mac', 'win'], |
+ 'whitelist': ['zzz', 'yyy'] |
+ }) |
+ self.assertFalse(f.errors) |
+ |
+ def testUnknownKeyError(self): |
+ f = self._parseFeature({ |
+ 'contexts': ['blessed_extension'], |
+ 'channel': 'stable', |
+ 'unknownkey': 'unknownvalue' |
+ }) |
+ self._hasError(f, 'Unrecognized key') |
+ |
+ def testUnknownEnumValue(self): |
+ f = self._parseFeature({ |
+ 'contexts': ['blessed_extension', 'unknown_context'], |
+ 'channel': 'stable' |
+ }) |
+ self._hasError(f, 'Illegal value: "unknown_context"') |
+ |
+ def testImproperType(self): |
+ f = self._parseFeature({'min_manifest_version': '1'}) |
+ self._hasError(f, 'Illegal value: "1"') |
+ |
+ def testImproperSubType(self): |
+ f = self._parseFeature({'dependencies': [1, 2, 3]}) |
+ self._hasError(f, 'Illegal value: "1"') |
+ |
+ def testImproperValue(self): |
+ f = self._parseFeature({'noparent': False}) |
+ self._hasError(f, 'Illegal value: "False"') |
+ |
+if __name__ == '__main__': |
+ unittest.main() |