def test_build_from_config(self):
        # Test rebuilding a sequence including twice the same template sequence
        conf = {'template_id': 'test', 'name': 'Template',
                'template_vars': "{'b': '19'}"}
        seq = TemplateSequence.build_from_config(conf, self.dependecies)
        seq.context.channel_mapping = {'A': 'Ch1_L', 'B': 'Ch2_L',
                                       'Ch1': 'Ch2_A', 'Ch2': 'Ch1_A'}

        conf = {'template_id': 'test', 'name': 'Template',
                'template_vars': "{'b': '12'}"}
        seq2 = TemplateSequence.build_from_config(conf, self.dependecies)
        seq2.context.channel_mapping = {'A': 'Ch1_L', 'B': 'Ch2_L',
                                        'Ch1': 'Ch1_A', 'Ch2': 'Ch2_A'}

        root = RootSequence()
        context = TestContext(sampling=0.5)
        root.context = context
        root.items = [seq, seq2]
        pref = root.preferences_from_members()

        new = RootSequence.build_from_config(pref, self.dependecies)
        assert_equal(new.items[0].index, 1)

        seq = new.items[0]
        assert_equal(seq.name, 'Template')
        assert_equal(seq.template_id, 'test')
        assert_equal(seq.template_vars, dict(b='19'))
        assert_equal(seq.local_vars, dict(a='1.5'))
        assert_equal(len(seq.items), 4)
        assert_equal(seq.items[3].index, 5)
        assert_equal(seq.docs, 'Basic user comment\nff')

        context = seq.context
        assert_equal(context.template, seq)
        assert_equal(context.logical_channels, ['A', 'B'])
        assert_equal(context.analogical_channels, ['Ch1', 'Ch2'])
        assert_equal(context.channel_mapping, {'A': 'Ch1_L', 'B': 'Ch2_L',
                                               'Ch1': 'Ch2_A', 'Ch2': 'Ch1_A'})

        assert_equal(new.items[1].index, 2)

        seq = new.items[1]
        assert_equal(seq.name, 'Template')
        assert_equal(seq.template_id, 'test')
        assert_equal(seq.template_vars, dict(b='12'))
        assert_equal(seq.local_vars, dict(a='1.5'))
        assert_equal(len(seq.items), 4)
        assert_equal(seq.items[3].index, 5)
        assert_equal(seq.docs, 'Basic user comment\nff')

        context = seq.context
        assert_equal(context.template, seq)
        assert_equal(context.logical_channels, ['A', 'B'])
        assert_equal(context.analogical_channels, ['Ch1', 'Ch2'])
        assert_equal(context.channel_mapping, {'A': 'Ch1_L', 'B': 'Ch2_L',
                                               'Ch1': 'Ch1_A', 'Ch2': 'Ch2_A'})
    def setup(self):
        pref = create_template_sequence()
        conf = ConfigObj()
        conf.update(pref)
        dep = {'Sequence': Sequence, 'Pulse': Pulse,
               'TemplateSequence': TemplateSequence,
               'shapes': {'SquareShape': SquareShape},
               'contexts': {'TemplateContext': TemplateContext,
                            'TestContext': TestContext},
               'templates': {'test': ('', conf, 'Basic user comment\nff')}}
        self.dependecies = {'pulses': dep}

        self.root = RootSequence()
        self.context = TestContext(sampling=0.5)
        self.root.context = self.context

        conf = {'template_id': 'test', 'name': 'Template',
                'template_vars': "{'b': '19'}"}
        seq = TemplateSequence.build_from_config(conf, self.dependecies)
        seq.context.channel_mapping = {'A': 'Ch1_L', 'B': 'Ch2_L',
                                       'Ch1': 'Ch2_A', 'Ch2': 'Ch1_A'}
        seq.def_1 = '1.0'
        seq.def_2 = '20.0'

        self.template = seq

        self.root.items = [seq]
    def test_build_from_config1(self):
        # Test building a template sequence from only the template file.
        # No information is knwon about channel mapping of template_vars values
        conf = {'template_id': 'test', 'name': 'Template',
                'template_vars': "{'b': '19', 'c': ''}"}
        seq = TemplateSequence.build_from_config(conf, self.dependecies)

        assert_equal(seq.name, 'Template')
        assert_equal(seq.template_id, 'test')
        assert_equal(seq.template_vars, dict(b='19'))
        assert_equal(seq.local_vars, dict(a='1.5'))
        assert_equal(len(seq.items), 4)
        assert_equal(seq.items[3].index, 5)
        assert_equal(seq.docs, 'Basic user comment\nff')

        context = seq.context
        assert_equal(context.template, seq)
        assert_equal(context.logical_channels, ['A', 'B'])
        assert_equal(context.analogical_channels, ['Ch1', 'Ch2'])
        assert_equal(context.channel_mapping, {'A': '', 'B': '', 'Ch1': '',
                                               'Ch2': ''})