def test_impl_container_get_tags(self): container = plugin.ImplContainer("norm", None) imp1 = TestPluginImplContainer.ImplTest("implml/test.content", None) imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content", None) imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content", None) subcontainer = plugin.ImplContainer("sub", None) container.append(imp1) container.append(imp2a) container.append(imp2b) container.append(subcontainer) self.assertEquals(container.get_tags(), None) self.assertEquals(container.get_child_tags(), {}) container.set_tags({'test': ['foobar']}) self.assertEquals(container.get_tags(), None) self.assertEquals(container.get_child_tags(), {}) imp1.set_tags({'foo': ['bar']}) self.assertEquals(container.get_child_tags(), {'foo': ['bar']}) self.assertEquals(container.get_tags(), None) imp2a.set_tags({'test': ['bar'], 'foo': ['more']}) self.assertEquals(container.get_child_tags(), { 'foo': ['bar', 'more'], 'test': ['bar'] }) self.assertEquals(container.get_tags(), None) subcontainer.set_tags({'test': ['bar1']}) self.assertEquals(container.get_tags(), None)
def test_impl_container_generate_with_generation_contexts_tags(self): container = plugin.ImplContainer("norm", None) imp1 = TestPluginImplContainer.ImplTest("implml/test.content", None) subcontainer1 = plugin.ImplContainer("implml/sub1.implml", None) subcontainer1.append(imp1) subcontainer2 = plugin.ImplContainer("implml/sub2.implml", None) imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content", None) imp2a.set_tags({'target': ['rofs3', 'uda']}) imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content", None) imp2b.set_tags({'target': ['rofs3', 'uda']}) subcontainer2.append(imp2a) subcontainer2.append(imp2b) container.append(subcontainer1) container.append(subcontainer2) context = plugin.GenerationContext() context.tags = {'target': ['rofs3'], 'foobar': ['test']} container.generate(context) self.assertFalse(imp1.generate_invoked) self.assertTrue(imp2a.generate_invoked) self.assertTrue(imp2a.generate_invoked) self.assertEquals(sorted(context.executed_impls), sorted([imp2a, imp2b]))
def test_impl_container_set_output_root(self): container = plugin.ImplContainer("norm", None) subcontainer = plugin.ImplContainer("norm", None) imp1 = TestPluginImplContainer.ImplTest("implml/test.content", None) imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content", None) imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content", None) container.append(subcontainer) subcontainer.append(imp1) subcontainer.append(imp2a) subcontainer.append(imp2b) self.assertEquals(imp1.get_output_root(), '') container.set_output_root('foobar/test') self.assertEquals(imp1.get_output_root(), 'foobar/test')
def read_impl(cls, resource_ref, configuration, etree): reader = cls(resource_ref, configuration) # Register relations etc. to the rule engine. # Due to unit test issues the relations are not registered # in the relations module, but only for the duration of # rule parsing and execution relations.register() try: rules = reader.parse_rules(resource_ref, etree) eval_globals = reader.parse_eval_globals(etree) lineno = utils.etree.get_lineno(etree) # Create an ImplContainer to hold each rule as its own # RuleML implementation main_impl = plugin.ImplContainer(resource_ref, configuration) main_impl.lineno = lineno for rule in rules: relation_container = RulemlRelationContainer( configuration=configuration, source="%s:%d" % (resource_ref, rule.lineno), rule_list=[rule], eval_globals=eval_globals) impl = RuleImpl(resource_ref, configuration, relation_container) impl.lineno = rule.lineno rule.implml = impl main_impl.append(impl) finally: relations.unregister() return main_impl
def test_impl_container_sub_container(self): container = plugin.ImplContainer("norm", None) imp1 = plugin.ImplBase("implml/test.content", None) container.append(imp1) subcontainer = plugin.ImplContainer("implml/sub.implml", None) imp2a = plugin.ImplBase("implml/sub.implml:21.content", None) imp2b = plugin.ImplBase("implml/sub.implml:24.content", None) subcontainer.append(imp2a) subcontainer.append(imp2b) container.append(subcontainer) self.assertEquals(container.get_all_implementations(), [imp1, imp2a, imp2b]) self.assertEquals(container.impls, [imp1, subcontainer]) container[0] = subcontainer self.assertEquals(container.impls, [subcontainer, subcontainer]) del container[0] self.assertEquals(container.impls, [subcontainer])
def test_impl_container_sub_container_generate(self): container = plugin.ImplContainer("norm", None) imp1 = TestPluginImplContainer.ImplTest("implml/test.content", None) container.append(imp1) subcontainer = plugin.ImplContainer("implml/sub.implml", None) imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content", None) imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content", None) subcontainer.append(imp2a) subcontainer.append(imp2b) container.append(subcontainer) self.assertEquals(container.impls, [imp1, subcontainer]) container.append(subcontainer) container.generate() self.assertTrue(imp1.generate_invoked) self.assertTrue(imp2a.generate_invoked) self.assertTrue(imp2a.generate_invoked)
def test_impl_container_add(self): container = plugin.ImplContainer("norm", None) imp1 = plugin.ImplBase("implml/test.content", None) imp2a = plugin.ImplBase("implml/copy:21.content", None) imp2b = plugin.ImplBase("implml/copy:24.content", None) container.append(imp1) container.append(imp2a) container.append(imp2b) self.assertEquals(container.impls, [imp1, imp2a, imp2b])
def test_impl_container_list_output_files(self): container = plugin.ImplContainer("norm", None) subcontainer = plugin.ImplContainer("norm", None) imp1 = TestPluginImplContainer.ImplTest("implml/test.content", None) imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content", None) imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content", None) container.append(subcontainer) subcontainer.append(imp1) subcontainer.append(imp2a) subcontainer.append(imp2b) self.assertEquals(container.list_output_files(), ['foo/test.txt']) imp2b.output_files = ['output/dummy2.txt'] self.assertEquals(container.list_output_files(), ['foo/test.txt', 'output/dummy2.txt']) imp1.output_files = ['output/foobar/hee.txt'] self.assertEquals( container.list_output_files(), ['output/foobar/hee.txt', 'foo/test.txt', 'output/dummy2.txt'])
def test_impl_container_sub_container_generate_with_generation_contexts( self): container = plugin.ImplContainer("norm", None) imp1 = TestPluginImplContainer.ImplTest("implml/test.content", None) container.append(imp1) subcontainer = plugin.ImplContainer("implml/sub.implml", None) imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content", None) imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content", None) subcontainer.append(imp2a) subcontainer.append(imp2b) container.append(subcontainer) self.assertEquals(container.impls, [imp1, subcontainer]) context = plugin.GenerationContext() container.generate(context) self.assertTrue(imp1.generate_invoked) self.assertTrue(imp2a.generate_invoked) self.assertTrue(imp2a.generate_invoked) self.assertEquals(sorted(context.executed_impls), sorted([imp1, imp2a, imp2b]))
def test_impl_container_get_outputs(self): container = plugin.ImplContainer("norm", None) subcontainer = plugin.ImplContainer("norm", None) imp1 = TestPluginImplContainer.ImplTest("implml/test.content", None) imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content", None) imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content", None) container.append(subcontainer) subcontainer.append(imp1) subcontainer.append(imp2a) subcontainer.append(imp2b) self.assertEquals(len(container.get_outputs()), 3) self.assertEquals(container.get_outputs()[0].name, 'foo/test.txt') self.assertEquals(container.get_outputs()[1].name, 'foo/test.txt') self.assertEquals(container.get_outputs()[2].name, 'foo/test.txt') imp2b.output_files = ['foobar.txt', 'output/dummy2.txt'] self.assertEquals(len(container.get_outputs()), 4) self.assertEquals(container.get_outputs()[0].name, 'foo/test.txt') self.assertEquals(container.get_outputs()[1].name, 'foo/test.txt') self.assertEquals(container.get_outputs()[2].name, 'foobar.txt')
def test_impl_container_generate_with_generation_phase(self): container = plugin.ImplContainer("norm", None) imp1 = TestPluginImplContainer.ImplTest("implml/test.content", None) subcontainer1 = plugin.ImplContainer("implml/sub1.implml", None) subcontainer1.append(imp1) subcontainer2 = plugin.ImplContainer("implml/sub2.implml", None) imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content", None) imp2a.set_invocation_phase("post") imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content", None) imp2b.set_invocation_phase("post") subcontainer2.append(imp2a) subcontainer2.append(imp2b) container.append(subcontainer1) container.append(subcontainer2) context = plugin.GenerationContext(output='') context.phase = "post" container.generate(context) self.assertFalse(imp1.generate_invoked) self.assertTrue(imp2a.generate_invoked) self.assertTrue(imp2a.generate_invoked) self.assertEquals(sorted(context.executed_impls), sorted([imp2a, imp2b])) self.assertEquals(context.executed_impls[0].list_output_files(), ['foo/test.txt']) self.assertEquals(len(context.generation_output), 2) self.assertEquals(context.generation_output[0].name, 'foo/test.txt') self.assertEquals( str(context.generation_output[0]), "GenerationOutput(foo/test.txt, ImplTest(ref='implml/copy:21.content', type=None, lineno=None))" ) self.assertEquals( str(context.generation_output[1]), "GenerationOutput(foo/test.txt, ImplTest(ref='implml/copy:24.content', type=None, lineno=None))" ) self.assertEquals(context.generation_output[0].implementation, imp2a)
def test_impl_container_generate(self): container = plugin.ImplContainer("norm", None) imp1 = TestPluginImplContainer.ImplTest("implml/test.content", None) imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content", None) imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content", None) container.append(imp1) container.append(imp2a) container.append(imp2b) container.generate() self.assertTrue(imp1.generate_invoked) self.assertTrue(imp2a.generate_invoked) self.assertTrue(imp2a.generate_invoked)
def test_impl_container_generate_dry_run(self): container = plugin.ImplContainer("norm", None) imp1 = TestPluginImplContainer.ImplTest("implml/test.content", None) container.append(imp1) subcontainer = plugin.ImplContainer("implml/sub.implml", None) imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content", None) imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content", None) subcontainer.append(imp2a) subcontainer.append(imp2b) container.append(subcontainer) self.assertEquals(container.impls, [imp1, subcontainer]) context = plugin.GenerationContext() context.dry_run = True container.generate(context) self.assertFalse(imp1.generate_invoked) self.assertFalse(imp2a.generate_invoked) self.assertFalse(imp2a.generate_invoked) self.assertEquals(sorted(context.executed_impls), sorted([imp1, imp2a, imp2b])) self.assertEquals(context.executed_impls[0].list_output_files(), ['foo/test.txt']) self.assertEquals(len(context.generation_output), 0)
def test_impl_container_get_phase(self): container = plugin.ImplContainer("norm", None) imp1 = TestPluginImplContainer.ImplTest("implml/test.content", None) imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content", None) imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content", None) subcontainer1 = plugin.ImplContainer("norm", None) container.append(subcontainer1) subcontainer1.append(imp1) subcontainer1.append(imp2a) subcontainer1.append(imp2b) subcontainer1.set_invocation_phase("normal") self.assertEquals(container.invocation_phase(), "normal") imp1.set_invocation_phase('pre') self.assertEquals(container.invocation_phase(), "normal") subcontainer2 = plugin.ImplContainer("norm", None) subimp = TestPluginImplContainer.ImplTest("implml/copy:24.content", None) subimp.set_invocation_phase('post') subcontainer2.append(subimp) subcontainer2.set_invocation_phase('post') container.append(subcontainer2) self.assertEquals(container.invocation_phase(), 'normal')
def test_impl_container_with_condition(self): logger = logging.getLogger('cone') ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) logger.addHandler(ch) context = plugin.GenerationContext() context.configuration = api.Configuration() context.configuration.add_feature(api.Feature("test")) context.configuration.add_feature(api.Feature("stringsub"), "test") context.configuration.add_feature(api.Feature("intsub"), "test") context.configuration.get_default_view().test.value = True context.configuration.get_default_view( ).test.stringsub.value = "stringval" context.configuration.get_default_view().test.intsub.value = 2 condition = rules.SimpleCondition("${test}", "true") container = plugin.ImplContainer("norm", None) container.condition = condition imp1 = TestPluginImplContainer.ImplTest("implml/test.content", None) container.append(imp1) container.generate(context) self.assertTrue(imp1.generate_invoked) imp1.generate_invoked = False context.configuration.get_default_view().test.value = False container.generate(context) self.assertFalse(imp1.generate_invoked) imp1.generate_invoked = False condition = rules.SimpleCondition("${test}", "false") container.condition = condition container.generate(context) self.assertTrue(imp1.generate_invoked) imp1.generate_invoked = False context.configuration.get_default_view().test.value = True container.generate(context) self.assertFalse(imp1.generate_invoked) imp1.generate_invoked = False condition = rules.SimpleCondition("${test.intsub}", "1") container.condition = condition container.append(imp1) container.generate(context) self.assertFalse(imp1.generate_invoked) context.configuration.get_default_view().test.intsub.value = 1 container.generate(context) self.assertTrue(imp1.generate_invoked)
def test_impl_container_get_refs(self): container = plugin.ImplContainer("norm", None) imp1 = TestPluginImplContainer.ImplTest("implml/test.content", None) imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content", None) imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content", None) container.append(imp1) container.append(imp2a) container.append(imp2b) self.assertEquals(container.get_refs(), None) self.assertEquals(container.get_child_refs(), ['dummy1.too']) imp2b.refs = ['dummy2.foo'] self.assertEquals(container.get_refs(), None) self.assertEquals(container.get_child_refs(), ['dummy1.too', 'dummy2.foo']) imp2b.refs = None self.assertEquals(container.get_refs(), None) self.assertEquals(container.get_child_refs(), ['dummy1.too'])
def read_impl(cls, resource_ref, configuration, etree): reader = cls(resource_ref, configuration) rules = reader.parse_rules(resource_ref, etree) eval_globals = reader.parse_eval_globals(etree) lineno = utils.etree.get_lineno(etree) # Create an ImplContainer to hold each rule as its own # RuleML implementation main_impl = plugin.ImplContainer(resource_ref, configuration) main_impl.lineno = lineno for rule in rules: relation_container = RulemlRelationContainer( configuration = configuration, source = "%s:%d" % (resource_ref, rule.lineno), rule_list = [rule], eval_globals = eval_globals) impl = RuleImpl(resource_ref, configuration, relation_container) impl.lineno = rule.lineno rule.implml = impl main_impl.append(impl) return main_impl