def test_startswith(self):
     self.assertEqual(_expand('abc', 'abcdef', 0, 0, 0), [(0, 0)])
     self.assertEqual(_expand('abc', 'abcdef', 1, 0, 1), [(0, 0)])
     self.assertEqual(_expand('abc', 'abcdef', 2, 0, 2), [(0, 0)])
     self.assertEqual(_expand('abc', 'abcdef', 0, 1, 1), [(0, 0)])
     self.assertEqual(_expand('abc', 'abcdef', 0, 2, 2), [(0, 0)])
     self.assertEqual(_expand('abc', 'abcdef', 1, 1, 1), [(0, 0)])
     self.assertEqual(_expand('abc', 'abcdef', 1, 1, 2), [(0, 0)])
     self.assertEqual(_expand('abc', 'abcdef', 2, 2, 2), [(0, 0)])
    def test_one_missing(self):
        # first item missing
        self.assertEqual(_expand('abcd', 'bcd---', 0, 1, 1), [])
        self.assertEqual(_expand('abcd', 'bcd---', 1, 0, 1), [])
        self.assertEqual(_expand('abcd', 'bcd---', 1, 1, 2), [])

        # second item missing
        self.assertEqual(_expand('abcd', 'acd---', 0, 1, 1), [])
        self.assertEqual(_expand('abcd', 'acd---', 1, 0, 1), [])
        self.assertEqual(_expand('abcd', 'acd---', 1, 1, 2), [])

        # last item missing
        self.assertEqual(_expand('abcd', 'abc---', 0, 1, 1), [])
        self.assertEqual(_expand('abcd', 'abc---', 1, 0, 1), [(1, 0)])
        self.assertEqual(_expand('abcd', 'abc---', 1, 1, 2), [(1, 0)])
    def test_one_extra(self):
        # extra first item
        self.assertEqual(_expand('bcd', 'abcd', 0, 0, 0), [])
        self.assertEqual(_expand('bcd', 'abcd', 0, 1, 1), [(0, 1)])

        # extra third item
        self.assertEqual(_expand('abd', 'abcd', 0, 0, 0), [])
        self.assertEqual(_expand('abd', 'abcd', 0, 1, 1), [(0, 1)])

        # extra last item
        self.assertEqual(_expand('abc', 'abcd', 0, 0, 0), [(0, 0)])
        self.assertEqual(_expand('abc', 'abcd', 0, 1, 1), [(0, 0)])
 def test_two_insertions(self):
     self.assertEqual(_expand('abc', 'a--bc', 0, 2, 2), [(0, 2)])
     self.assertEqual(_expand('abc', 'a--bc', 2, 0, 2), [(2, 0)])
     self.assertEqual(_expand('abc', 'a--bc', 2, 2, 2), [(2, 0), (0, 2)])
     self.assertEqual(_expand('abc', 'a--bc', 1, 1, 2), [])
 def test_double_first_item(self):
     self.assertEqual(_expand('abc', 'aabc', 1, 1, 1), [(0, 1)])
 def test_insert_and_substitute(self):
     self.assertEqual(_expand('abcdefg', 'abc-def----', 1, 1, 2), [(1, 1)])
     self.assertEqual(_expand('abcdefg', 'abc-def----', 1, 1, 1), [])
     self.assertEqual(_expand('abcdefg', 'abc-def----', 1, 0, 1), [])
     self.assertEqual(_expand('abcdefg', 'abc-def----', 0, 1, 1), [])
 def test_no_result(self):
     self.assertEqual(_expand('abc', 'def', 0, 0, 0), [])
     self.assertEqual(_expand('abc', 'defg', 1, 1, 1), [])
     self.assertEqual(_expand('abc', 'defg', 1, 1, 2), [])
 def test_identical(self):
     self.assertEqual(_expand('abc', 'abc', 0, 0, 0), [(0, 0)])