configurationengine/source/cone/public/tests/unittest_plugin_implcontainer.py
changeset 3 e7e0ae78773e
parent 0 2e8eeb919028
equal deleted inserted replaced
2:87cfa131b535 3:e7e0ae78773e
    15 #
    15 #
    16 
    16 
    17 import unittest
    17 import unittest
    18 import os
    18 import os
    19 import logging
    19 import logging
    20 import __init__
    20 
    21 from cone.public import *
    21 from cone.public import api, plugin, rules
    22 ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
    22 ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
    23 
    23 
    24 
    24 
    25 
    25 
    26 class TestPluginImplContainer(unittest.TestCase):
    26 class TestPluginImplContainer(unittest.TestCase):
    27     class ImplTest(plugin.ImplBase):
    27     class ImplTest(plugin.ImplBase):
    28         def __init__(self,ref,configuration):
    28         def __init__(self,ref,configuration):
    29             plugin.ImplBase.__init__(self,ref,configuration)
    29             plugin.ImplBase.__init__(self,ref,configuration)
    30             self.generate_invoked = False
    30             self.generate_invoked = False
       
    31             self.output_created = False
    31             self.refs = ["dummy1.too"]
    32             self.refs = ["dummy1.too"]
    32             self.output_files = []
    33             self.output_files = ['foo/test.txt']
       
    34             self.context = None
    33         def generate(self, context=None):
    35         def generate(self, context=None):
    34             self.generate_invoked = True
    36             self.generate_invoked = True
    35             if context and hasattr(context, 'objects'):
    37             if context:
    36                 context.objects.append(self)
    38                 for outfile in self.list_output_files():
    37 
    39                     context.add_file(outfile, implementation=self)
       
    40             
    38         def get_refs(self):
    41         def get_refs(self):
    39             return self.refs
    42             return self.refs
    40 
    43 
    41         def list_output_files(self):
    44         def list_output_files(self):
    42             return self.output_files
    45             return self.output_files
    43 
    46 
       
    47         def get_outputs(self):
       
    48             """
       
    49             Return a list of GenerationOutput objets as a list. 
       
    50             """
       
    51             outputs = []
       
    52             phase = None 
       
    53             if self.context: phase = self.context.phase
       
    54             for outfile in self.list_output_files():
       
    55                 outputs.append( plugin.GenerationOutput(outfile,self,type='file', phase=phase) )
       
    56             return outputs
       
    57     
    44     def test_impl_container_add(self):
    58     def test_impl_container_add(self):
    45         container = plugin.ImplContainer("norm", None)
    59         container = plugin.ImplContainer("norm", None)
    46         imp1  = plugin.ImplBase("implml/test.content",None)
    60         imp1  = plugin.ImplBase("implml/test.content",None)
    47         imp2a = plugin.ImplBase("implml/copy:21.content",None)
    61         imp2a = plugin.ImplBase("implml/copy:21.content",None)
    48         imp2b = plugin.ImplBase("implml/copy:24.content",None)
    62         imp2b = plugin.ImplBase("implml/copy:24.content",None)
    60         imp2b = plugin.ImplBase("implml/sub.implml:24.content",None)
    74         imp2b = plugin.ImplBase("implml/sub.implml:24.content",None)
    61         subcontainer.append(imp2a)
    75         subcontainer.append(imp2a)
    62         subcontainer.append(imp2b)
    76         subcontainer.append(imp2b)
    63         container.append(subcontainer)
    77         container.append(subcontainer)
    64         self.assertEquals(container.get_all_implementations(),[imp1,imp2a,imp2b])
    78         self.assertEquals(container.get_all_implementations(),[imp1,imp2a,imp2b])
    65         for sub in container:
       
    66             print sub
       
    67         self.assertEquals(container.impls, [imp1,subcontainer])
    79         self.assertEquals(container.impls, [imp1,subcontainer])
    68         container[0] = subcontainer
    80         container[0] = subcontainer
    69         self.assertEquals(container.impls, [subcontainer,subcontainer])
    81         self.assertEquals(container.impls, [subcontainer,subcontainer])
    70         del container[0]
    82         del container[0]
    71         self.assertEquals(container.impls, [subcontainer])
    83         self.assertEquals(container.impls, [subcontainer])
    72 
    84 
    73     def test_impl_container_with_condition(self):
    85     def test_impl_container_with_condition(self):
       
    86         logger = logging.getLogger('cone')
       
    87         ch = logging.StreamHandler()
       
    88         ch.setLevel(logging.DEBUG)
       
    89         logger.addHandler(ch)
    74         context = plugin.GenerationContext()
    90         context = plugin.GenerationContext()
    75         context.configuration = api.Configuration()
    91         context.configuration = api.Configuration()
    76         context.configuration.add_feature(api.Feature("test"))
    92         context.configuration.add_feature(api.Feature("test"))
    77         context.configuration.add_feature(api.Feature("stringsub"),"test")
    93         context.configuration.add_feature(api.Feature("stringsub"),"test")
    78         context.configuration.add_feature(api.Feature("intsub"),"test")
    94         context.configuration.add_feature(api.Feature("intsub"),"test")
    93         self.assertFalse(imp1.generate_invoked)
   109         self.assertFalse(imp1.generate_invoked)
    94 
   110 
    95         imp1.generate_invoked = False
   111         imp1.generate_invoked = False
    96         condition = rules.SimpleCondition("${test}", "false")
   112         condition = rules.SimpleCondition("${test}", "false")
    97         container.condition = condition
   113         container.condition = condition
    98         container.append(imp1)
       
    99         container.generate(context)
   114         container.generate(context)
   100         self.assertTrue(imp1.generate_invoked)
   115         self.assertTrue(imp1.generate_invoked)
   101         imp1.generate_invoked = False
   116         imp1.generate_invoked = False
   102         context.configuration.get_default_view().test.value = True
   117         context.configuration.get_default_view().test.value = True
   103         container.generate(context)
   118         container.generate(context)
   104         self.assertFalse(imp1.generate_invoked)
   119         self.assertFalse(imp1.generate_invoked)
   105 
   120 
       
   121         imp1.generate_invoked = False
       
   122         condition = rules.SimpleCondition("${test.intsub}", "1")
       
   123         container.condition = condition
       
   124         container.append(imp1)
       
   125         container.generate(context)
       
   126         self.assertFalse(imp1.generate_invoked)
       
   127         context.configuration.get_default_view().test.intsub.value = 1
       
   128         container.generate(context)
       
   129         self.assertTrue(imp1.generate_invoked)
       
   130         
   106         
   131         
   107     def test_impl_container_generate(self):
   132     def test_impl_container_generate(self):
   108         container = plugin.ImplContainer("norm", None)
   133         container = plugin.ImplContainer("norm", None)
   109         imp1  = TestPluginImplContainer.ImplTest("implml/test.content",None)
   134         imp1  = TestPluginImplContainer.ImplTest("implml/test.content",None)
   110         imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content",None)
   135         imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content",None)
   125         subcontainer = plugin.ImplContainer("sub", None)
   150         subcontainer = plugin.ImplContainer("sub", None)
   126         container.append(imp1)
   151         container.append(imp1)
   127         container.append(imp2a)
   152         container.append(imp2a)
   128         container.append(imp2b)
   153         container.append(imp2b)
   129         container.append(subcontainer)
   154         container.append(subcontainer)
   130         self.assertEquals(container.get_tags(), {})
   155         self.assertEquals(container.get_tags(), None)
       
   156         self.assertEquals(container.get_child_tags(), {})
   131         container.set_tags({'test':['foobar']})
   157         container.set_tags({'test':['foobar']})
   132         self.assertEquals(container.get_tags(), {'test':['foobar']})
   158         self.assertEquals(container.get_tags(), None)
       
   159         self.assertEquals(container.get_child_tags(), {})
   133         imp1.set_tags({'foo':['bar']})
   160         imp1.set_tags({'foo':['bar']})
   134         self.assertEquals(container.get_tags(), {'test':['foobar'],
   161         self.assertEquals(container.get_child_tags(), {'foo':['bar']})
   135                                                  'foo':['bar']})
   162         self.assertEquals(container.get_tags(), None)
   136         imp2a.set_tags({'test':['bar'], 'one' :['more']})
   163         imp2a.set_tags({'test':['bar'], 'foo' :['more']})
   137         
   164         self.assertEquals(container.get_child_tags(), {'foo':['bar', 'more'], 'test': ['bar']})
   138         self.assertEquals(container.get_tags(), {'test':['foobar', 'bar'],
   165         
   139                                                  'foo':['bar'],
   166         self.assertEquals(container.get_tags(), None)
   140                                                  'one' :['more']})
       
   141         subcontainer.set_tags({'test':['bar1']})
   167         subcontainer.set_tags({'test':['bar1']})
   142         self.assertEquals(container.get_tags(), {'test':['foobar', 'bar', 'bar1'],
   168         self.assertEquals(container.get_tags(), None)
   143                                                  'foo':['bar'],
       
   144                                                  'one' :['more']})
       
   145 
   169 
   146     def test_impl_container_get_phase(self):
   170     def test_impl_container_get_phase(self):
   147         container = plugin.ImplContainer("norm", None)
   171         container = plugin.ImplContainer("norm", None)
   148         imp1  = TestPluginImplContainer.ImplTest("implml/test.content",None)
   172         imp1  = TestPluginImplContainer.ImplTest("implml/test.content",None)
   149         imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content",None)
   173         imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content",None)
   152         container.append(subcontainer1)
   176         container.append(subcontainer1)
   153         subcontainer1.append(imp1)
   177         subcontainer1.append(imp1)
   154         subcontainer1.append(imp2a)
   178         subcontainer1.append(imp2a)
   155         subcontainer1.append(imp2b)
   179         subcontainer1.append(imp2b)
   156         subcontainer1.set_invocation_phase("normal")
   180         subcontainer1.set_invocation_phase("normal")
   157         self.assertEquals(container.invocation_phase(), ["normal"])
   181         self.assertEquals(container.invocation_phase(), "normal")
   158         imp1.set_invocation_phase('pre')
   182         imp1.set_invocation_phase('pre')
   159         self.assertEquals(container.invocation_phase(), ["normal"])
   183         self.assertEquals(container.invocation_phase(), "normal")
   160         subcontainer2 = plugin.ImplContainer("norm", None)
   184         subcontainer2 = plugin.ImplContainer("norm", None)
   161         subimp = TestPluginImplContainer.ImplTest("implml/copy:24.content",None)
   185         subimp = TestPluginImplContainer.ImplTest("implml/copy:24.content",None)
   162         subimp.set_invocation_phase('post')
   186         subimp.set_invocation_phase('post')
   163         subcontainer2.append(subimp)
   187         subcontainer2.append(subimp)
   164         subcontainer2.set_invocation_phase('post')
   188         subcontainer2.set_invocation_phase('post')
   165         container.append(subcontainer2)
   189         container.append(subcontainer2)
   166         self.assertEquals(container.invocation_phase(), ['post','normal'])
   190         self.assertEquals(container.invocation_phase(), 'normal')
   167         
   191         
   168     def test_impl_container_get_refs(self):
   192     def test_impl_container_get_refs(self):
   169         container = plugin.ImplContainer("norm", None)
   193         container = plugin.ImplContainer("norm", None)
   170         imp1  = TestPluginImplContainer.ImplTest("implml/test.content",None)
   194         imp1  = TestPluginImplContainer.ImplTest("implml/test.content",None)
   171         imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content",None)
   195         imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content",None)
   172         imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content",None)
   196         imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content",None)
   173         container.append(imp1)
   197         container.append(imp1)
   174         container.append(imp2a)
   198         container.append(imp2a)
   175         container.append(imp2b)
   199         container.append(imp2b)
   176         self.assertEquals(container.get_refs(), ["dummy1.too"])
   200         self.assertEquals(container.get_refs(), None)
       
   201         self.assertEquals(container.get_child_refs(), ['dummy1.too'])
   177         imp2b.refs = ['dummy2.foo']
   202         imp2b.refs = ['dummy2.foo']
   178         self.assertEquals(container.get_refs(), ["dummy1.too",
   203         self.assertEquals(container.get_refs(), None)
   179                                                  "dummy2.foo",])
   204         self.assertEquals(container.get_child_refs(), ['dummy1.too', 'dummy2.foo'])
       
   205         imp2b.refs = None
       
   206         self.assertEquals(container.get_refs(), None)
       
   207         self.assertEquals(container.get_child_refs(), ['dummy1.too'])
   180         
   208         
   181     def test_impl_container_list_output_files(self):
   209     def test_impl_container_list_output_files(self):
   182         container = plugin.ImplContainer("norm", None)
   210         container = plugin.ImplContainer("norm", None)
   183         subcontainer = plugin.ImplContainer("norm", None)
   211         subcontainer = plugin.ImplContainer("norm", None)
   184         imp1  = TestPluginImplContainer.ImplTest("implml/test.content",None)
   212         imp1  = TestPluginImplContainer.ImplTest("implml/test.content",None)
   186         imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content",None)
   214         imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content",None)
   187         container.append(subcontainer)
   215         container.append(subcontainer)
   188         subcontainer.append(imp1)
   216         subcontainer.append(imp1)
   189         subcontainer.append(imp2a)
   217         subcontainer.append(imp2a)
   190         subcontainer.append(imp2b)
   218         subcontainer.append(imp2b)
   191         self.assertEquals(container.list_output_files(), [])
   219         self.assertEquals(container.list_output_files(), ['foo/test.txt'])
   192         imp2b.output_files= ['output/dummy2.txt']
   220         imp2b.output_files= ['output/dummy2.txt']
   193         self.assertEquals(container.list_output_files(), ['output/dummy2.txt'])
   221         self.assertEquals(container.list_output_files(), ['foo/test.txt', 'output/dummy2.txt'])
   194         imp1.output_files= ['output/foobar/hee.txt']
   222         imp1.output_files= ['output/foobar/hee.txt']
   195         self.assertEquals(container.list_output_files(), ['output/foobar/hee.txt',
   223         self.assertEquals(container.list_output_files(), ['output/foobar/hee.txt',
       
   224                                                           'foo/test.txt', 
   196                                                           'output/dummy2.txt'])
   225                                                           'output/dummy2.txt'])
   197 
   226 
       
   227     def test_impl_container_get_outputs(self):
       
   228         container = plugin.ImplContainer("norm", None)
       
   229         subcontainer = plugin.ImplContainer("norm", None)
       
   230         imp1  = TestPluginImplContainer.ImplTest("implml/test.content",None)
       
   231         imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content",None)
       
   232         imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content",None)
       
   233         container.append(subcontainer)
       
   234         subcontainer.append(imp1)
       
   235         subcontainer.append(imp2a)
       
   236         subcontainer.append(imp2b)
       
   237         self.assertEquals(len(container.get_outputs()), 3)
       
   238         self.assertEquals(container.get_outputs()[0].name, 'foo/test.txt')
       
   239         self.assertEquals(container.get_outputs()[1].name, 'foo/test.txt')
       
   240         self.assertEquals(container.get_outputs()[2].name, 'foo/test.txt')
       
   241         imp2b.output_files= ['foobar.txt','output/dummy2.txt']
       
   242         self.assertEquals(len(container.get_outputs()),4)
       
   243         self.assertEquals(container.get_outputs()[0].name, 'foo/test.txt')
       
   244         self.assertEquals(container.get_outputs()[1].name, 'foo/test.txt')
       
   245         self.assertEquals(container.get_outputs()[2].name, 'foobar.txt')
       
   246 
       
   247 
   198     def test_impl_container_set_output_root(self):
   248     def test_impl_container_set_output_root(self):
   199         container = plugin.ImplContainer("norm", None)
   249         container = plugin.ImplContainer("norm", None)
   200         subcontainer = plugin.ImplContainer("norm", None)
   250         subcontainer = plugin.ImplContainer("norm", None)
   201         imp1  = TestPluginImplContainer.ImplTest("implml/test.content",None)
   251         imp1  = TestPluginImplContainer.ImplTest("implml/test.content",None)
   202         imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content",None)
   252         imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content",None)
   203         imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content",None)
   253         imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content",None)
   204         container.append(subcontainer)
   254         container.append(subcontainer)
   205         subcontainer.append(imp1)
   255         subcontainer.append(imp1)
   206         subcontainer.append(imp2a)
   256         subcontainer.append(imp2a)
   207         subcontainer.append(imp2b)
   257         subcontainer.append(imp2b)
   208         self.assertEquals(imp1.get_output_root(), 'output')
   258         self.assertEquals(imp1.get_output_root(), '')
   209         container.set_output_root('foobar/test')
   259         container.set_output_root('foobar/test')
   210         self.assertEquals(imp1.get_output_root(), 'foobar/test')
   260         self.assertEquals(imp1.get_output_root(), 'foobar/test')
   211 
   261 
   212     def test_impl_container_sub_container_generate(self):
   262     def test_impl_container_sub_container_generate(self):
   213         container = plugin.ImplContainer("norm", None)
   263         container = plugin.ImplContainer("norm", None)
   236         subcontainer.append(imp2a)
   286         subcontainer.append(imp2a)
   237         subcontainer.append(imp2b)
   287         subcontainer.append(imp2b)
   238         container.append(subcontainer)
   288         container.append(subcontainer)
   239         self.assertEquals(container.impls, [imp1,subcontainer])
   289         self.assertEquals(container.impls, [imp1,subcontainer])
   240         context = plugin.GenerationContext()
   290         context = plugin.GenerationContext()
   241         context.objects = []
   291         container.generate(context)
   242         container.generate(context)
   292         self.assertTrue(imp1.generate_invoked)
   243         self.assertTrue(imp1.generate_invoked)
   293         self.assertTrue(imp2a.generate_invoked)
   244         self.assertTrue(imp2a.generate_invoked)
   294         self.assertTrue(imp2a.generate_invoked)
   245         self.assertTrue(imp2a.generate_invoked)
   295         self.assertEquals(sorted(context.executed_impls), sorted([imp1,imp2a,imp2b]))
   246         self.assertEquals(len(context.objects), 3)
       
   247         self.assertEquals(context.objects, [imp1,imp2a,imp2b])
       
   248 
   296 
   249     def test_impl_container_generate_with_generation_contexts_tags(self):
   297     def test_impl_container_generate_with_generation_contexts_tags(self):
   250         container = plugin.ImplContainer("norm", None)
   298         container = plugin.ImplContainer("norm", None)
   251         imp1  = TestPluginImplContainer.ImplTest("implml/test.content",None)
   299         imp1  = TestPluginImplContainer.ImplTest("implml/test.content",None)
   252         subcontainer1 = plugin.ImplContainer("implml/sub1.implml", None)
   300         subcontainer1 = plugin.ImplContainer("implml/sub1.implml", None)
   253         subcontainer1.append(imp1)
   301         subcontainer1.append(imp1)
   254         
   302         
   255         subcontainer2 = plugin.ImplContainer("implml/sub2.implml", None)
   303         subcontainer2 = plugin.ImplContainer("implml/sub2.implml", None)
   256         subcontainer2.set_tags({'target': ['rofs3','uda']})
   304         imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content",None)
   257         imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content",None)
   305         imp2a.set_tags({'target': ['rofs3','uda']})
   258         imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content",None)
   306         imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content",None)
       
   307         imp2b.set_tags({'target': ['rofs3','uda']})
   259         subcontainer2.append(imp2a)
   308         subcontainer2.append(imp2a)
   260         subcontainer2.append(imp2b)
   309         subcontainer2.append(imp2b)
   261         container.append(subcontainer1)
   310         container.append(subcontainer1)
   262         container.append(subcontainer2)
   311         container.append(subcontainer2)
   263         
   312         
   264         context = plugin.GenerationContext()
   313         context = plugin.GenerationContext()
   265         context.tags = {'target': ['rofs3'], 'foobar' :['test']}
   314         context.tags = {'target': ['rofs3'], 'foobar' :['test']}
   266         context.objects = []
   315         container.generate(context)
   267         container.generate(context)
   316         self.assertFalse(imp1.generate_invoked)
   268         self.assertFalse(imp1.generate_invoked)
   317         self.assertTrue(imp2a.generate_invoked)
   269         self.assertTrue(imp2a.generate_invoked)
   318         self.assertTrue(imp2a.generate_invoked)
   270         self.assertTrue(imp2a.generate_invoked)
   319         self.assertEquals(sorted(context.executed_impls), sorted([imp2a,imp2b]))
   271         self.assertEquals(len(context.objects), 2)
       
   272         self.assertEquals(context.objects, [imp2a,imp2b])
       
   273 
   320 
   274     def test_impl_container_generate_with_generation_phase(self):
   321     def test_impl_container_generate_with_generation_phase(self):
   275         container = plugin.ImplContainer("norm", None)
   322         container = plugin.ImplContainer("norm", None)
   276         imp1  = TestPluginImplContainer.ImplTest("implml/test.content",None)
   323         imp1  = TestPluginImplContainer.ImplTest("implml/test.content",None)
   277         subcontainer1 = plugin.ImplContainer("implml/sub1.implml", None)
   324         subcontainer1 = plugin.ImplContainer("implml/sub1.implml", None)
   278         subcontainer1.append(imp1)
   325         subcontainer1.append(imp1)
   279         
   326         
   280         subcontainer2 = plugin.ImplContainer("implml/sub2.implml", None)
   327         subcontainer2 = plugin.ImplContainer("implml/sub2.implml", None)
   281         subcontainer2.set_invocation_phase("post")
   328         imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content",None)
   282         imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content",None)
   329         imp2a.set_invocation_phase("post")
   283         imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content",None)
   330         imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content",None)
       
   331         imp2b.set_invocation_phase("post")
   284         subcontainer2.append(imp2a)
   332         subcontainer2.append(imp2a)
   285         subcontainer2.append(imp2b)
   333         subcontainer2.append(imp2b)
   286         container.append(subcontainer1)
   334         container.append(subcontainer1)
   287         container.append(subcontainer2)
   335         container.append(subcontainer2)
   288         
   336         
       
   337         context = plugin.GenerationContext(output='')
       
   338         context.phase = "post"
       
   339         container.generate(context)
       
   340         self.assertFalse(imp1.generate_invoked)
       
   341         self.assertTrue(imp2a.generate_invoked)
       
   342         self.assertTrue(imp2a.generate_invoked)
       
   343         self.assertEquals(sorted(context.executed_impls), sorted([imp2a,imp2b]))
       
   344         self.assertEquals(context.executed_impls[0].list_output_files(), ['foo/test.txt'])
       
   345         self.assertEquals(len(context.generation_output), 2)
       
   346         self.assertEquals(context.generation_output[0].name, 'foo/test.txt')
       
   347         self.assertEquals(str(context.generation_output[0]), "GenerationOutput(foo/test.txt, ImplTest(ref='implml/copy:21.content', type=None, lineno=None))")
       
   348         self.assertEquals(str(context.generation_output[1]), "GenerationOutput(foo/test.txt, ImplTest(ref='implml/copy:24.content', type=None, lineno=None))")
       
   349         self.assertEquals(context.generation_output[0].implementation, imp2a)
       
   350         
       
   351     def test_impl_container_generate_dry_run(self):
       
   352         container = plugin.ImplContainer("norm", None)
       
   353         imp1  = TestPluginImplContainer.ImplTest("implml/test.content",None)
       
   354         container.append(imp1)
       
   355         subcontainer = plugin.ImplContainer("implml/sub.implml", None)
       
   356         imp2a = TestPluginImplContainer.ImplTest("implml/copy:21.content",None)
       
   357         imp2b = TestPluginImplContainer.ImplTest("implml/copy:24.content",None)
       
   358         subcontainer.append(imp2a)
       
   359         subcontainer.append(imp2b)
       
   360         container.append(subcontainer)
       
   361         self.assertEquals(container.impls, [imp1,subcontainer])
   289         context = plugin.GenerationContext()
   362         context = plugin.GenerationContext()
   290         context.phase = "post"
   363         context.dry_run= True
   291         context.objects = []
   364         container.generate(context)
   292         container.generate(context)
   365         self.assertFalse(imp1.generate_invoked)
   293         self.assertFalse(imp1.generate_invoked)
   366         self.assertFalse(imp2a.generate_invoked)
   294         self.assertTrue(imp2a.generate_invoked)
   367         self.assertFalse(imp2a.generate_invoked)
   295         self.assertTrue(imp2a.generate_invoked)
   368         self.assertEquals(sorted(context.executed_impls), sorted([imp1, imp2a,imp2b]))
   296         self.assertEquals(len(context.objects), 2)
   369         self.assertEquals(context.executed_impls[0].list_output_files(), ['foo/test.txt'])
   297         self.assertEquals(context.objects, [imp2a,imp2b])
   370         self.assertEquals(len(context.generation_output), 0)
   298         
   371