class TestClassValuesContextHandler(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.handler = ClassValuesContextHandler()
        self.handler.read_defaults = lambda: None

    def test_open_context(self):
        self.handler.bind(SimpleWidget)
        context = Mock(classes=['g', 'h', 'i'],
                       values=dict(text='u',
                                   with_metas=[('d1', Discrete),
                                               ('d2', Discrete)]))
        self.handler.global_contexts = \
            [Mock(values={}), context, Mock(values={})]

        widget = SimpleWidget()
        self.handler.initialize(widget)
        self.handler.open_context(widget, self.args[0].class_var)
        self.assertEqual(widget.text, 'u')
        self.assertEqual(widget.with_metas, [('d1', Discrete),
                                             ('d2', Discrete)])

    def test_open_context_with_no_match(self):
        self.handler.bind(SimpleWidget)
        context = Mock(classes=['g', 'h', 'i'],
                       values=dict(text='u',
                                   with_metas=[('d1', Discrete),
                                               ('d2', Discrete)]))
        self.handler.global_contexts = \
            [Mock(values={}), context, Mock(values={})]
        widget = SimpleWidget()
        self.handler.initialize(widget)
        widget.text = 'u'

        self.handler.open_context(widget, self.args[0][1])

        context = widget.current_context
        self.assertEqual(context.classes, ['a', 'b', 'c'])
        self.assertEqual(widget.text, 'u')
        self.assertEqual(widget.with_metas, [])
class TestClassValuesContextHandler(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.handler = ClassValuesContextHandler()
        self.handler.read_defaults = lambda: None

    def test_open_context(self):
        self.handler.bind(SimpleWidget)
        context = Mock(
            classes=['g', 'h', 'i'], values=dict(
                text='u',
                with_metas=[('d1', Discrete), ('d2', Discrete)]
            ))
        self.handler.global_contexts = \
            [Mock(values={}), context, Mock(values={})]

        widget = SimpleWidget()
        self.handler.initialize(widget)
        self.handler.open_context(widget, self.args[0].class_var)
        self.assertEqual(widget.text, 'u')
        self.assertEqual(widget.with_metas, [('d1', Discrete),
                                             ('d2', Discrete)])

    def test_open_context_with_no_match(self):
        self.handler.bind(SimpleWidget)
        context = Mock(
            classes=['g', 'h', 'i'], values=dict(
                text='u',
                with_metas=[('d1', Discrete), ('d2', Discrete)]
            ))
        self.handler.global_contexts = \
            [Mock(values={}), context, Mock(values={})]
        widget = SimpleWidget()
        self.handler.initialize(widget)
        widget.text = 'u'

        self.handler.open_context(widget, self.args[0][1])

        context = widget.current_context
        self.assertEqual(context.classes, ['a', 'b', 'c'])
        self.assertEqual(widget.text, 'u')
        self.assertEqual(widget.with_metas, [])
class TestClassValuesContextHandler(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.handler = ClassValuesContextHandler()
        self.handler.read_defaults = lambda: None

    def test_open_context(self):
        self.handler.bind(SimpleWidget)
        context = Mock(
            classes=["g", "h", "i"],
            values=dict(text="u",
                        with_metas=[("d1", Discrete), ("d2", Discrete)]),
        )
        self.handler.global_contexts = [
            Mock(values={}), context,
            Mock(values={})
        ]

        widget = SimpleWidget()
        self.handler.initialize(widget)
        self.handler.open_context(widget, self.args[0].class_var)
        self.assertEqual(widget.text, "u")
        self.assertEqual(widget.with_metas, [("d1", Discrete),
                                             ("d2", Discrete)])

    def test_open_context_with_no_match(self):
        self.handler.bind(SimpleWidget)
        context = Mock(
            classes=["g", "h", "i"],
            values=dict(text="u",
                        with_metas=[("d1", Discrete), ("d2", Discrete)]),
        )
        self.handler.global_contexts = [
            Mock(values={}), context,
            Mock(values={})
        ]
        widget = SimpleWidget()
        self.handler.initialize(widget)
        widget.text = "u"

        self.handler.open_context(widget, self.args[0][1])

        context = widget.current_context
        self.assertEqual(context.classes, ["a", "b", "c"])
        self.assertEqual(widget.text, "u")
        self.assertEqual(widget.with_metas, [])