47
47
self.assertEqual(['M 100644 :1 f\xc2\xb5/bar\n'], builder.commit_info)
49
def test_set_file_newline(self):
51
builder = tests.GitBranchBuilder(stream)
52
builder.set_file(u'foo\nbar', 'contents\nbar\n', False)
53
self.assertEqualDiff('blob\nmark :1\ndata 13\ncontents\nbar\n\n',
55
self.assertEqual(['M 100644 :1 "foo\\nbar"\n'], builder.commit_info)
49
57
def test_set_file_executable(self):
50
58
stream = StringIO()
51
59
builder = tests.GitBranchBuilder(stream)
63
71
self.assertEqual(['M 120000 :1 f\xc2\xb5/bar\n'], builder.commit_info)
73
def test_set_link_newline(self):
75
builder = tests.GitBranchBuilder(stream)
76
builder.set_link(u'foo\nbar', 'link/contents')
77
self.assertEqualDiff('blob\nmark :1\ndata 13\nlink/contents\n',
79
self.assertEqual(['M 120000 :1 "foo\\nbar"\n'], builder.commit_info)
65
81
def test_delete_entry(self):
66
82
stream = StringIO()
67
83
builder = tests.GitBranchBuilder(stream)
68
84
builder.delete_entry(u'path/to/f\xb5')
69
85
self.assertEqual(['D path/to/f\xc2\xb5\n'], builder.commit_info)
87
def test_delete_entry_newline(self):
89
builder = tests.GitBranchBuilder(stream)
90
builder.delete_entry(u'path/to/foo\nbar')
91
self.assertEqual(['D "path/to/foo\\nbar"\n'], builder.commit_info)
93
def test_encode_path(self):
94
encode = tests.GitBranchBuilder._encode_path
95
# Unicode is encoded to utf-8
96
self.assertEqual(encode(u'f\xb5'), 'f\xc2\xb5')
97
# The name must be quoted if it starts by a double quote or contains a
99
self.assertEqual(encode(u'"foo'), '"\\"foo"')
100
self.assertEqual(encode(u'fo\no'), '"fo\\no"')
101
# When the name is quoted, all backslash and quote chars must be
103
self.assertEqual(encode(u'fo\\o\nbar'), '"fo\\\\o\\nbar"')
104
self.assertEqual(encode(u'fo"o"\nbar'), '"fo\\"o\\"\\nbar"')
105
# Other control chars, such as \r, need not be escaped.
106
self.assertEqual(encode(u'foo\r\nbar'), '"foo\r\\nbar"')
71
108
def test_add_and_commit(self):
72
109
stream = StringIO()
73
110
builder = tests.GitBranchBuilder(stream)