def setUp(self):
        self.process = MagicMock()
        self.child = MagicMock()

        def getitem(name):
            return name

        self.child.__getitem__.side_effect = getitem

        self.params = MagicMock()
        self.process.get_block.return_value = self.child
        self.o = PositionLabellerPart(self.process, self.params)
    def setUp(self):
        self.process = MagicMock()
        self.child = MagicMock()

        def getitem(name):
            return name

        self.child.__getitem__.side_effect = getitem

        self.params = MagicMock()
        self.process.get_block.return_value = self.child
        self.o = PositionLabellerPart(self.process, self.params)
class TestPositionLabellerPart(unittest.TestCase):
    def setUp(self):
        self.process = MagicMock()
        self.child = MagicMock()

        def getitem(name):
            return name

        self.child.__getitem__.side_effect = getitem

        self.params = MagicMock()
        self.process.get_block.return_value = self.child
        self.o = PositionLabellerPart(self.process, self.params)

    def test_configure(self):
        task = MagicMock()
        params = MagicMock()
        xs = LineGenerator("x", "mm", 0.0, 0.5, 3, alternate=True)
        ys = LineGenerator("y", "mm", 0.0, 0.1, 2)
        params.generator = CompoundGenerator([ys, xs], [], [])
        params.generator.prepare()
        completed_steps = 2
        steps_to_do = 4
        part_info = ANY
        self.o.configure(task, completed_steps, steps_to_do, part_info, params)
        self.assertEqual(
            task.post_async.call_args_list,
            [call(self.child["delete"]),
             call(self.child["start"])])
        task.put_many_async.assert_called_once_with(
            self.child, dict(enableCallbacks=True, idStart=3))
        expected_xml = """<?xml version="1.0" ?>
<pos_layout>
<dimensions>
<dimension name="d0" />
<dimension name="d1" />
<dimension name="FilePluginClose" />
</dimensions>
<positions>
<position FilePluginClose="0" d0="0" d1="2" />
<position FilePluginClose="0" d0="1" d1="2" />
<position FilePluginClose="0" d0="1" d1="1" />
<position FilePluginClose="1" d0="1" d1="0" />
</positions>
</pos_layout>""".replace("\n", "")
        task.put.assert_called_once_with(self.child["xml"], expected_xml)

    def test_run(self):
        task = MagicMock()
        update = MagicMock()
        self.o.start_future = MagicMock()
        self.o.run(task, update)
        task.subscribe.assert_called_once_with(self.child["qty"],
                                               self.o.load_more_positions,
                                               task)
        task.wait_all.assert_called_once_with(self.o.start_future)

    def test_load_more_positions(self):
        task = MagicMock()
        current_index = 1
        # Haven't done point 4 or 5 yet
        self.o.end_index = 4
        self.o.steps_up_to = 6
        xs = LineGenerator("x", "mm", 0.0, 0.5, 3, alternate=True)
        ys = LineGenerator("y", "mm", 0.0, 0.1, 2)
        self.o.generator = CompoundGenerator([ys, xs], [], [])
        self.o.generator.prepare()
        self.o.load_more_positions(current_index, task)
        expected_xml = """<?xml version="1.0" ?>
<pos_layout>
<dimensions>
<dimension name="d0" />
<dimension name="d1" />
<dimension name="FilePluginClose" />
</dimensions>
<positions>
<position FilePluginClose="0" d0="1" d1="1" />
<position FilePluginClose="1" d0="1" d1="0" />
</positions>
</pos_layout>""".replace("\n", "")
        task.put.assert_called_once_with(self.child["xml"], expected_xml)
        self.assertEqual(self.o.end_index, 6)
class TestPositionLabellerPart(unittest.TestCase):

    def setUp(self):
        self.process = MagicMock()
        self.child = MagicMock()

        def getitem(name):
            return name

        self.child.__getitem__.side_effect = getitem

        self.params = MagicMock()
        self.process.get_block.return_value = self.child
        self.o = PositionLabellerPart(self.process, self.params)

    def test_configure(self):
        task = MagicMock()
        params = MagicMock()
        xs = LineGenerator("x", "mm", 0.0, 0.5, 3, alternate_direction=True)
        ys = LineGenerator("y", "mm", 0.0, 0.1, 2)
        params.generator = CompoundGenerator([ys, xs], [], [])
        completed_steps = 2
        steps_to_do = 4
        part_info = ANY
        self.o.configure(task, completed_steps, steps_to_do, part_info, params)
        self.assertEqual(task.post_async.call_args_list, [
                         call(self.child["delete"]),
                         call(self.child["start"])])
        task.put_many_async.assert_called_once_with(self.child, dict(
            enableCallbacks=True,
            idStart=3))
        expected_xml = """<?xml version="1.0" ?>
<pos_layout>
<dimensions>
<dimension name="x" />
<dimension name="y" />
<dimension name="FilePluginClose" />
</dimensions>
<positions>
<position FilePluginClose="0" x="2" y="0" />
<position FilePluginClose="0" x="2" y="1" />
<position FilePluginClose="0" x="1" y="1" />
<position FilePluginClose="1" x="0" y="1" />
</positions>
</pos_layout>""".replace("\n", "")
        task.put.assert_called_once_with(self.child["xml"], expected_xml)

    def test_run(self):
        task = MagicMock()
        update = MagicMock()
        self.o.start_future = MagicMock()
        self.o.run(task, update)
        task.subscribe.assert_called_once_with(
            self.child["qty"], self.o.load_more_positions, task)
        task.wait_all.assert_called_once_with(self.o.start_future)

    def test_load_more_positions(self):
        task = MagicMock()
        current_index = 1
        # Haven't done point 4 or 5 yet
        self.o.end_index = 4
        self.o.steps_up_to = 6
        xs = LineGenerator("x", "mm", 0.0, 0.5, 3, alternate_direction=True)
        ys = LineGenerator("y", "mm", 0.0, 0.1, 2)
        self.o.generator = CompoundGenerator([ys, xs], [], [])
        self.o.load_more_positions(current_index, task)
        expected_xml = """<?xml version="1.0" ?>
<pos_layout>
<dimensions>
<dimension name="x" />
<dimension name="y" />
<dimension name="FilePluginClose" />
</dimensions>
<positions>
<position FilePluginClose="0" x="1" y="1" />
<position FilePluginClose="1" x="0" y="1" />
</positions>
</pos_layout>""".replace("\n", "")
        task.put.assert_called_once_with(self.child["xml"], expected_xml)
        self.assertEqual(self.o.end_index, 6)