def test_has_depth_max_three(self):
        config = {
            "robot": {
                "controller": {
                    "kp": 10,
                    "ki": 0.1,
                },
                "so": 1337,
            }
        }
        expected_code = [
            "struct {",
            "    parameter_namespace_t ns;",
            "    struct {",
            "        parameter_namespace_t ns;",
            "        struct {",
            "            parameter_namespace_t ns;",
            "            parameter_t kp;",
            "            parameter_t ki;",
            "        } controller;",
            "        parameter_t so;",
            "    } robot;",
            "} config;",
        ]

        tree = parse_tree(config).to_struct().split("\n")

        self.assertEqual(tree, expected_code)
Пример #2
0
    def test_has_depth_max_three(self):
        config = {
            'robot': {
                'controller': {
                    'kp': 10,
                    'ki': 0.1,
                },
                'so': 1337,
            }
        }
        expected_code = [
            'void config_init(void)',
            '{',
            '    parameter_namespace_declare(&config.ns, NULL, NULL);',
            '    parameter_namespace_declare(&config.robot.ns, &config.ns, "robot");',
            '    parameter_namespace_declare(&config.robot.controller.ns, &config.robot.ns, "controller");',
            '    parameter_integer_declare(&config.robot.controller.kp, &config.robot.controller.ns, "kp");',
            '    parameter_scalar_declare(&config.robot.controller.ki, &config.robot.controller.ns, "ki");',
            '    parameter_integer_declare(&config.robot.so, &config.robot.ns, "so");',
            '}',
        ]

        tree = parse_tree(config).to_init_code().split('\n')

        self.assertEqual(tree, expected_code)
Пример #3
0
def main():
    args = parse_args()

    previous_code = None
    for file in args.config_file:
        config = yaml.load(file)
        config = sanitize_keys(config)
        config = {
            'master': config['master']
        }  # Only generate code for master config

        tree = parse_tree(config)
        code = ''
        code += '#include "config.h"\n'
        code += '\n'
        code += 'static ' + tree.to_struct()
        code += '\n'
        code += '\n'
        code += tree.to_init_code('config_master_init')

        if previous_code is None:
            previous_code = code
        elif code != previous_code:
            raise RuntimeError('Input YAML files do not yield the same code!')

    args.output.write(code)
Пример #4
0
    def test_has_depth_max_three(self):
        config = {
            'robot': {
                'controller': {
                    'kp': 10,
                    'ki': 0.1,
                },
                'so': 1337,
            }
        }
        expected_code = [
            'struct {',
            '    parameter_namespace_t ns;',
            '    struct {',
            '        parameter_namespace_t ns;',
            '        struct {',
            '            parameter_namespace_t ns;',
            '            parameter_t kp;',
            '            parameter_t ki;',
            '        } controller;',
            '        parameter_t so;',
            '    } robot;',
            '} config;',
        ]

        tree = parse_tree(config).to_struct().split('\n')

        self.assertEqual(tree, expected_code)
    def test_has_depth_max_three(self):
        config = {
            "robot": {
                "controller": {
                    "kp": 10,
                    "ki": 0.1,
                },
                "so": 1337,
            }
        }
        expected_code = [
            "void config_init(void)",
            "{",
            "    parameter_namespace_declare(&config.ns, NULL, NULL);",
            '    parameter_namespace_declare(&config.robot.ns, &config.ns, "robot");',
            '    parameter_namespace_declare(&config.robot.controller.ns, &config.robot.ns, "controller");',
            '    parameter_integer_declare(&config.robot.controller.kp, &config.robot.controller.ns, "kp");',
            '    parameter_scalar_declare(&config.robot.controller.ki, &config.robot.controller.ns, "ki");',
            '    parameter_integer_declare(&config.robot.so, &config.robot.ns, "so");',
            "}",
        ]

        tree = parse_tree(config).to_init_code().split("\n")

        self.assertEqual(tree, expected_code)
Пример #6
0
    def test_is_empty_struct(self):
        config = {}
        expected_code = [
            'struct {',
            '    parameter_namespace_t ns;',
            '} config;',
        ]

        tree = parse_tree(config).to_struct().split('\n')

        self.assertEqual(tree, expected_code)
    def test_is_empty_struct(self):
        config = {}
        expected_code = [
            "struct {",
            "    parameter_namespace_t ns;",
            "} config;",
        ]

        tree = parse_tree(config).to_struct().split("\n")

        self.assertEqual(tree, expected_code)
    def test_has_one_entry(self):
        config = {"answer": 42}
        expected_code = [
            "struct {",
            "    parameter_namespace_t ns;",
            "    parameter_t answer;",
            "} config;",
        ]

        tree = parse_tree(config).to_struct().split("\n")

        self.assertEqual(tree, expected_code)
    def test_replaces_dash_in_entry_name_with_underscore(self):
        config = {"the-answer": 42}
        expected_code = [
            "struct {",
            "    parameter_namespace_t ns;",
            "    parameter_t the_answer;",
            "} config;",
        ]

        tree = parse_tree(config).to_struct().split("\n")

        self.assertEqual(tree, expected_code)
Пример #10
0
    def test_is_empty_struct(self):
        config = {}
        expected_code = [
            'void config_init(void)',
            '{',
            '    parameter_namespace_declare(&config.ns, NULL, NULL);',
            '}',
        ]

        tree = parse_tree(config).to_init_code().split('\n')

        self.assertEqual(tree, expected_code)
Пример #11
0
    def test_replaces_dash_in_entry_name_with_underscore(self):
        config = {'the-answer': 42}
        expected_code = [
            'struct {',
            '    parameter_namespace_t ns;',
            '    parameter_t the_answer;',
            '} config;',
        ]

        tree = parse_tree(config).to_struct().split('\n')

        self.assertEqual(tree, expected_code)
Пример #12
0
    def test_has_one_entry(self):
        config = {'answer': 42}
        expected_code = [
            'struct {',
            '    parameter_namespace_t ns;',
            '    parameter_t answer;',
            '} config;',
        ]

        tree = parse_tree(config).to_struct().split('\n')

        self.assertEqual(tree, expected_code)
    def test_is_empty_struct(self):
        config = {}
        expected_code = [
            "void config_init(void)",
            "{",
            "    parameter_namespace_declare(&config.ns, NULL, NULL);",
            "}",
        ]

        tree = parse_tree(config).to_init_code().split("\n")

        self.assertEqual(tree, expected_code)
Пример #14
0
    def test_has_one_string_entry(self):
        config = {'answer': '42'}
        expected_code = [
            'void config_init(void)',
            '{',
            '    parameter_namespace_declare(&config.ns, NULL, NULL);',
            '    parameter_string_declare(&config.answer, &config.ns, "answer", config.answer_buffer, sizeof(config.answer_buffer));',
            '}',
        ]

        tree = parse_tree(config).to_init_code().split('\n')

        self.assertEqual(tree, expected_code)
    def test_has_one_integer_entry(self):
        config = {"answer": 42}
        expected_code = [
            "void config_init(void)",
            "{",
            "    parameter_namespace_declare(&config.ns, NULL, NULL);",
            '    parameter_integer_declare(&config.answer, &config.ns, "answer");',
            "}",
        ]

        tree = parse_tree(config).to_init_code().split("\n")

        self.assertEqual(tree, expected_code)
    def test_replaces_dash_in_entry_name_with_underscore(self):
        config = {"the-answer": 42}
        expected_code = [
            "void config_init(void)",
            "{",
            "    parameter_namespace_declare(&config.ns, NULL, NULL);",
            '    parameter_integer_declare(&config.the_answer, &config.ns, "the-answer");',
            "}",
        ]

        tree = parse_tree(config).to_init_code().split("\n")

        self.assertEqual(tree, expected_code)
    def test_has_one_string_entry(self):
        config = {"answer": "42"}
        expected_code = [
            "void config_init(void)",
            "{",
            "    parameter_namespace_declare(&config.ns, NULL, NULL);",
            '    parameter_string_declare(&config.answer, &config.ns, "answer", config.answer_buffer, sizeof(config.answer_buffer));',
            "}",
        ]

        tree = parse_tree(config).to_init_code().split("\n")

        self.assertEqual(tree, expected_code)
Пример #18
0
    def test_has_one_integer_entry(self):
        config = {'answer': 42}
        expected_code = [
            'void config_init(void)',
            '{',
            '    parameter_namespace_declare(&config.ns, NULL, NULL);',
            '    parameter_integer_declare(&config.answer, &config.ns, "answer");',
            '}',
        ]

        tree = parse_tree(config).to_init_code().split('\n')

        self.assertEqual(tree, expected_code)
Пример #19
0
    def test_replaces_dash_in_entry_name_with_underscore(self):
        config = {'the-answer': 42}
        expected_code = [
            'void config_init(void)',
            '{',
            '    parameter_namespace_declare(&config.ns, NULL, NULL);',
            '    parameter_integer_declare(&config.the_answer, &config.ns, "the-answer");',
            '}',
        ]

        tree = parse_tree(config).to_init_code().split('\n')

        self.assertEqual(tree, expected_code)
    def test_has_one_namespace_with_entries(self):
        config = {
            "controller": {
                "kp": 10,
                "ki": 0.1,
            }
        }
        expected_code = [
            "void config_init(void)",
            "{",
            "    parameter_namespace_declare(&config.ns, NULL, NULL);",
            '    parameter_namespace_declare(&config.controller.ns, &config.ns, "controller");',
            '    parameter_integer_declare(&config.controller.kp, &config.controller.ns, "kp");',
            '    parameter_scalar_declare(&config.controller.ki, &config.controller.ns, "ki");',
            "}",
        ]

        tree = parse_tree(config).to_init_code().split("\n")

        self.assertEqual(tree, expected_code)
Пример #21
0
    def test_has_one_namespace_with_entries(self):
        config = {
            'controller': {
                'kp': 10,
                'ki': 0.1,
            }
        }
        expected_code = [
            'void config_init(void)',
            '{',
            '    parameter_namespace_declare(&config.ns, NULL, NULL);',
            '    parameter_namespace_declare(&config.controller.ns, &config.ns, "controller");',
            '    parameter_integer_declare(&config.controller.kp, &config.controller.ns, "kp");',
            '    parameter_scalar_declare(&config.controller.ki, &config.controller.ns, "ki");',
            '}',
        ]

        tree = parse_tree(config).to_init_code().split('\n')

        self.assertEqual(tree, expected_code)
Пример #22
0
    def test_has_one_namespace_with_entries(self):
        config = {
            'controller': {
                'kp': 10,
                'ki': 0.1,
            }
        }
        expected_code = [
            'struct {',
            '    parameter_namespace_t ns;',
            '    struct {',
            '        parameter_namespace_t ns;',
            '        parameter_t kp;',
            '        parameter_t ki;',
            '    } controller;',
            '} config;',
        ]

        tree = parse_tree(config).to_struct().split('\n')

        self.assertEqual(tree, expected_code)
    def test_has_one_namespace_with_entries(self):
        config = {
            "controller": {
                "kp": 10,
                "ki": 0.1,
            }
        }
        expected_code = [
            "struct {",
            "    parameter_namespace_t ns;",
            "    struct {",
            "        parameter_namespace_t ns;",
            "        parameter_t kp;",
            "        parameter_t ki;",
            "    } controller;",
            "} config;",
        ]

        tree = parse_tree(config).to_struct().split("\n")

        self.assertEqual(tree, expected_code)
Пример #24
0
def main():
    args = parse_args()

    previous_code = None
    for file in args.config_file:
        config = yaml.safe_load(file)
        config = sanitize_keys(config)
        config = {"master": config["master"]}  # Only generate code for master config

        tree = parse_tree(config)
        code = ""
        code += '#include "config.h"\n'
        code += "\n"
        code += "static " + tree.to_struct()
        code += "\n"
        code += "\n"
        code += tree.to_init_code("config_master_init")

        if previous_code is None:
            previous_code = code
        elif code != previous_code:
            raise RuntimeError("Input YAML files do not yield the same code!")

    args.output.write(code)
    def test_throws_on_list_entry(self):
        config = {"answer": [1, 2, 3]}

        with self.assertRaises(TypeError):
            parse_tree(config).to_init_code()