1from io import BytesIO
2
3import mozunit
4
5import metamerge
6
7ancestor = """
8global-new-deleted: A
9global-new-changed: A
10global-current-deleted: A
11global-current-changed: A
12
13[failing-test.html]
14  [Unchanged subtest]
15    expected: FAIL
16
17  [New deleted subtest]
18    expected: FAIL
19
20  [New modified subtest]
21    expected: TIMEOUT
22
23  [Current deleted subtest]
24    expected: FAIL
25
26  [New modified current deleted]
27    expected: FAIL
28
29  [Ancestor no expected new expected]
30    bug: 1234
31
32[new-deleted-test.html]
33  [Deleted subtest]
34    expected: FAIL
35
36[current-deleted-test.html]
37  [Deleted subtest]
38    expected: FAIL
39
40[test-modified.html]
41  expected: TIMEOUT
42
43[new-modified-current-deleted.html]
44  expected:
45    if os == "linux": FAIL
46    TIMEOUT
47
48[new-add-expected-with-subtest.html]
49  [subtest]
50    expected: FAIL
51
52[current-add-expected-with-subtest.html]
53  [subtest]
54    expected: FAIL
55"""
56
57new = """
58global-new-added: A
59global-new-changed: B
60global-current-deleted: A
61global-current-changed: A
62
63[failing-test.html]
64  [Unchanged subtest]
65    expected: FAIL
66
67  [New added subtest]
68    expected: FAIL
69
70  [New modified subtest]
71    expected:
72      if os == "linux": FAIL
73      TIMEOUT
74
75  [Current deleted subtest]
76    expected: FAIL
77
78  [New modified current deleted]
79    expected: TIMEOUT
80
81  [Ancestor no expected new expected]
82    bug: 1234
83    expected: FAIL
84
85[new-added-test.html]
86  [Added subtest]
87    expected: FAIL
88
89[current-deleted-test.html]
90  [Deleted subtest]
91    expected: FAIL
92
93[test-modified.html]
94  expected:
95    if os == "linux": FAIL
96
97[new-modified-current-deleted.html]
98  expected:
99    if os == "linux": FAIL
100    if os == "mac": FAIL
101    TIMEOUT
102
103[new-add-expected-with-subtest.html]
104  expected: FAIL
105  [subtest]
106    expected: FAIL
107
108[current-add-expected-with-subtest.html]
109  [subtest]
110    expected: FAIL
111"""
112
113current = """
114global-new-deleted: A
115global-new-changed: A
116global-current-added: A
117global-current-changed: B
118
119[failing-test.html]
120  [Unchanged subtest]
121    expected: FAIL
122
123  [New deleted subtest]
124    expected: FAIL
125
126  [New modified subtest]
127    expected: TIMEOUT
128
129  [Current added subtest]
130    expected: FAIL
131
132  [Ancestor no expected new expected]
133    bug: 1234
134
135[new-deleted-test.html]
136  [Deleted subtest]
137    expected: FAIL
138
139[current-added-test.html]
140  [Added subtest]
141    expected: FAIL
142
143[new-add-expected-with-subtest.html]
144  [subtest]
145    expected: FAIL
146
147[current-add-expected-with-subtest.html]
148  expected: FAIL
149  [subtest]
150    expected: FAIL
151"""
152
153updated = """global-new-deleted: A
154global-new-changed: A
155global-current-added: A
156global-current-changed: B
157[failing-test.html]
158  [Unchanged subtest]
159    expected: FAIL
160
161  [New modified subtest]
162    expected:
163      if os == "linux": FAIL
164      TIMEOUT
165
166  [Current added subtest]
167    expected: FAIL
168
169  [Ancestor no expected new expected]
170    expected: FAIL
171    bug: 1234
172
173  [New added subtest]
174    expected: FAIL
175
176  [New modified current deleted]
177    expected: TIMEOUT
178
179
180[current-added-test.html]
181  [Added subtest]
182    expected: FAIL
183
184
185[new-add-expected-with-subtest.html]
186  expected: FAIL
187  [subtest]
188    expected: FAIL
189
190
191[current-add-expected-with-subtest.html]
192  expected: FAIL
193  [subtest]
194    expected: FAIL
195
196
197[new-added-test.html]
198  [Added subtest]
199    expected: FAIL
200
201
202[test-modified.html]
203  expected:
204    if os == "linux": FAIL
205
206[new-modified-current-deleted.html]
207  expected:
208    if os == "linux": FAIL
209    if os == "mac": FAIL
210    TIMEOUT
211"""
212
213
214def test_merge():
215    def get_manifest(str_data):
216        bytes_io = BytesIO(str_data.encode("utf-8"))
217        return metamerge.compile(bytes_io, metamerge.data_cls_getter)
218
219    ancestor_manifest = get_manifest(ancestor)
220    current_manifest = get_manifest(current)
221    new_manifest = get_manifest(new)
222
223    result = metamerge.make_changes(ancestor_manifest, current_manifest, new_manifest)
224    assert result == updated
225
226
227if __name__ == "__main__":
228    mozunit.main()
229