def test_from_real_git_stuff(self):
        listing = CodeListing(
            filename="file1.txt",
            contents=dedent(
                """
            file 1 line 2 amended
            file 1 line 3
            """
            ).lstrip(),
        )
        listing.commit_ref = "ch17l021"

        self.sourcetree.apply_listing_from_commit(listing)

        with open(self.sourcetree.tempdir + "/superlists/file1.txt") as f:
            assert (
                f.read()
                == dedent(
                    """
                file 1 line 1
                file 1 line 2 amended
                file 1 line 3
                """
                ).lstrip()
            )

        assert listing.was_written
    def test_with_diff_listing_failure_case(self):
        listing = CodeListing(
            filename="file2.txt",
            contents=dedent(
                """
            diff --git a/file2.txt b/file2.txt
            index 93f054e..519d518 100644
            --- a/file2.txt
            +++ b/file2.txt
            @@ -4,6 +4,5 @@ another line changed
             some duplicate lines coming up...

             hello
            -hello
            +something else

             one more line at end
             """
            ).lstrip(),
        )
        listing.commit_ref = "ch17l030"
        self._checkout_commit("ch17l029")

        with self.assertRaises(ApplyCommitException):
            self.sourcetree.apply_listing_from_commit(listing)
示例#3
0
    def test_raises_if_listing_doesnt_show_all_new_lines_in_diff(self):
        listing = CodeListing(filename='file1.txt',
                              contents=dedent("""
            file 1 line 3
            """).lstrip())
        listing.commit_ref = 'ch17l021'

        with self.assertRaises(ApplyCommitException):
            self.sourcetree.apply_listing_from_commit(listing)
示例#4
0
    def test_happy_with_lines_from_just_before_diff(self):
        listing = CodeListing(filename='file1.txt',
                              contents=dedent("""
            file 1 line 1
            file 1 line 2 amended
            file 1 line 3
            """).lstrip())
        listing.commit_ref = 'ch17l021'

        self.sourcetree.apply_listing_from_commit(listing)
示例#5
0
    def test_raises_if_listing_doesnt_show_all_new_lines_in_diff(self):
        listing = CodeListing(filename='file1.txt', contents=dedent(
            """
            file 1 line 3
            """).lstrip()
        )
        listing.commit_ref = 'ch17l021'

        with self.assertRaises(ApplyCommitException):
            self.sourcetree.apply_listing_from_commit(listing)
示例#6
0
    def test_raises_if_listing_lines_in_wrong_order(self):
        listing = CodeListing(filename='file1.txt',
                              contents=dedent("""
            file 1 line 3
            file 1 line 2 amended
            """).lstrip())
        listing.commit_ref = 'ch17l021'

        with self.assertRaises(ApplyCommitException):
            self.sourcetree.apply_listing_from_commit(listing)
示例#7
0
    def test_happy_with_js_callouts(self):
        listing = CodeListing(filename='file1.txt',
                              contents=dedent("""
            [...]
            file 1 line 2 amended //
            file 1 line 3 //
            """).lstrip())
        listing.commit_ref = 'ch17l021'

        self.sourcetree.apply_listing_from_commit(listing)
示例#8
0
    def test_raises_if_any_other_listing_lines_not_in_before_version(self):
        listing = CodeListing(filename='file1.txt',
                              contents=dedent("""
            what is this?
            file 1 line 2 amended
            file 1 line 3
            """).lstrip())
        listing.commit_ref = 'ch17l021'

        with self.assertRaises(ApplyCommitException):
            self.sourcetree.apply_listing_from_commit(listing)
示例#9
0
    def test_happy_with_blank_lines(self):
        listing = CodeListing(filename='file2.txt',
                              contents=dedent("""
            file 2 line 1 changed

            another line changed
            """).lstrip())
        listing.commit_ref = 'ch17l024'
        self._checkout_commit('ch17l023')

        self.sourcetree.apply_listing_from_commit(listing)
示例#10
0
    def test_happy_with_js_callouts(self):
        listing = CodeListing(filename='file1.txt', contents=dedent(
            """
            [...]
            file 1 line 2 amended //
            file 1 line 3 //
            """).lstrip()
        )
        listing.commit_ref = 'ch17l021'

        self.sourcetree.apply_listing_from_commit(listing)
示例#11
0
    def test_raises_if_listing_lines_in_wrong_order(self):
        listing = CodeListing(filename='file1.txt', contents=dedent(
            """
            file 1 line 3
            file 1 line 2 amended
            """).lstrip()
        )
        listing.commit_ref = 'ch17l021'

        with self.assertRaises(ApplyCommitException):
            self.sourcetree.apply_listing_from_commit(listing)
示例#12
0
    def test_raises_if_too_many_files_in_commit(self):
        listing = CodeListing(filename='file1.txt',
                              contents=dedent("""
            file 1 line 1
            file 1 line 2
            """).lstrip())
        listing.commit_ref = 'ch17l023'

        self._checkout_commit('ch17l022')
        with self.assertRaises(ApplyCommitException):
            self.sourcetree.apply_listing_from_commit(listing)
示例#13
0
    def test_happy_with_lines_from_just_before_diff(self):
        listing = CodeListing(filename='file1.txt', contents=dedent(
            """
            file 1 line 1
            file 1 line 2 amended
            file 1 line 3
            """).lstrip()
        )
        listing.commit_ref = 'ch17l021'

        self.sourcetree.apply_listing_from_commit(listing)
示例#14
0
    def test_raises_if_any_other_listing_lines_not_in_before_version(self):
        listing = CodeListing(filename='file1.txt', contents=dedent(
            """
            what is this?
            file 1 line 2 amended
            file 1 line 3
            """).lstrip()
        )
        listing.commit_ref = 'ch17l021'

        with self.assertRaises(ApplyCommitException):
            self.sourcetree.apply_listing_from_commit(listing)
示例#15
0
    def test_raises_if_too_many_files_in_commit(self):
        listing = CodeListing(filename='file1.txt', contents=dedent(
            """
            file 1 line 1
            file 1 line 2
            """).lstrip()
        )
        listing.commit_ref = 'ch17l023'

        self._checkout_commit('ch17l022')
        with self.assertRaises(ApplyCommitException):
            self.sourcetree.apply_listing_from_commit(listing)
示例#16
0
    def test_leaves_staging_empty(self):
        listing = CodeListing(filename='file1.txt',
                              contents=dedent("""
            file 1 line 2 amended
            file 1 line 3
            """).lstrip())
        listing.commit_ref = 'ch17l021'

        self.sourcetree.apply_listing_from_commit(listing)

        staged = self.sourcetree.run_command('git diff --staged')
        assert staged == ''
示例#17
0
    def test_happy_with_blank_lines(self):
        listing = CodeListing(filename='file2.txt', contents=dedent(
            """
            file 2 line 1 changed

            another line changed
            """).lstrip()
        )
        listing.commit_ref = 'ch17l024'
        self._checkout_commit('ch17l023')

        self.sourcetree.apply_listing_from_commit(listing)
示例#18
0
    def test_listings_showing_a_move_mean_can_ignore_commit_lines_added_and_removed_2(
            self):
        listing = CodeListing(filename='file2.txt',
                              contents=dedent("""
            hello

            one more line at end
            """).lstrip())
        listing.commit_ref = 'ch17l030'
        self._checkout_commit('ch17l029')

        self.sourcetree.apply_listing_from_commit(listing)
示例#19
0
    def test_listings_showing_a_move_mean_can_ignore_commit_lines_added_and_removed_2(self):
        listing = CodeListing(filename='file2.txt', contents=dedent(
            """
            hello

            one more line at end
            """).lstrip()
        )
        listing.commit_ref = 'ch17l030'
        self._checkout_commit('ch17l029')

        self.sourcetree.apply_listing_from_commit(listing)
示例#20
0
    def test_raises_if_listing_line_not_in_after_version(self):
        listing = CodeListing(filename='file2.txt',
                              contents=dedent("""
            hello
            goodbye
            hello

            one more line at end
            """).lstrip())
        listing.commit_ref = 'ch17l028'

        with self.assertRaises(ApplyCommitException):
            self.sourcetree.apply_listing_from_commit(listing)
示例#21
0
    def test_leaves_staging_empty(self):
        listing = CodeListing(filename='file1.txt', contents=dedent(
            """
            file 1 line 2 amended
            file 1 line 3
            """).lstrip()
        )
        listing.commit_ref = 'ch17l021'

        self.sourcetree.apply_listing_from_commit(listing)

        staged = self.sourcetree.run_command('git diff --staged')
        assert staged == ''
示例#22
0
    def test_handles_indents(self):
        listing = CodeListing(filename='pythonfile.py',
                              contents=dedent("""
            def method1(self):
                # amend method 1
                return 2

            [...]
            """).lstrip())
        listing.commit_ref = 'ch17l026'
        self._checkout_commit('ch17l025')

        self.sourcetree.apply_listing_from_commit(listing)
示例#23
0
    def test_line_ordering_check_isnt_confused_by_dupe_lines(self):
        listing = CodeListing(filename='file2.txt',
                              contents=dedent("""
            another line changed
            some duplicate lines coming up...

            hello
            goodbye
            hello
            """).lstrip())
        listing.commit_ref = 'ch17l027'
        self._checkout_commit('ch17l026')

        self.sourcetree.apply_listing_from_commit(listing)
    def test_happy_with_python_callouts(self):
        listing = CodeListing(
            filename="file1.txt",
            contents=dedent(
                """
            [...]
            file 1 line 2 amended #
            file 1 line 3 #
            """
            ).lstrip(),
        )
        listing.commit_ref = "ch17l021"

        self.sourcetree.apply_listing_from_commit(listing)
示例#25
0
    def test_under_indentation_differences_are_picked_up(self):
        listing = CodeListing(filename='pythonfile.py',
                              contents=dedent("""
            def method1(self):
            # amend method 1
            return 2

            [...]
            """).lstrip())
        listing.commit_ref = 'ch17l026'
        self._checkout_commit('ch17l025')

        with self.assertRaises(ApplyCommitException):
            self.sourcetree.apply_listing_from_commit(listing)
示例#26
0
    def test_handles_indents(self):
        listing = CodeListing(filename='pythonfile.py', contents=dedent(
            """
            def method1(self):
                # amend method 1
                return 2

            [...]
            """).lstrip()
        )
        listing.commit_ref = 'ch17l026'
        self._checkout_commit('ch17l025')

        self.sourcetree.apply_listing_from_commit(listing)
示例#27
0
    def test_raises_if_listing_line_not_in_after_version(self):
        listing = CodeListing(filename='file2.txt', contents=dedent(
            """
            hello
            goodbye
            hello

            one more line at end
            """).lstrip()
        )
        listing.commit_ref = 'ch17l028'

        with self.assertRaises(ApplyCommitException):
            self.sourcetree.apply_listing_from_commit(listing)
示例#28
0
    def test_line_ordering_check_isnt_confused_by_dupe_lines(self):
        listing = CodeListing(filename='file2.txt', contents=dedent(
            """
            another line changed
            some duplicate lines coming up...

            hello
            goodbye
            hello
            """).lstrip()
        )
        listing.commit_ref = 'ch17l027'
        self._checkout_commit('ch17l026')

        self.sourcetree.apply_listing_from_commit(listing)
示例#29
0
    def test_listings_showing_a_move_mean_can_ignore_commit_lines_added_and_removed(self):
        listing = CodeListing(filename='pythonfile.py', contents=dedent(
            """
            class NuKlass(object):

                def method1(self):
                    [...]
                    a = a + 3
                    [...]
            """).lstrip()
        )
        listing.commit_ref = 'ch17l029'
        self._checkout_commit('ch17l028-1')

        self.sourcetree.apply_listing_from_commit(listing)
示例#30
0
    def test_under_indentation_differences_are_picked_up(self):
        listing = CodeListing(filename='pythonfile.py', contents=dedent(
            """
            def method1(self):
            # amend method 1
            return 2

            [...]
            """).lstrip()
        )
        listing.commit_ref = 'ch17l026'
        self._checkout_commit('ch17l025')

        with self.assertRaises(ApplyCommitException):
            self.sourcetree.apply_listing_from_commit(listing)
    def test_raises_if_wrong_file(self):
        listing = CodeListing(
            filename="file2.txt",
            contents=dedent(
                """
            file 1 line 1
            file 1 line 2 amended
            file 1 line 3
            """
            ).lstrip(),
        )
        listing.commit_ref = "ch17l021"

        with self.assertRaises(ApplyCommitException):
            self.sourcetree.apply_listing_from_commit(listing)
示例#32
0
    def test_listings_showing_a_move_mean_can_ignore_commit_lines_added_and_removed(
            self):
        listing = CodeListing(filename='pythonfile.py',
                              contents=dedent("""
            class NuKlass(object):

                def method1(self):
                    [...]
                    a = a + 3
                    [...]
            """).lstrip())
        listing.commit_ref = 'ch17l029'
        self._checkout_commit('ch17l028-1')

        self.sourcetree.apply_listing_from_commit(listing)
示例#33
0
    def test_happy_with_lines_in_before_and_after_version(self):
        listing = CodeListing(filename='file2.txt',
                              contents=dedent("""
            file 2 line 1 changed
            [...]

            hello
            hello

            one more line at end
            """).lstrip())
        listing.commit_ref = 'ch17l028'
        self._checkout_commit('ch17l027')

        self.sourcetree.apply_listing_from_commit(listing)
示例#34
0
    def test_happy_with_lines_in_before_and_after_version(self):
        listing = CodeListing(filename='file2.txt', contents=dedent(
            """
            file 2 line 1 changed
            [...]

            hello
            hello

            one more line at end
            """).lstrip()
        )
        listing.commit_ref = 'ch17l028'
        self._checkout_commit('ch17l027')

        self.sourcetree.apply_listing_from_commit(listing)
示例#35
0
    def test_line_ordering_check_isnt_confused_by_new_lines_that_dupe_existing(self):
        listing = CodeListing(filename='file2.txt', contents=dedent(
            """
            some duplicate lines coming up...

            hello

            one more line at end
            add a line with a dupe of existing
            hello
            goodbye
            """).lstrip()
        )
        listing.commit_ref = 'ch17l031'
        self._checkout_commit('ch17l030')

        self.sourcetree.apply_listing_from_commit(listing)
示例#36
0
    def test_line_ordering_check_isnt_confused_by_new_lines_that_dupe_existing(
            self):
        listing = CodeListing(filename='file2.txt',
                              contents=dedent("""
            some duplicate lines coming up...

            hello

            one more line at end
            add a line with a dupe of existing
            hello
            goodbye
            """).lstrip())
        listing.commit_ref = 'ch17l031'
        self._checkout_commit('ch17l030')

        self.sourcetree.apply_listing_from_commit(listing)
示例#37
0
    def test_non_dupes_are_still_order_checked(self):
        listing = CodeListing(filename='file2.txt',
                              contents=dedent("""
            some duplicate lines coming up...

            hello

            one more line at end
            add a line with a dupe of existing
            goodbye
            hello
            """).lstrip())
        listing.commit_ref = 'ch17l031'
        self._checkout_commit('ch17l030')

        with self.assertRaises(ApplyCommitException):
            self.sourcetree.apply_listing_from_commit(listing)
示例#38
0
    def test_from_real_git_stuff(self):
        listing = CodeListing(filename='file1.txt',
                              contents=dedent("""
            file 1 line 2 amended
            file 1 line 3
            """).lstrip())
        listing.commit_ref = 'ch17l021'

        self.sourcetree.apply_listing_from_commit(listing)

        with open(self.sourcetree.tempdir + '/superlists/file1.txt') as f:
            assert f.read() == dedent("""
                file 1 line 1
                file 1 line 2 amended
                file 1 line 3
                """).lstrip()

        assert listing.was_written
示例#39
0
    def test_non_dupes_are_still_order_checked(self):
        listing = CodeListing(filename='file2.txt', contents=dedent(
            """
            some duplicate lines coming up...

            hello

            one more line at end
            add a line with a dupe of existing
            goodbye
            hello
            """).lstrip()
        )
        listing.commit_ref = 'ch17l031'
        self._checkout_commit('ch17l030')

        with self.assertRaises(ApplyCommitException):
            self.sourcetree.apply_listing_from_commit(listing)
    def DONTtest_listings_must_use_elipsis_to_indicate_skipped_lines(self):
        # TODO!
        lines = ["file 1 line 1", "file 1 line 2 amended", "file 1 line 3", "file 1 line 4 inserted", "another line"]
        listing = CodeListing(filename="file1.txt", contents="")
        listing.commit_ref = "ch17l022"
        self._checkout_commit("ch17l021")

        listing.contents = "\n".join(lines)
        self.sourcetree.apply_listing_from_commit(listing)  # should not raise

        lines[1] = "[...]"
        listing.contents = "\n".join(lines)
        self.sourcetree.apply_listing_from_commit(listing)  # should not raise

        lines.pop(1)
        listing.contents = "\n".join(lines)
        with self.assertRaises(ApplyCommitException):
            self.sourcetree.apply_listing_from_commit(listing)
示例#41
0
    def test_with_diff_listing_passing_case(self):
        listing = CodeListing(filename='file2.txt',
                              contents=dedent("""
            diff --git a/file2.txt b/file2.txt
            index 93f054e..519d518 100644
            --- a/file2.txt
            +++ b/file2.txt
            @@ -4,6 +4,5 @@ another line changed
             some duplicate lines coming up...

             hello
            -hello

             one more line at end
             """).lstrip())
        listing.commit_ref = 'ch17l030'
        self._checkout_commit('ch17l029')

        self.sourcetree.apply_listing_from_commit(listing)
示例#42
0
    def test_with_diff_listing_passing_case(self):
        listing = CodeListing(filename='file2.txt', contents=dedent(
            """
            diff --git a/file2.txt b/file2.txt
            index 93f054e..519d518 100644
            --- a/file2.txt
            +++ b/file2.txt
            @@ -4,6 +4,5 @@ another line changed
             some duplicate lines coming up...

             hello
            -hello

             one more line at end
             """).lstrip()
        )
        listing.commit_ref = 'ch17l030'
        self._checkout_commit('ch17l029')

        self.sourcetree.apply_listing_from_commit(listing)
    def test_from_real_git_stuff(self):
        listing = CodeListing(filename='file1.txt', contents=dedent(
            """
            file 1 line 2 amended
            file 1 line 3
            """).lstrip()
        )
        listing.commit_ref = 'ch17l021'

        self.sourcetree.apply_listing_from_commit(listing)


        with open(self.sourcetree.tempdir + '/file1.txt') as f:
            assert f.read() == dedent(
                """
                file 1 line 1
                file 1 line 2 amended
                file 1 line 3
                """).lstrip()

        assert listing.was_written
示例#44
0
    def DONTtest_listings_must_use_elipsis_to_indicate_skipped_lines(self):
        # TODO!
        lines = [
            "file 1 line 1",
            "file 1 line 2 amended",
            "file 1 line 3",
            "file 1 line 4 inserted",
            "another line",
        ]
        listing = CodeListing(filename='file1.txt', contents='')
        listing.commit_ref = 'ch17l022'
        self._checkout_commit('ch17l021')

        listing.contents = '\n'.join(lines)
        self.sourcetree.apply_listing_from_commit(listing)  # should not raise

        lines[1] = "[...]"
        listing.contents = '\n'.join(lines)
        self.sourcetree.apply_listing_from_commit(listing)  # should not raise

        lines.pop(1)
        listing.contents = '\n'.join(lines)
        with self.assertRaises(ApplyCommitException):
            self.sourcetree.apply_listing_from_commit(listing)