def test_mountpoint_validity_check(self):
        dialog = PartitionEditDialog(self.parent_window, self.edited_device, self.resize_info, self.supported_fs, ["/root", "/var"], True)

        # valid mountpoint
        dialog.mountpoint_entry.set_text("/home")
        dialog.validate_user_input()
        self.assertFalse(self.error_dialog.called)
        self.error_dialog.reset_mock()

        # invalid mountpoint
        mnt = "home"
        dialog.mountpoint_entry.set_text(mnt)
        dialog.validate_user_input()
        self.error_dialog.assert_any_call(dialog, _("\"{0}\" is not a valid mountpoint.").format(mnt))
        self.error_dialog.reset_mock()

        # duplicate mountpoint
        mnt = "/root"
        dialog.mountpoint_entry.set_text(mnt)
        dialog.validate_user_input()
        self.error_dialog.assert_any_call(dialog, "Selected mountpoint \"%s\" is already set for another device." % mnt)
        self.error_dialog.reset_mock()

        # same mountpoint
        self.edited_device.format.configure_mock(mountpoint="/var")
        dialog.mountpoint_entry.set_text("/var")
        dialog.validate_user_input()
        self.assertFalse(self.error_dialog.called)  # no change --> no error
        self.error_dialog.reset_mock()
        self.edited_device.format.configure_mock(mountpoint="")
    def test_selection_format(self):
        dialog = PartitionEditDialog(self.parent_window, self.edited_device, self.resize_info, self.supported_fs, [], True)

        # select the format_check
        dialog.format_check.set_active(True)
        dialog.fslabel_entry.set_text("Label")

        selection = dialog.get_selection()

        # check the results -- device should be resized without formatting and mountpoint
        self.assertEqual(selection.edit_device, self.edited_device)
        self.assertFalse(selection.resize)
        self.assertTrue(selection.fmt)
        self.assertIsNotNone(selection.filesystem)
        self.assertEqual(selection.label, "Label")
    def test_selection_resize(self):
        dialog = PartitionEditDialog(self.parent_window, self.edited_device, self.resize_info, self.supported_fs, [], True)

        # select new size
        size_area = dialog.widgets_dict["size"][0]
        size_area._scale.set_value(size_area._scale.get_value() // 2)

        # select new mountpoint
        dialog.mountpoint_entry.get_buffer().set_text("/home", len("/home"))

        selection = dialog.get_selection()

        # check the results -- device should be resized without formatting and mountpoint
        self.assertEqual(selection.edit_device, self.edited_device)
        self.assertTrue(selection.resize)
        self.assertFalse(selection.fmt)
        self.assertIsNone(selection.filesystem)
        self.assertEqual(selection.mountpoint, "/home")
    def test_label_validity_check(self):
        dialog = PartitionEditDialog(self.parent_window, self.edited_device, self.resize_info, self.supported_fs, [], True)

        # valid label
        label = "a" * 5
        dialog.format_check.set_active(True)
        dialog.filesystems_combo.set_active_id("ext4")
        dialog.fslabel_entry.set_text(label)

        dialog.validate_user_input()
        self.assertFalse(self.error_dialog.called)  # valid label, no error_dialog
        self.error_dialog.reset_mock()

        # invalid label for ext4 (too long)
        label = "a" * 50
        dialog.format_check.set_active(True)
        dialog.filesystems_combo.set_active_id("ext4")
        dialog.fslabel_entry.set_text(label)

        dialog.validate_user_input()
        self.error_dialog.assert_any_call(dialog, _("\"{label}\" is not a valid label.").format(label=label))
        self.error_dialog.reset_mock()