示例#1
0
class Test_get_selected_text(ViewTest):
    def setUp(self):
        super().setUp()
        sublime.set_clipboard('')
        registers._REGISTER_DATA = {}
        self.view.settings().erase('vintage')
        self.view.settings().erase('vintageous_use_sys_clipboard')
        self.regs = State(self.view).registers
        self.regs.view = mock.Mock()

    def testExtractsSubstrings(self):
        self.regs.view.sel.return_value = [10, 20, 30]

        class vi_cmd_data:
            _synthetize_new_line_at_eof = False
            _yanks_linewise = False

        self.regs.get_selected_text(vi_cmd_data)
        self.assertEqual(self.regs.view.substr.call_count, 3)

    def testReturnsFragments(self):
        self.regs.view.sel.return_value = [10, 20, 30]
        self.regs.view.substr.side_effect = lambda x: x

        class vi_cmd_data:
            _synthetize_new_line_at_eof = False
            _yanks_linewise = False

        rv = self.regs.get_selected_text(vi_cmd_data)
        self.assertEqual(rv, [10, 20, 30])

    def testCanSynthetizeNewLineAtEof(self):
        self.regs.view.substr.return_value = "AAA"
        self.regs.view.sel.return_value = [
            sublime.Region(10, 10),
            sublime.Region(10, 10)
        ]
        self.regs.view.size.return_value = 0

        class vi_cmd_data:
            _synthetize_new_line_at_eof = True
            _yanks_linewise = False

        rv = self.regs.get_selected_text(vi_cmd_data)
        self.assertEqual(rv, ["AAA", "AAA\n"])

    def testDoesntSynthetizeNewLineAtEofIfNotNeeded(self):
        self.regs.view.substr.return_value = "AAA\n"
        self.regs.view.sel.return_value = [
            sublime.Region(10, 10),
            sublime.Region(10, 10)
        ]
        self.regs.view.size.return_value = 0

        class vi_cmd_data:
            _synthetize_new_line_at_eof = True
            _yanks_linewise = False

        rv = self.regs.get_selected_text(vi_cmd_data)
        self.assertEqual(rv, ["AAA\n", "AAA\n"])

    def testDoesntSynthetizeNewLineAtEofIfNotAtEof(self):
        self.regs.view.substr.return_value = "AAA"
        self.regs.view.sel.return_value = [
            sublime.Region(10, 10),
            sublime.Region(10, 10)
        ]
        self.regs.view.size.return_value = 100

        class vi_cmd_data:
            _synthetize_new_line_at_eof = True
            _yanks_linewise = False

        rv = self.regs.get_selected_text(vi_cmd_data)
        self.assertEqual(rv, ["AAA", "AAA"])

    def testCanYankLinewise(self):
        self.regs.view.substr.return_value = "AAA"
        self.regs.view.sel.return_value = [
            sublime.Region(10, 10),
            sublime.Region(10, 10)
        ]

        class vi_cmd_data:
            _synthetize_new_line_at_eof = False
            _yanks_linewise = True

        rv = self.regs.get_selected_text(vi_cmd_data)
        self.assertEqual(rv, ["AAA\n", "AAA\n"])

    def testDoesNotYankLinewiseIfNonEmptyStringFollowedByNewLine(self):
        self.regs.view.substr.return_value = "AAA\n"
        self.regs.view.sel.return_value = [
            sublime.Region(10, 10),
            sublime.Region(10, 10)
        ]

        class vi_cmd_data:
            _synthetize_new_line_at_eof = False
            _yanks_linewise = True

        rv = self.regs.get_selected_text(vi_cmd_data)
        self.assertEqual(rv, ["AAA\n", "AAA\n"])

    def testYankLinewiseIfEmptyStringFollowedByNewLine(self):
        self.regs.view.substr.return_value = "\n"
        self.regs.view.sel.return_value = [
            sublime.Region(10, 10),
            sublime.Region(10, 10)
        ]

        class vi_cmd_data:
            _synthetize_new_line_at_eof = False
            _yanks_linewise = True

        rv = self.regs.get_selected_text(vi_cmd_data)
        self.assertEqual(rv, ["\n\n", "\n\n"])

    def testYankLinewiseIfTwoTrailingNewLines(self):
        self.regs.view.substr.return_value = "\n\n"
        self.regs.view.sel.return_value = [
            sublime.Region(10, 10),
            sublime.Region(10, 10)
        ]

        class vi_cmd_data:
            _synthetize_new_line_at_eof = False
            _yanks_linewise = True

        rv = self.regs.get_selected_text(vi_cmd_data)
        self.assertEqual(rv, ["\n\n\n", "\n\n\n"])
class Test_get_selected_text(ViewTest):
    def setUp(self):
        super().setUp()
        sublime.set_clipboard('')
        registers._REGISTER_DATA = {}
        self.view.settings().erase('vintage')
        self.view.settings().erase('vintageous_use_sys_clipboard')
        self.regs = State(self.view).registers
        self.regs.view = mock.Mock()

    def testExtractsSubstrings(self):
        self.regs.view.sel.return_value = [10, 20, 30]

        class vi_cmd_data:
            _synthetize_new_line_at_eof = False
            _yanks_linewise = False

        self.regs.get_selected_text(vi_cmd_data)
        self.assertEqual(self.regs.view.substr.call_count, 3)

    def testReturnsFragments(self):
        self.regs.view.sel.return_value = [10, 20, 30]
        self.regs.view.substr.side_effect = lambda x: x

        class vi_cmd_data:
            _synthetize_new_line_at_eof = False
            _yanks_linewise = False

        rv = self.regs.get_selected_text(vi_cmd_data)
        self.assertEqual(rv, [10, 20, 30])

    def testCanSynthetizeNewLineAtEof(self):
        self.regs.view.substr.return_value = "AAA"
        self.regs.view.sel.return_value = [sublime.Region(10, 10), sublime.Region(10, 10)]
        self.regs.view.size.return_value = 0

        class vi_cmd_data:
            _synthetize_new_line_at_eof = True
            _yanks_linewise = False

        rv = self.regs.get_selected_text(vi_cmd_data)
        self.assertEqual(rv, ["AAA", "AAA\n"])

    def testDoesntSynthetizeNewLineAtEofIfNotNeeded(self):
        self.regs.view.substr.return_value = "AAA\n"
        self.regs.view.sel.return_value = [sublime.Region(10, 10), sublime.Region(10, 10)]
        self.regs.view.size.return_value = 0

        class vi_cmd_data:
            _synthetize_new_line_at_eof = True
            _yanks_linewise = False

        rv = self.regs.get_selected_text(vi_cmd_data)
        self.assertEqual(rv, ["AAA\n", "AAA\n"])

    def testDoesntSynthetizeNewLineAtEofIfNotAtEof(self):
        self.regs.view.substr.return_value = "AAA"
        self.regs.view.sel.return_value = [sublime.Region(10, 10), sublime.Region(10, 10)]
        self.regs.view.size.return_value = 100

        class vi_cmd_data:
            _synthetize_new_line_at_eof = True
            _yanks_linewise = False

        rv = self.regs.get_selected_text(vi_cmd_data)
        self.assertEqual(rv, ["AAA", "AAA"])

    def testCanYankLinewise(self):
        self.regs.view.substr.return_value = "AAA"
        self.regs.view.sel.return_value = [sublime.Region(10, 10), sublime.Region(10, 10)]

        class vi_cmd_data:
            _synthetize_new_line_at_eof = False
            _yanks_linewise = True

        rv = self.regs.get_selected_text(vi_cmd_data)
        self.assertEqual(rv, ["AAA\n", "AAA\n"])

    def testDoesNotYankLinewiseIfNonEmptyStringFollowedByNewLine(self):
        self.regs.view.substr.return_value = "AAA\n"
        self.regs.view.sel.return_value = [sublime.Region(10, 10), sublime.Region(10, 10)]

        class vi_cmd_data:
            _synthetize_new_line_at_eof = False
            _yanks_linewise = True

        rv = self.regs.get_selected_text(vi_cmd_data)
        self.assertEqual(rv, ["AAA\n", "AAA\n"])

    def testYankLinewiseIfEmptyStringFollowedByNewLine(self):
        self.regs.view.substr.return_value = "\n"
        self.regs.view.sel.return_value = [sublime.Region(10, 10), sublime.Region(10, 10)]

        class vi_cmd_data:
            _synthetize_new_line_at_eof = False
            _yanks_linewise = True

        rv = self.regs.get_selected_text(vi_cmd_data)
        self.assertEqual(rv, ["\n\n", "\n\n"])

    def testYankLinewiseIfTwoTrailingNewLines(self):
        self.regs.view.substr.return_value = "\n\n"
        self.regs.view.sel.return_value = [sublime.Region(10, 10), sublime.Region(10, 10)]

        class vi_cmd_data:
            _synthetize_new_line_at_eof = False
            _yanks_linewise = True

        rv = self.regs.get_selected_text(vi_cmd_data)
        self.assertEqual(rv, ["\n\n\n", "\n\n\n"])