diff-lcs 1.1.3 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rspec +1 -0
- data/Code-of-Conduct.md +74 -0
- data/Contributing.md +119 -0
- data/History.md +400 -0
- data/{License.rdoc → License.md} +6 -5
- data/Manifest.txt +36 -4
- data/README.rdoc +35 -23
- data/Rakefile +106 -11
- data/bin/htmldiff +7 -4
- data/bin/ldiff +4 -1
- data/docs/COPYING.txt +21 -22
- data/docs/artistic.txt +127 -0
- data/lib/diff/lcs/array.rb +1 -15
- data/lib/diff/lcs/backports.rb +9 -0
- data/lib/diff/lcs/block.rb +4 -18
- data/lib/diff/lcs/callbacks.rb +233 -230
- data/lib/diff/lcs/change.rb +114 -109
- data/lib/diff/lcs/htmldiff.rb +17 -18
- data/lib/diff/lcs/hunk.rb +232 -116
- data/lib/diff/lcs/internals.rb +308 -0
- data/lib/diff/lcs/ldiff.rb +138 -177
- data/lib/diff/lcs/string.rb +1 -15
- data/lib/diff/lcs.rb +597 -963
- data/lib/diff-lcs.rb +1 -3
- data/spec/change_spec.rb +89 -0
- data/spec/diff_spec.rb +32 -16
- data/spec/fixtures/aX +1 -0
- data/spec/fixtures/bXaX +1 -0
- data/spec/fixtures/ds1.csv +50 -0
- data/spec/fixtures/ds2.csv +51 -0
- data/spec/fixtures/ldiff/output.diff +4 -0
- data/spec/fixtures/ldiff/output.diff-c +7 -0
- data/spec/fixtures/ldiff/output.diff-e +3 -0
- data/spec/fixtures/ldiff/output.diff-f +3 -0
- data/spec/fixtures/ldiff/output.diff-u +5 -0
- data/spec/fixtures/ldiff/output.diff.chef +4 -0
- data/spec/fixtures/ldiff/output.diff.chef-c +15 -0
- data/spec/fixtures/ldiff/output.diff.chef-e +3 -0
- data/spec/fixtures/ldiff/output.diff.chef-f +3 -0
- data/spec/fixtures/ldiff/output.diff.chef-u +9 -0
- data/spec/fixtures/ldiff/output.diff.chef2 +7 -0
- data/spec/fixtures/ldiff/output.diff.chef2-c +20 -0
- data/spec/fixtures/ldiff/output.diff.chef2-d +7 -0
- data/spec/fixtures/ldiff/output.diff.chef2-e +7 -0
- data/spec/fixtures/ldiff/output.diff.chef2-f +7 -0
- data/spec/fixtures/ldiff/output.diff.chef2-u +16 -0
- data/spec/fixtures/new-chef +4 -0
- data/spec/fixtures/new-chef2 +17 -0
- data/spec/fixtures/old-chef +4 -0
- data/spec/fixtures/old-chef2 +14 -0
- data/spec/hunk_spec.rb +83 -0
- data/spec/issues_spec.rb +154 -0
- data/spec/lcs_spec.rb +36 -16
- data/spec/ldiff_spec.rb +87 -0
- data/spec/patch_spec.rb +198 -172
- data/spec/sdiff_spec.rb +99 -89
- data/spec/spec_helper.rb +149 -59
- data/spec/traverse_balanced_spec.rb +191 -167
- data/spec/traverse_sequences_spec.rb +105 -51
- metadata +218 -99
- data/.gemtest +0 -0
- data/History.rdoc +0 -54
- data/diff-lcs.gemspec +0 -51
- data/docs/artistic.html +0 -289
@@ -1,286 +1,310 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
describe
|
5
|
+
describe 'Diff::LCS.traverse_balanced' do
|
6
6
|
include Diff::LCS::SpecHelper::Matchers
|
7
7
|
|
8
|
-
shared_examples
|
9
|
-
it
|
8
|
+
shared_examples 'with a #change callback' do |s1, s2, result|
|
9
|
+
it 'traverses s1 -> s2 correctly' do
|
10
10
|
traversal = balanced_traversal(s1, s2, :balanced_callback)
|
11
|
-
traversal.result.
|
11
|
+
expect(traversal.result).to eq(result)
|
12
12
|
end
|
13
13
|
|
14
|
-
it
|
14
|
+
it 'traverses s2 -> s1 correctly' do
|
15
15
|
traversal = balanced_traversal(s2, s1, :balanced_callback)
|
16
|
-
traversal.result.
|
16
|
+
expect(traversal.result).to eq(balanced_reverse(result))
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
shared_examples
|
21
|
-
it
|
20
|
+
shared_examples 'without a #change callback' do |s1, s2, result|
|
21
|
+
it 'traverses s1 -> s2 correctly' do
|
22
22
|
traversal = balanced_traversal(s1, s2, :balanced_callback_no_change)
|
23
|
-
traversal.result.
|
23
|
+
expect(traversal.result).to eq(map_to_no_change(result))
|
24
24
|
end
|
25
25
|
|
26
|
-
it
|
26
|
+
it 'traverses s2 -> s1 correctly' do
|
27
27
|
traversal = balanced_traversal(s2, s1, :balanced_callback_no_change)
|
28
|
-
traversal.result.
|
28
|
+
expect(traversal.result).to eq(map_to_no_change(balanced_reverse(result)))
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
describe "
|
32
|
+
describe "identical string sequences ('abc')" do
|
33
|
+
s1 = s2 = 'abc'
|
34
|
+
|
35
|
+
result = [
|
36
|
+
['=', 0, 0],
|
37
|
+
['=', 1, 1],
|
38
|
+
['=', 2, 2]
|
39
|
+
]
|
40
|
+
|
41
|
+
it_has_behavior 'with a #change callback', s1, s2, result
|
42
|
+
it_has_behavior 'without a #change callback', s1, s2, result
|
43
|
+
end
|
44
|
+
|
45
|
+
describe 'identical array sequences %w(a b c)' do
|
46
|
+
s1 = s2 = %w(a b c)
|
47
|
+
|
48
|
+
result = [
|
49
|
+
['=', 0, 0],
|
50
|
+
['=', 1, 1],
|
51
|
+
['=', 2, 2]
|
52
|
+
]
|
53
|
+
|
54
|
+
it_has_behavior 'with a #change callback', s1, s2, result
|
55
|
+
it_has_behavior 'without a #change callback', s1, s2, result
|
56
|
+
end
|
57
|
+
|
58
|
+
describe 'sequences %w(a b c) & %w(a x c)' do
|
33
59
|
s1 = %w(a b c)
|
34
60
|
s2 = %w(a x c)
|
35
61
|
|
36
62
|
result = [
|
37
|
-
[
|
38
|
-
[
|
39
|
-
[
|
63
|
+
['=', 0, 0],
|
64
|
+
['!', 1, 1],
|
65
|
+
['=', 2, 2]
|
40
66
|
]
|
41
67
|
|
42
|
-
it_has_behavior
|
43
|
-
it_has_behavior
|
68
|
+
it_has_behavior 'with a #change callback', s1, s2, result
|
69
|
+
it_has_behavior 'without a #change callback', s1, s2, result
|
44
70
|
end
|
45
71
|
|
46
|
-
describe
|
72
|
+
describe 'sequences %w(a x y c) & %w(a v w c)' do
|
47
73
|
s1 = %w(a x y c)
|
48
74
|
s2 = %w(a v w c)
|
49
75
|
|
50
76
|
result = [
|
51
|
-
[
|
52
|
-
[
|
53
|
-
[
|
54
|
-
[
|
77
|
+
['=', 0, 0],
|
78
|
+
['!', 1, 1],
|
79
|
+
['!', 2, 2],
|
80
|
+
['=', 3, 3]
|
55
81
|
]
|
56
82
|
|
57
|
-
it_has_behavior
|
58
|
-
it_has_behavior
|
83
|
+
it_has_behavior 'with a #change callback', s1, s2, result
|
84
|
+
it_has_behavior 'without a #change callback', s1, s2, result
|
59
85
|
end
|
60
86
|
|
61
|
-
describe
|
87
|
+
describe 'sequences %w(x y c) & %w(v w c)' do
|
62
88
|
s1 = %w(x y c)
|
63
89
|
s2 = %w(v w c)
|
64
90
|
result = [
|
65
|
-
[
|
66
|
-
[
|
67
|
-
[
|
91
|
+
['!', 0, 0],
|
92
|
+
['!', 1, 1],
|
93
|
+
['=', 2, 2]
|
68
94
|
]
|
69
95
|
|
70
|
-
it_has_behavior
|
71
|
-
it_has_behavior
|
96
|
+
it_has_behavior 'with a #change callback', s1, s2, result
|
97
|
+
it_has_behavior 'without a #change callback', s1, s2, result
|
72
98
|
end
|
73
99
|
|
74
|
-
describe
|
100
|
+
describe 'sequences %w(a x y z) & %w(b v w)' do
|
75
101
|
s1 = %w(a x y z)
|
76
102
|
s2 = %w(b v w)
|
77
103
|
result = [
|
78
|
-
[
|
79
|
-
[
|
80
|
-
[
|
81
|
-
[
|
104
|
+
['!', 0, 0],
|
105
|
+
['!', 1, 1],
|
106
|
+
['!', 2, 2],
|
107
|
+
['<', 3, 3]
|
82
108
|
]
|
83
109
|
|
84
|
-
it_has_behavior
|
85
|
-
it_has_behavior
|
110
|
+
it_has_behavior 'with a #change callback', s1, s2, result
|
111
|
+
it_has_behavior 'without a #change callback', s1, s2, result
|
86
112
|
end
|
87
113
|
|
88
|
-
describe
|
114
|
+
describe 'sequences %w(a z) & %w(a)' do
|
89
115
|
s1 = %w(a z)
|
90
116
|
s2 = %w(a)
|
91
117
|
result = [
|
92
|
-
[
|
93
|
-
[
|
118
|
+
['=', 0, 0],
|
119
|
+
['<', 1, 1]
|
94
120
|
]
|
95
121
|
|
96
|
-
it_has_behavior
|
97
|
-
it_has_behavior
|
122
|
+
it_has_behavior 'with a #change callback', s1, s2, result
|
123
|
+
it_has_behavior 'without a #change callback', s1, s2, result
|
98
124
|
end
|
99
125
|
|
100
|
-
describe
|
126
|
+
describe 'sequences %w(z a) & %w(a)' do
|
101
127
|
s1 = %w(z a)
|
102
128
|
s2 = %w(a)
|
103
129
|
result = [
|
104
|
-
[
|
105
|
-
[
|
130
|
+
['<', 0, 0],
|
131
|
+
['=', 1, 0]
|
106
132
|
]
|
107
133
|
|
108
|
-
it_has_behavior
|
109
|
-
it_has_behavior
|
134
|
+
it_has_behavior 'with a #change callback', s1, s2, result
|
135
|
+
it_has_behavior 'without a #change callback', s1, s2, result
|
110
136
|
end
|
111
137
|
|
112
|
-
describe
|
138
|
+
describe 'sequences %w(a b c) & %w(x y z)' do
|
113
139
|
s1 = %w(a b c)
|
114
140
|
s2 = %w(x y z)
|
115
141
|
result = [
|
116
|
-
[
|
117
|
-
[
|
118
|
-
[
|
142
|
+
['!', 0, 0],
|
143
|
+
['!', 1, 1],
|
144
|
+
['!', 2, 2]
|
119
145
|
]
|
120
146
|
|
121
|
-
it_has_behavior
|
122
|
-
it_has_behavior
|
147
|
+
it_has_behavior 'with a #change callback', s1, s2, result
|
148
|
+
it_has_behavior 'without a #change callback', s1, s2, result
|
123
149
|
end
|
124
150
|
|
125
|
-
describe
|
151
|
+
describe 'sequences %w(abcd efgh ijkl mnoopqrstuvwxyz) & []' do
|
126
152
|
s1 = %w(abcd efgh ijkl mnopqrstuvwxyz)
|
127
153
|
s2 = []
|
128
154
|
result = [
|
129
|
-
[
|
130
|
-
[
|
131
|
-
[
|
132
|
-
[
|
155
|
+
['<', 0, 0],
|
156
|
+
['<', 1, 0],
|
157
|
+
['<', 2, 0],
|
158
|
+
['<', 3, 0]
|
133
159
|
]
|
134
160
|
|
135
|
-
it_has_behavior
|
136
|
-
it_has_behavior
|
161
|
+
it_has_behavior 'with a #change callback', s1, s2, result
|
162
|
+
it_has_behavior 'without a #change callback', s1, s2, result
|
137
163
|
end
|
138
164
|
|
139
|
-
describe
|
140
|
-
s1 =
|
141
|
-
s2 =
|
165
|
+
describe 'strings %q(a b c) & %q(a x c)' do
|
166
|
+
s1 = 'a b c'
|
167
|
+
s2 = 'a x c'
|
142
168
|
|
143
169
|
result = [
|
144
|
-
[
|
145
|
-
[
|
146
|
-
[
|
147
|
-
[
|
148
|
-
[
|
170
|
+
['=', 0, 0],
|
171
|
+
['=', 1, 1],
|
172
|
+
['!', 2, 2],
|
173
|
+
['=', 3, 3],
|
174
|
+
['=', 4, 4]
|
149
175
|
]
|
150
176
|
|
151
|
-
it_has_behavior
|
152
|
-
it_has_behavior
|
177
|
+
it_has_behavior 'with a #change callback', s1, s2, result
|
178
|
+
it_has_behavior 'without a #change callback', s1, s2, result
|
153
179
|
end
|
154
180
|
|
155
|
-
describe
|
156
|
-
s1 =
|
157
|
-
s2 =
|
181
|
+
describe 'strings %q(a x y c) & %q(a v w c)' do
|
182
|
+
s1 = 'a x y c'
|
183
|
+
s2 = 'a v w c'
|
158
184
|
|
159
185
|
result = [
|
160
|
-
[
|
161
|
-
[
|
162
|
-
[
|
163
|
-
[
|
164
|
-
[
|
165
|
-
[
|
166
|
-
[
|
186
|
+
['=', 0, 0],
|
187
|
+
['=', 1, 1],
|
188
|
+
['!', 2, 2],
|
189
|
+
['=', 3, 3],
|
190
|
+
['!', 4, 4],
|
191
|
+
['=', 5, 5],
|
192
|
+
['=', 6, 6]
|
167
193
|
]
|
168
194
|
|
169
|
-
it_has_behavior
|
170
|
-
it_has_behavior
|
195
|
+
it_has_behavior 'with a #change callback', s1, s2, result
|
196
|
+
it_has_behavior 'without a #change callback', s1, s2, result
|
171
197
|
end
|
172
198
|
|
173
|
-
describe
|
174
|
-
s1 =
|
175
|
-
s2 =
|
199
|
+
describe 'strings %q(x y c) & %q(v w c)' do
|
200
|
+
s1 = 'x y c'
|
201
|
+
s2 = 'v w c'
|
176
202
|
result = [
|
177
|
-
[
|
178
|
-
[
|
179
|
-
[
|
180
|
-
[
|
181
|
-
[
|
203
|
+
['!', 0, 0],
|
204
|
+
['=', 1, 1],
|
205
|
+
['!', 2, 2],
|
206
|
+
['=', 3, 3],
|
207
|
+
['=', 4, 4]
|
182
208
|
]
|
183
209
|
|
184
|
-
it_has_behavior
|
185
|
-
it_has_behavior
|
210
|
+
it_has_behavior 'with a #change callback', s1, s2, result
|
211
|
+
it_has_behavior 'without a #change callback', s1, s2, result
|
186
212
|
end
|
187
213
|
|
188
|
-
describe
|
189
|
-
s1 =
|
190
|
-
s2 =
|
214
|
+
describe 'strings %q(a x y z) & %q(b v w)' do
|
215
|
+
s1 = 'a x y z'
|
216
|
+
s2 = 'b v w'
|
191
217
|
result = [
|
192
|
-
[
|
193
|
-
[
|
194
|
-
[
|
195
|
-
[
|
196
|
-
[
|
197
|
-
[
|
198
|
-
[
|
218
|
+
['!', 0, 0],
|
219
|
+
['=', 1, 1],
|
220
|
+
['!', 2, 2],
|
221
|
+
['=', 3, 3],
|
222
|
+
['!', 4, 4],
|
223
|
+
['<', 5, 5],
|
224
|
+
['<', 6, 5]
|
199
225
|
]
|
200
226
|
|
201
|
-
it_has_behavior
|
202
|
-
it_has_behavior
|
227
|
+
it_has_behavior 'with a #change callback', s1, s2, result
|
228
|
+
it_has_behavior 'without a #change callback', s1, s2, result
|
203
229
|
end
|
204
230
|
|
205
|
-
describe
|
206
|
-
s1 =
|
207
|
-
s2 =
|
231
|
+
describe 'strings %q(a z) & %q(a)' do
|
232
|
+
s1 = 'a z'
|
233
|
+
s2 = 'a'
|
208
234
|
result = [
|
209
|
-
[
|
210
|
-
[
|
211
|
-
[
|
235
|
+
['=', 0, 0],
|
236
|
+
['<', 1, 1],
|
237
|
+
['<', 2, 1]
|
212
238
|
]
|
213
239
|
|
214
|
-
it_has_behavior
|
215
|
-
it_has_behavior
|
240
|
+
it_has_behavior 'with a #change callback', s1, s2, result
|
241
|
+
it_has_behavior 'without a #change callback', s1, s2, result
|
216
242
|
end
|
217
243
|
|
218
|
-
describe
|
219
|
-
s1 =
|
220
|
-
s2 =
|
244
|
+
describe 'strings %q(z a) & %q(a)' do
|
245
|
+
s1 = 'z a'
|
246
|
+
s2 = 'a'
|
221
247
|
result = [
|
222
|
-
[
|
223
|
-
[
|
224
|
-
[
|
248
|
+
['<', 0, 0],
|
249
|
+
['<', 1, 0],
|
250
|
+
['=', 2, 0]
|
225
251
|
]
|
226
252
|
|
227
|
-
it_has_behavior
|
228
|
-
it_has_behavior
|
253
|
+
it_has_behavior 'with a #change callback', s1, s2, result
|
254
|
+
it_has_behavior 'without a #change callback', s1, s2, result
|
229
255
|
end
|
230
256
|
|
231
|
-
describe
|
232
|
-
s1 =
|
233
|
-
s2 =
|
257
|
+
describe 'strings %q(a b c) & %q(x y z)' do
|
258
|
+
s1 = 'a b c'
|
259
|
+
s2 = 'x y z'
|
234
260
|
result = [
|
235
|
-
[
|
236
|
-
[
|
237
|
-
[
|
238
|
-
[
|
239
|
-
[
|
261
|
+
['!', 0, 0],
|
262
|
+
['=', 1, 1],
|
263
|
+
['!', 2, 2],
|
264
|
+
['=', 3, 3],
|
265
|
+
['!', 4, 4]
|
240
266
|
]
|
241
267
|
|
242
|
-
it_has_behavior
|
243
|
-
it_has_behavior
|
268
|
+
it_has_behavior 'with a #change callback', s1, s2, result
|
269
|
+
it_has_behavior 'without a #change callback', s1, s2, result
|
244
270
|
end
|
245
271
|
|
246
|
-
describe
|
247
|
-
s1 =
|
248
|
-
s2 =
|
272
|
+
describe 'strings %q(abcd efgh ijkl mnopqrstuvwxyz) & %q()' do
|
273
|
+
s1 = 'abcd efgh ijkl mnopqrstuvwxyz'
|
274
|
+
s2 = ''
|
249
275
|
result = [
|
250
|
-
[
|
251
|
-
[
|
252
|
-
[
|
253
|
-
[
|
254
|
-
[
|
255
|
-
[
|
256
|
-
[
|
257
|
-
[
|
258
|
-
[
|
259
|
-
[
|
260
|
-
[
|
261
|
-
[
|
262
|
-
[
|
263
|
-
[
|
264
|
-
[
|
265
|
-
[
|
266
|
-
[
|
267
|
-
[
|
268
|
-
[
|
269
|
-
[
|
270
|
-
[
|
271
|
-
[
|
272
|
-
[
|
273
|
-
[
|
274
|
-
[
|
275
|
-
[
|
276
|
-
[
|
277
|
-
[
|
278
|
-
[
|
276
|
+
['<', 0, 0],
|
277
|
+
['<', 1, 0],
|
278
|
+
['<', 2, 0],
|
279
|
+
['<', 3, 0],
|
280
|
+
['<', 4, 0],
|
281
|
+
['<', 5, 0],
|
282
|
+
['<', 6, 0],
|
283
|
+
['<', 7, 0],
|
284
|
+
['<', 8, 0],
|
285
|
+
['<', 9, 0],
|
286
|
+
['<', 10, 0],
|
287
|
+
['<', 11, 0],
|
288
|
+
['<', 12, 0],
|
289
|
+
['<', 13, 0],
|
290
|
+
['<', 14, 0],
|
291
|
+
['<', 15, 0],
|
292
|
+
['<', 16, 0],
|
293
|
+
['<', 17, 0],
|
294
|
+
['<', 18, 0],
|
295
|
+
['<', 19, 0],
|
296
|
+
['<', 20, 0],
|
297
|
+
['<', 21, 0],
|
298
|
+
['<', 22, 0],
|
299
|
+
['<', 23, 0],
|
300
|
+
['<', 24, 0],
|
301
|
+
['<', 25, 0],
|
302
|
+
['<', 26, 0],
|
303
|
+
['<', 27, 0],
|
304
|
+
['<', 28, 0]
|
279
305
|
]
|
280
306
|
|
281
|
-
it_has_behavior
|
282
|
-
it_has_behavior
|
307
|
+
it_has_behavior 'with a #change callback', s1, s2, result
|
308
|
+
it_has_behavior 'without a #change callback', s1, s2, result
|
283
309
|
end
|
284
310
|
end
|
285
|
-
|
286
|
-
# vim: ft=ruby
|