Example #1
0
 def test_bad_rule_field_throw(self):
     with self.assertRaises(ParserError):
         parse_string(
             dedent("""\
             rule foo:
                 bad_field: junk
             """))
Example #2
0
 def test_bad_rule_field_throw(self):
     with self.assertRaises(ParserError):
         parse_string(
             dedent("""\
             rule foo:
                 bad_field: junk
             """))
Example #3
0
 def test_parse_bad_list_imports_throw(self):
     input = dedent('''\
         imports:
             - a: foo
               b: bar
     ''')
     with self.assertRaises(ParserError):
         parse_string(input)
Example #4
0
 def test_duplicate_names_throw(self):
     input = dedent("""
         git module {}:
         rule {}:
         """)
     # Should be fine with different names...
     parse_string(input.format("foo", "bar"))
     # But should fail with duplicates.
     with self.assertRaises(ParserError):
         parse_string(input.format("foo", "foo"))
Example #5
0
 def test_non_string_module_field_name(self):
     input = dedent('''\
         git module foo:
             12345: bar
         ''')
     try:
         parse_string(input)
     except ParserError as e:
         assert '12345' in e.message
     else:
         assert False, 'expected ParserError'
Example #6
0
 def test_non_string_module_field_value(self):
     input = dedent('''\
         git module foo:
             bar: 4567
         ''')
     try:
         parse_string(input)
     except ParserError as e:
         assert '4567' in e.message
     else:
         assert False, 'expected ParserError'
Example #7
0
 def test_build_field_deprecated_message(self):
     input = dedent('''\
         rule foo:
             build: shell command
         ''')
     try:
         parse_string(input)
     except ParserError as e:
         assert 'The "build" field is no longer supported.' in e.message
     else:
         assert False, 'expected ParserError'
Example #8
0
 def test_build_field_deprecated_message(self):
     input = dedent('''\
         rule foo:
             build: shell command
         ''')
     try:
         parse_string(input)
     except ParserError as e:
         assert 'The "build" field is no longer supported.' in e.message
     else:
         assert False, 'expected ParserError'
Example #9
0
 def test_non_string_module_field_value(self):
     input = dedent('''\
         git module foo:
             bar: 4567
         ''')
     try:
         parse_string(input)
     except ParserError as e:
         assert '4567' in e.message
     else:
         assert False, 'expected ParserError'
Example #10
0
 def test_non_string_module_field_name(self):
     input = dedent('''\
         git module foo:
             12345: bar
         ''')
     try:
         parse_string(input)
     except ParserError as e:
         assert '12345' in e.message
     else:
         assert False, 'expected ParserError'
Example #11
0
 def test_non_string_module_field_name(self):
     input = dedent(
         """\
         git module foo:
             12345: bar
         """
     )
     try:
         parse_string(input)
     except ParserError as e:
         assert "12345" in e.message
     else:
         assert False, "expected ParserError"
Example #12
0
 def test_forgotten_colon(self):
     # There are many different permutations of this error, and this only
     # tests the one mentioned in
     # https://github.com/keybase/client/issues/242.
     # TODO: A more general data validation library might help the parser do
     # a better job of checking these things. See
     # https://github.com/buildinspace/peru/issues/40.
     input = dedent('''\
         rule test:
             pick bla
         ''')
     with self.assertRaises(ParserError):
         parse_string(input)
Example #13
0
 def test_forgotten_colon(self):
     # There are many different permutations of this error, and this only
     # tests the one mentioned in
     # https://github.com/keybase/client/issues/242.
     # TODO: A more general data validation library might help the parser do
     # a better job of checking these things. See
     # https://github.com/buildinspace/peru/issues/40.
     input = dedent('''\
         rule test:
             pick bla
         ''')
     with self.assertRaises(ParserError):
         parse_string(input)
Example #14
0
 def test_non_string_module_field_value(self):
     input = dedent(
         """\
         git module foo:
             bar: 4567
         """
     )
     try:
         parse_string(input)
     except ParserError as e:
         assert "4567" in e.message
     else:
         assert False, "expected ParserError"
Example #15
0
 def test_parse_empty_imports(self):
     input = dedent('''\
         imports:
         ''')
     result = parse_string(input)
     self.assertDictEqual(result.scope, {})
     self.assertEqual(result.local_module.imports, build_imports({}))
Example #16
0
 def test_duplicate_names_throw(self):
     # Modules and rules should not conflict.
     ok_input = dedent('''
         rule foo:
         git module foo:
         ''')
     parse_string(ok_input)
     # But duplicate modules should fail. (Duplicate rules are a not
     # currently possible, because their YAML keys would be exact
     # duplicates.)
     bad_input = dedent('''
         git module foo:
         hg module foo:
         ''')
     with self.assertRaises(ParserError):
         parse_string(bad_input)
Example #17
0
 def test_duplicate_names_throw(self):
     # Modules and rules should not conflict.
     ok_input = dedent('''
         rule foo:
         git module foo:
         ''')
     parse_string(ok_input)
     # But duplicate modules should fail. (Duplicate rules are a not
     # currently possible, because their YAML keys would be exact
     # duplicates.)
     bad_input = dedent('''
         git module foo:
         hg module foo:
         ''')
     with self.assertRaises(ParserError):
         parse_string(bad_input)
Example #18
0
 def test_parse_empty_imports(self):
     input = dedent('''\
         imports:
         ''')
     scope, imports = parse_string(input)
     self.assertDictEqual(scope.modules, {})
     self.assertDictEqual(scope.rules, {})
     self.assertEqual(imports, {})
Example #19
0
 def test_parse_empty_imports(self):
     input = dedent('''\
         imports:
         ''')
     scope, imports = parse_string(input)
     self.assertDictEqual(scope.modules, {})
     self.assertDictEqual(scope.rules, {})
     self.assertEqual(imports, {})
Example #20
0
 def test_parse_toplevel_imports(self):
     input = dedent("""\
         imports:
             foo: bar/
         """)
     scope, imports = parse_string(input)
     self.assertDictEqual(scope.modules, {})
     self.assertDictEqual(scope.rules, {})
     self.assertEqual(imports, {'foo': ('bar/', )})
Example #21
0
 def test_parse_toplevel_imports(self):
     input = dedent("""\
         imports:
             foo: bar/
         """)
     result = parse_string(input)
     self.assertDictEqual(result.scope, {})
     self.assertEqual(result.local_module.imports, build_imports(
         {'foo': 'bar/'}))
Example #22
0
 def test_parse_list_imports(self):
     input = dedent('''\
         imports:
             - foo: bar/
         ''')
     result = parse_string(input)
     self.assertDictEqual(result.scope, {})
     self.assertEqual(result.local_module.imports, build_imports(
         {'foo': 'bar/'}))
Example #23
0
 def test_parse_toplevel_imports(self):
     input = dedent("""\
         imports:
             foo: bar/
         """)
     scope, imports = parse_string(input)
     self.assertDictEqual(scope.modules, {})
     self.assertDictEqual(scope.rules, {})
     self.assertEqual(imports, {'foo': ('bar/',)})
Example #24
0
 def test_parse_multimap_imports(self):
     input = dedent('''\
         imports:
             foo:
               - bar/
         ''')
     scope, imports = parse_string(input)
     self.assertDictEqual(scope.modules, {})
     self.assertDictEqual(scope.rules, {})
     self.assertEqual(imports, {'foo': ('bar/',)})
Example #25
0
 def test_parse_multimap_imports(self):
     input = dedent('''\
         imports:
             foo:
               - bar/
         ''')
     scope, imports = parse_string(input)
     self.assertDictEqual(scope.modules, {})
     self.assertDictEqual(scope.rules, {})
     self.assertEqual(imports, {'foo': ('bar/', )})
Example #26
0
 def test_parse_rule(self):
     input = dedent("""\
         rule foo:
             export: out/
         """)
     scope, imports = parse_string(input)
     self.assertIn("foo", scope.rules)
     rule = scope.rules["foo"]
     self.assertIsInstance(rule, Rule)
     self.assertEqual(rule.name, "foo")
     self.assertEqual(rule.export, "out/")
Example #27
0
 def test_parse_module_default_rule(self):
     input = dedent("""\
         git module bar:
             export: bar
         """)
     scope, imports = parse_string(input)
     self.assertIn("bar", scope.modules)
     module = scope.modules["bar"]
     self.assertIsInstance(module, Module)
     self.assertIsInstance(module.default_rule, Rule)
     self.assertEqual(module.default_rule.export, "bar")
Example #28
0
 def test_parse_module_default_rule(self):
     input = dedent("""\
         git module bar:
             export: bar
         """)
     scope, imports = parse_string(input)
     self.assertIn("bar", scope.modules)
     module = scope.modules["bar"]
     self.assertIsInstance(module, Module)
     self.assertIsInstance(module.default_rule, Rule)
     self.assertEqual(module.default_rule.export, "bar")
Example #29
0
 def test_parse_rule(self):
     input = dedent("""\
         rule foo:
             export: out/
         """)
     scope, imports = parse_string(input)
     self.assertIn("foo", scope.rules)
     rule = scope.rules["foo"]
     self.assertIsInstance(rule, Rule)
     self.assertEqual(rule.name, "foo")
     self.assertEqual(rule.export, "out/")
Example #30
0
 def test_parse_multimap_imports(self):
     input = dedent(
         """\
         imports:
             foo:
               - bar/
         """
     )
     scope, imports = parse_string(input)
     self.assertDictEqual(scope.modules, {})
     self.assertDictEqual(scope.rules, {})
     self.assertEqual(imports, {"foo": ("bar/",)})
Example #31
0
    def test_name_prefix(self):
        input = dedent('''\
            git module foo:
                url: fun stuff

            rule bar:
                export: more stuff
            ''')
        scope, imports = parse_string(input, name_prefix='x')
        # Lookup keys should be unaffected, but the names that modules and
        # rules give for themselves should have the prefix.
        assert scope.modules['foo'].name == 'xfoo'
        assert scope.rules['bar'].name == 'xbar'
Example #32
0
 def test_parse_module_default_rule(self):
     input = dedent("""\
         git module bar:
             build: foo
             export: bar
         """)
     result = parse_string(input)
     self.assertIn("bar", result.scope)
     module = result.scope["bar"]
     self.assertIsInstance(module, RemoteModule)
     self.assertIsInstance(module.default_rule, Rule)
     self.assertEqual(module.default_rule.build_command, "foo")
     self.assertEqual(module.default_rule.export, "bar")
Example #33
0
 def test_parse_rule(self):
     input = dedent("""\
         rule foo:
             build: echo hi
             export: out/
         """)
     result = parse_string(input)
     self.assertIn("foo", result.scope)
     rule = result.scope["foo"]
     self.assertIsInstance(rule, Rule)
     self.assertEqual(rule.name, "foo")
     self.assertEqual(rule.build_command, "echo hi")
     self.assertEqual(rule.export, "out/")
Example #34
0
    def test_name_prefix(self):
        input = dedent('''\
            git module foo:
                url: fun stuff

            rule bar:
                export: more stuff
            ''')
        scope, imports = parse_string(input, name_prefix='x')
        # Lookup keys should be unaffected, but the names that modules and
        # rules give for themselves should have the prefix.
        assert scope.modules['foo'].name == 'xfoo'
        assert scope.rules['bar'].name == 'xbar'
Example #35
0
    def test_name_prefix(self):
        input = dedent(
            """\
            git module foo:
                url: fun stuff

            rule bar:
                export: more stuff
            """
        )
        scope, imports = parse_string(input, name_prefix="x")
        # Lookup keys should be unaffected, but the names that modules and
        # rules give for themselves should have the prefix.
        assert scope.modules["foo"].name == "xfoo"
        assert scope.rules["bar"].name == "xbar"
Example #36
0
 def test_non_string_module_field_value(self):
     input = dedent('''\
         git module foo:
             bar: 123
             # These booleans should turn into "true" and "false".
             baz: yes
             bing: no
         ''')
     scope, imports = parse_string(input)
     foo = scope.modules['foo']
     self.assertDictEqual(foo.plugin_fields, {
         "bar": "123",
         "baz": "true",
         "bing": "false",
     })
Example #37
0
 def test_non_string_module_field_value(self):
     input = dedent('''\
         git module foo:
             bar: 123
             # These booleans should turn into "true" and "false".
             baz: yes
             bing: no
         ''')
     scope, imports = parse_string(input)
     foo = scope.modules['foo']
     self.assertDictEqual(foo.plugin_fields, {
         "bar": "123",
         "baz": "true",
         "bing": "false",
     })
Example #38
0
 def test_parse_module(self):
     input = dedent("""\
         sometype module foo:
             url: http://www.example.com/
             rev: abcdefg
         """)
     scope, imports = parse_string(input)
     self.assertIn("foo", scope.modules)
     module = scope.modules["foo"]
     self.assertIsInstance(module, Module)
     self.assertEqual(module.name, "foo")
     self.assertEqual(module.type, "sometype")
     self.assertDictEqual(module.plugin_fields,
                          {"url": "http://www.example.com/",
                           "rev": "abcdefg"})
Example #39
0
 def test_parse_module(self):
     input = dedent("""\
         sometype module foo:
             url: http://www.example.com/
             rev: abcdefg
         """)
     scope, imports = parse_string(input)
     self.assertIn("foo", scope.modules)
     module = scope.modules["foo"]
     self.assertIsInstance(module, Module)
     self.assertEqual(module.name, "foo")
     self.assertEqual(module.type, "sometype")
     self.assertDictEqual(module.plugin_fields, {
         "url": "http://www.example.com/",
         "rev": "abcdefg"
     })
Example #40
0
 def test_parse_module(self):
     input = dedent("""\
         sometype module foo:
             url: http://www.example.com/
             rev: abcdefg
             imports:
                 wham: bam/
                 thank: you/maam
         """)
     result = parse_string(input)
     self.assertIn("foo", result.scope)
     module = result.scope["foo"]
     self.assertIsInstance(module, RemoteModule)
     self.assertEqual(module.name, "foo")
     self.assertEqual(module.type, "sometype")
     self.assertEqual(module.imports, build_imports(
         {'wham': 'bam/', 'thank': 'you/maam'}))
     self.assertDictEqual(module.plugin_fields,
                          {"url": "http://www.example.com/",
                           "rev": "abcdefg"})
Example #41
0
 def test_bad_toplevel_field_throw(self):
     with self.assertRaises(ParserError):
         parse_string("foo: bar")
Example #42
0
 def test_parse_wrong_type_imports_throw(self):
     with self.assertRaises(ParserError):
         parse_string('imports: 5')
Example #43
0
 def test_parse_empty_file(self):
     scope, imports = parse_string('')
     self.assertDictEqual(scope.modules, {})
     self.assertDictEqual(scope.rules, {})
     self.assertEqual(imports, {})
Example #44
0
 def test_bad_rule_name_throw(self):
     with self.assertRaises(ParserError):
         parse_string("rule foo bar:")
Example #45
0
 def test_bad_module_name_throw(self):
     with self.assertRaises(ParserError):
         parse_string("git module abc def:")
     with self.assertRaises(ParserError):
         parse_string("git module:")
Example #46
0
 def test_parse_wrong_type_imports_throw(self):
     with self.assertRaises(ParserError):
         parse_string('imports: 5')
Example #47
0
 def test_bad_toplevel_field_throw(self):
     with self.assertRaises(ParserError):
         parse_string("foo: bar")
Example #48
0
 def test_bad_module_name_throw(self):
     with self.assertRaises(ParserError):
         parse_string("git module abc def:")
     with self.assertRaises(ParserError):
         parse_string("git module:")
Example #49
0
 def test_parse_empty_file(self):
     scope, imports = parse_string('')
     self.assertDictEqual(scope.modules, {})
     self.assertDictEqual(scope.rules, {})
     self.assertEqual(imports, {})