class TestPerfectDomainContextHandler(TestCase):
    def setUp(self):
        self.domain = Domain(
            attributes=[ContinuousVariable('c1'),
                        DiscreteVariable('d1', values='abc'),
                        DiscreteVariable('d2', values='def')],
            class_vars=[DiscreteVariable('d3', values='ghi')],
            metas=[ContinuousVariable('c2'),
                   DiscreteVariable('d4', values='jkl')]
        )
        self.args = (self.domain,
                     (('c1', Continuous), ('d1', Discrete), ('d2', Discrete)),
                     (('d3', Discrete),),
                     (('c2', Continuous), ('d4', Discrete)))
        self.args_match_all = (self.domain,
                               (('c1', Continuous), ('d1', list('abc')), ('d2', list('def'))),
                               (('d3', list('ghi')),),
                               (('c2', Continuous), ('d4', list('jkl'))))
        self.handler = PerfectDomainContextHandler()
        self.handler.read_defaults = lambda: None
        self.handler.bind(SimpleWidget)
        self.widget = SimpleWidget()
        self.handler.initialize(self.widget)

    def test_new_context(self):
        context = self.handler.new_context(*self.args)
        _, attrs, class_vars, metas = self.args

        self.assertEqual(context.attributes, attrs)
        self.assertEqual(context.class_vars, class_vars)
        self.assertEqual(context.metas, metas)

    def test_open_context(self):
        context = Context()
        context.attributes = ()
        context.class_vars = ()
        self.handler.new_context = Mock(return_value=context)
        self.handler.open_context(self.widget, self.domain)
        self.handler.new_context.assert_called_with(*self.args)

    def test_encode_domain_simple(self):
        attrs, class_vars, metas = self.handler.encode_domain(self.domain)

        self.assertEqual(attrs, (('c1', Continuous), ('d1', Discrete), ('d2', Discrete)))
        self.assertEqual(class_vars, (('d3', Discrete),))
        self.assertEqual(metas, (('c2', Continuous), ('d4', Discrete)))

    def test_encode_domain_match_values(self):
        self.handler.match_values = self.handler.MATCH_VALUES_ALL
        attrs, class_vars, metas = self.handler.encode_domain(self.domain)

        self.assertEqual(attrs, (('c1', Continuous), ('d1', list('abc')), ('d2', list('def'))))
        self.assertEqual(class_vars, (('d3', list('ghi')),))
        self.assertEqual(metas, (('c2', Continuous), ('d4', list('jkl'))))

    def test_match_simple(self):
        domain, attrs, class_vars, metas = self.args
        context = self._create_context(attrs, class_vars, metas)

        self.assertEqual(self.handler.match(context, *self.args),
                         self.handler.PERFECT_MATCH)

        attrs2 = list(attrs)
        attrs2[:2] = attrs[1::-1]
        self.assertEqual(self.handler.match(context,
                                            domain, attrs2, class_vars, metas),
                         self.handler.NO_MATCH)

        attrs3 = list(attrs)
        attrs3.append(attrs[0])
        self.assertEqual(self.handler.match(context,
                                            domain, attrs3, class_vars, metas),
                         self.handler.NO_MATCH)

        metas2 = list(metas)
        metas2.append(attrs[0])
        self.assertEqual(self.handler.match(context,
                                            domain, attrs, class_vars, metas2),
                         self.handler.NO_MATCH)

    def test_match_values(self):
        domain, attrs, class_vars, metas = self.args_match_all
        context = self._create_context(attrs, class_vars, metas)

        self.handler.match_values = self.handler.MATCH_VALUES_ALL
        self.assertEqual(self.handler.match(context, *self.args_match_all),
                         self.handler.PERFECT_MATCH)

        attrs2 = list(attrs)
        attrs2[:2] = attrs[1::-1]
        self.assertEqual(self.handler.match(context,
                                            domain, attrs2, class_vars, metas),
                         self.handler.NO_MATCH)

        attrs3 = list(attrs)
        attrs3.append(attrs[0])
        self.assertEqual(self.handler.match(context,
                                            domain, attrs2, class_vars, metas),
                         self.handler.NO_MATCH)

    def test_encode_setting(self):
        _, attrs, class_vars, metas = self.args
        context = self._create_context(attrs, class_vars, metas)
        encoded_setting = self.handler.encode_setting(
            context, SimpleWidget.setting, "d1")
        self.assertEqual(encoded_setting, ("d1", -2))

        encoded_setting = self.handler.encode_setting(
            context, SimpleWidget.text, "d1")
        self.assertEqual(encoded_setting, ("d1", -1))

        encoded_setting = self.handler.encode_setting(
            context, SimpleWidget.with_metas, "d4")
        self.assertEqual(encoded_setting, ("d4", 1))

    def _create_context(self, attrs, class_vars, metas):
        context = Context()
        context.attributes = attrs
        context.class_vars = class_vars
        context.metas = metas
        return context
Beispiel #2
0
class TestPerfectDomainContextHandler(TestCase):
    def setUp(self):
        self.domain = Domain(attributes=[
            ContinuousVariable('c1'),
            DiscreteVariable('d1', values='abc'),
            DiscreteVariable('d2', values='def')
        ],
                             class_vars=[DiscreteVariable('d3', values='ghi')],
                             metas=[
                                 ContinuousVariable('c2'),
                                 DiscreteVariable('d4', values='jkl')
                             ])
        self.args = (self.domain, (('c1', Continuous), ('d1', Discrete),
                                   ('d2', Discrete)), (('d3', Discrete), ),
                     (('c2', Continuous), ('d4', Discrete)))
        self.args_match_all = (self.domain,
                               (('c1', Continuous), ('d1', list('abc')),
                                ('d2', list('def'))), (('d3', list('ghi')), ),
                               (('c2', Continuous), ('d4', list('jkl'))))
        self.handler = PerfectDomainContextHandler()
        self.handler.read_defaults = lambda: None
        self.handler.bind(SimpleWidget)
        self.widget = SimpleWidget()
        self.handler.initialize(self.widget)

    def test_new_context(self):
        context = self.handler.new_context(*self.args)
        _, attrs, class_vars, metas = self.args

        self.assertEqual(context.attributes, attrs)
        self.assertEqual(context.class_vars, class_vars)
        self.assertEqual(context.metas, metas)

    def test_open_context(self):
        context = Context()
        context.attributes = ()
        context.class_vars = ()
        self.handler.new_context = Mock(return_value=context)
        self.handler.open_context(self.widget, self.domain)
        self.handler.new_context.assert_called_with(*self.args)

    def test_encode_domain_simple(self):
        attrs, class_vars, metas = self.handler.encode_domain(self.domain)

        self.assertEqual(attrs, (('c1', Continuous), ('d1', Discrete),
                                 ('d2', Discrete)))
        self.assertEqual(class_vars, (('d3', Discrete), ))
        self.assertEqual(metas, (('c2', Continuous), ('d4', Discrete)))

    def test_encode_domain_match_values(self):
        self.handler.match_values = self.handler.MATCH_VALUES_ALL
        attrs, class_vars, metas = self.handler.encode_domain(self.domain)

        self.assertEqual(attrs, (('c1', Continuous), ('d1', list('abc')),
                                 ('d2', list('def'))))
        self.assertEqual(class_vars, (('d3', list('ghi')), ))
        self.assertEqual(metas, (('c2', Continuous), ('d4', list('jkl'))))

    def test_match_simple(self):
        domain, attrs, class_vars, metas = self.args
        context = self._create_context(attrs, class_vars, metas)

        self.assertEqual(self.handler.match(context, *self.args),
                         self.handler.PERFECT_MATCH)

        attrs2 = list(attrs)
        attrs2[:2] = attrs[1::-1]
        self.assertEqual(
            self.handler.match(context, domain, attrs2, class_vars, metas),
            self.handler.NO_MATCH)

        attrs3 = list(attrs)
        attrs3.append(attrs[0])
        self.assertEqual(
            self.handler.match(context, domain, attrs3, class_vars, metas),
            self.handler.NO_MATCH)

        metas2 = list(metas)
        metas2.append(attrs[0])
        self.assertEqual(
            self.handler.match(context, domain, attrs, class_vars, metas2),
            self.handler.NO_MATCH)

    def test_match_values(self):
        domain, attrs, class_vars, metas = self.args_match_all
        context = self._create_context(attrs, class_vars, metas)

        self.handler.match_values = self.handler.MATCH_VALUES_ALL
        self.assertEqual(self.handler.match(context, *self.args_match_all),
                         self.handler.PERFECT_MATCH)

        attrs2 = list(attrs)
        attrs2[:2] = attrs[1::-1]
        self.assertEqual(
            self.handler.match(context, domain, attrs2, class_vars, metas),
            self.handler.NO_MATCH)

        attrs3 = list(attrs)
        attrs3.append(attrs[0])
        self.assertEqual(
            self.handler.match(context, domain, attrs2, class_vars, metas),
            self.handler.NO_MATCH)

    def test_encode_setting(self):
        _, attrs, class_vars, metas = self.args
        context = self._create_context(attrs, class_vars, metas)
        encoded_setting = self.handler.encode_setting(context,
                                                      SimpleWidget.setting,
                                                      "d1")
        self.assertEqual(encoded_setting, ("d1", -2))

        encoded_setting = self.handler.encode_setting(context,
                                                      SimpleWidget.text, "d1")
        self.assertEqual(encoded_setting, ("d1", -1))

        encoded_setting = self.handler.encode_setting(context,
                                                      SimpleWidget.with_metas,
                                                      "d4")
        self.assertEqual(encoded_setting, ("d4", 1))

    def _create_context(self, attrs, class_vars, metas):
        context = Context()
        context.attributes = attrs
        context.class_vars = class_vars
        context.metas = metas
        return context