diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..bcb76ef --- /dev/null +++ b/.travis.yml @@ -0,0 +1,25 @@ +language: python + +python: + - "2.7" +env: + global: + - PACKAGE="sublime_jump_along_indent" + matrix: + - SUBLIME_TEXT_VERSION="3" + +before_install: + - curl -OL https://raw.githubusercontent.com/randy3k/UnitTesting/master/sbin/travis.sh + +install: + - sh travis.sh bootstrap + +before_script: + - export DISPLAY=:99.0 + - sh -e /etc/init.d/xvfb start + +script: + - sh travis.sh run_tests + +notifications: + email: false diff --git a/tests/test_helper.py b/tests/test_helper.py new file mode 100644 index 0000000..b6e1c9b --- /dev/null +++ b/tests/test_helper.py @@ -0,0 +1,24 @@ +import sublime, sys, json, sublime_plugin +from unittest import TestCase + +class TestHelper(TestCase): + def setUp(self): + self.view = sublime.active_window().new_file() + + def tearDown(self): + if self.view: + self.view.set_scratch(True) + self.view.window().run_command('close_file') + + def set_text(self, lines): + for line in lines: + self.view.run_command('move_to', { 'to': 'bol', 'extend': True }) + self.view.run_command('insert', { 'characters': line + "\n" }) + + def check_command(self, text, start, end, extend_selection=False): + self.set_text(text) + self.view.sel().clear() + self.view.sel().add(sublime.Region(start[0], start[1])) + self.view.run_command(self.command(), { 'extend_selection': extend_selection }) + + self.assertEqual(self.view.sel()[0], sublime.Region(end[0], end[1])) diff --git a/tests/test_jump_next_indent.py b/tests/test_jump_next_indent.py new file mode 100644 index 0000000..6f74fdc --- /dev/null +++ b/tests/test_jump_next_indent.py @@ -0,0 +1,117 @@ +from test_helper import TestHelper + +class TestJumpNextIndent(TestHelper): + def command(self): + return 'jump_next_indent' + + def test_empty_lines(self): + lines = [ + 'Lorem ipsum dolor sit amet', + '', + '', + 'Lorem ipsum dolor sit amet' + ] + starting_selection = [0, 0] + ending_selection = [29, 29] + + self.check_command(lines, starting_selection, ending_selection) + + def test_indented_lines(self): + lines = [ + 'Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet', + 'Lorem ipsum dolor sit amet' + ] + + starting_selection = [0, 0] + ending_selection = [85, 85] + + self.check_command(lines, starting_selection, ending_selection) + + def test_end_of_file(self): + lines = [ + 'Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet' + ] + + starting_selection = [0, 0] + ending_selection = [0, 0] + + self.check_command(lines, starting_selection, ending_selection) + + def test_maintain_column(self): + lines = [ + 'Lorem ipsum dolor sit amet', + 'Lorem ipsum dolor sit amet', + 'Lorem ipsum dolor sit amet' + ] + + starting_selection = [12, 12] + ending_selection = [66, 66] + + self.check_command(lines, starting_selection, ending_selection) + + def test_jump_to_shorter_line(self): + lines = [ + 'Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet', + '', + 'Lorem ipsum dolor sit amet' + ] + + starting_selection = [53, 53] + ending_selection = [81, 81] + + self.check_command(lines, starting_selection, ending_selection) + + def test_jump_to_first_intersection(self): + lines = [ + ' Lorem ipsum dolor sit amet', + '', + ' Lorem ipsum dolor sit amet' + ] + + starting_selection = [3, 3] + ending_selection = [35, 35] + + self.check_command(lines, starting_selection, ending_selection) + + def test_create_selection(self): + lines = [ + 'Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet', + 'Lorem ipsum dolor sit amet' + ] + + starting_selection = [0, 0] + ending_selection = [0, 85] + + self.check_command(lines, starting_selection, ending_selection, extend_selection = True) + + def test_extend_selection(self): + lines = [ + 'Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet', + 'Lorem ipsum dolor sit amet' + ] + + starting_selection = [0, 27] + ending_selection = [0, 85] + + self.check_command(lines, starting_selection, ending_selection, extend_selection = True) + + def test_subtract_selection(self): + lines = [ + 'Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet', + 'Lorem ipsum dolor sit amet' + ] + + starting_selection = [111, 0] + ending_selection = [111, 85] + + self.check_command(lines, starting_selection, ending_selection, extend_selection = True) diff --git a/tests/test_jump_prev_indent.py b/tests/test_jump_prev_indent.py new file mode 100644 index 0000000..d76392e --- /dev/null +++ b/tests/test_jump_prev_indent.py @@ -0,0 +1,116 @@ +from test_helper import TestHelper + +class TestJumpPrevIndent(TestHelper): + def command(self): + return 'jump_prev_indent' + + def test_empty_lines(self): + lines = [ + 'Lorem ipsum dolor sit amet', + '', + '', + 'Lorem ipsum dolor sit amet' + ] + starting_selection = [29, 29] + ending_selection = [0, 0] + + self.check_command(lines, starting_selection, ending_selection) + + def test_indented_lines(self): + lines = [ + 'Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet', + 'Lorem ipsum dolor sit amet' + ] + + starting_selection = [85, 85] + ending_selection = [0, 0] + + self.check_command(lines, starting_selection, ending_selection) + + def test_beginning_of_file(self): + lines = [ + ' Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet', + 'Lorem ipsum dolor sit amet' + ] + + starting_selection = [58, 58] + ending_selection = [58, 58] + + self.check_command(lines, starting_selection, ending_selection) + + def test_maintain_column(self): + lines = [ + 'Lorem ipsum dolor sit amet', + 'Lorem ipsum dolor sit amet', + 'Lorem ipsum dolor sit amet' + ] + + starting_selection = [66, 66] + ending_selection = [12, 12] + + def test_jump_to_shorter_line(self): + lines = [ + 'Lorem ipsum dolor sit amet', + '', + 'Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet' + ] + + starting_selection = [81, 81] + ending_selection = [26, 26] + + self.check_command(lines, starting_selection, ending_selection) + + def test_jump_to_first_intersection(self): + lines = [ + ' Lorem ipsum dolor sit amet', + '', + ' Lorem ipsum dolor sit amet' + ] + + starting_selection = [33, 33] + ending_selection = [3, 3] + + self.check_command(lines, starting_selection, ending_selection) + + def test_create_selection(self): + lines = [ + 'Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet', + 'Lorem ipsum dolor sit amet' + ] + + starting_selection = [85, 85] + ending_selection = [85, 0] + + self.check_command(lines, starting_selection, ending_selection, extend_selection = True) + + def test_extend_selection(self): + lines = [ + 'Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet', + 'Lorem ipsum dolor sit amet' + ] + + starting_selection = [85, 56] + ending_selection = [85, 0] + + self.check_command(lines, starting_selection, ending_selection, extend_selection = True) + + def test_subtract_selection(self): + lines = [ + 'Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet', + ' Lorem ipsum dolor sit amet', + 'Lorem ipsum dolor sit amet' + ] + + starting_selection = [0, 85] + ending_selection = [0, 0] + + self.check_command(lines, starting_selection, ending_selection, extend_selection = True) +