docdiff 0.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.
Files changed (73) hide show
  1. data/.gitignore +6 -0
  2. data/.travis.yml +7 -0
  3. data/Gemfile +17 -0
  4. data/Guardfile +8 -0
  5. data/Makefile +108 -0
  6. data/Rakefile +17 -0
  7. data/bin/docdiff +179 -0
  8. data/devutil/JIS0208.TXT +6952 -0
  9. data/devutil/char_by_charclass.rb +23 -0
  10. data/devutil/charclass_by_char.rb +21 -0
  11. data/devutil/jis0208.rb +343 -0
  12. data/devutil/testjis0208.rb +38 -0
  13. data/docdiff.conf.example +22 -0
  14. data/docdiff.gemspec +23 -0
  15. data/docdiffwebui.cgi +176 -0
  16. data/docdiffwebui.html +123 -0
  17. data/img/docdiff-screenshot-format-html-digest-firefox.png +0 -0
  18. data/img/docdiff-screenshot-format-html-firefox.png +0 -0
  19. data/img/docdiff-screenshot-format-tty-cmdexe-en.png +0 -0
  20. data/img/docdiff-screenshot-format-tty-cmdexe-ja.png +0 -0
  21. data/img/docdiff-screenshot-format-tty-rxvtunicode-en.png +0 -0
  22. data/img/docdiff-screenshot-format-tty-rxvtunicode-ja.png +0 -0
  23. data/img/docdiff-screenshot-format-tty-xterm-en.png +0 -0
  24. data/img/docdiff-screenshot-format-tty-xterm-ja.png +0 -0
  25. data/img/docdiff-screenshot-resolution-linewordchar-xterm.png +0 -0
  26. data/index.html +181 -0
  27. data/langfilter.rb +14 -0
  28. data/lib/doc_diff.rb +170 -0
  29. data/lib/docdiff.rb +7 -0
  30. data/lib/docdiff/charstring.rb +579 -0
  31. data/lib/docdiff/diff.rb +217 -0
  32. data/lib/docdiff/diff/contours.rb +382 -0
  33. data/lib/docdiff/diff/editscript.rb +148 -0
  34. data/lib/docdiff/diff/rcsdiff.rb +107 -0
  35. data/lib/docdiff/diff/shortestpath.rb +93 -0
  36. data/lib/docdiff/diff/speculative.rb +40 -0
  37. data/lib/docdiff/diff/subsequence.rb +39 -0
  38. data/lib/docdiff/diff/unidiff.rb +124 -0
  39. data/lib/docdiff/difference.rb +92 -0
  40. data/lib/docdiff/document.rb +127 -0
  41. data/lib/docdiff/encoding/en_ascii.rb +97 -0
  42. data/lib/docdiff/encoding/ja_eucjp.rb +269 -0
  43. data/lib/docdiff/encoding/ja_sjis.rb +260 -0
  44. data/lib/docdiff/encoding/ja_utf8.rb +6974 -0
  45. data/lib/docdiff/version.rb +3 -0
  46. data/lib/docdiff/view.rb +476 -0
  47. data/lib/viewdiff.rb +375 -0
  48. data/readme.html +713 -0
  49. data/sample/01.en.ascii.cr +1 -0
  50. data/sample/01.en.ascii.crlf +2 -0
  51. data/sample/01.en.ascii.lf +2 -0
  52. data/sample/01.ja.eucjp.lf +2 -0
  53. data/sample/01.ja.sjis.cr +1 -0
  54. data/sample/01.ja.sjis.crlf +2 -0
  55. data/sample/01.ja.utf8.crlf +2 -0
  56. data/sample/02.en.ascii.cr +1 -0
  57. data/sample/02.en.ascii.crlf +2 -0
  58. data/sample/02.en.ascii.lf +2 -0
  59. data/sample/02.ja.eucjp.lf +2 -0
  60. data/sample/02.ja.sjis.cr +1 -0
  61. data/sample/02.ja.sjis.crlf +2 -0
  62. data/sample/02.ja.utf8.crlf +2 -0
  63. data/sample/humpty_dumpty01.ascii.lf +4 -0
  64. data/sample/humpty_dumpty02.ascii.lf +4 -0
  65. data/test/charstring_test.rb +1008 -0
  66. data/test/diff_test.rb +36 -0
  67. data/test/difference_test.rb +64 -0
  68. data/test/docdiff_test.rb +193 -0
  69. data/test/document_test.rb +626 -0
  70. data/test/test_helper.rb +7 -0
  71. data/test/view_test.rb +570 -0
  72. data/test/viewdiff_test.rb +908 -0
  73. metadata +129 -0
@@ -0,0 +1,7 @@
1
+ # -*- coding: utf-8 -*-
2
+ begin
3
+ # FIXME: "invalid byte sequence in UTF-8 (ArgumentError)" will be raised.
4
+ require 'simplecov'
5
+ SimpleCov.start
6
+ rescue LoadError
7
+ end
@@ -0,0 +1,570 @@
1
+ #!/usr/bin/ruby
2
+ # -*- coding: euc-jp; -*-
3
+ require 'test/unit'
4
+ require 'docdiff/view'
5
+ require 'docdiff/difference'
6
+ require 'nkf'
7
+
8
+ class TC_View < Test::Unit::TestCase
9
+
10
+ def setup()
11
+ #
12
+ end
13
+
14
+ def test_scan_lines_cr()
15
+ str = "A\r\rA\n\nA\r\n\r\nA\n\r\n\rA"
16
+ expected = ["A\r", "\r", "A\n\nA\r", "\n\r", "\nA\n\r", "\n\r", "A"]
17
+ actual = str.scan_lines("CR")
18
+ assert_equal(expected, actual)
19
+ end
20
+ def test_scan_lines_lf()
21
+ str = "A\r\rA\n\nA\r\n\r\nA\n\r\n\rA"
22
+ expected = ["A\r\rA\n", "\n", "A\r\n", "\r\n", "A\n", "\r\n", "\rA"]
23
+ actual = str.scan_lines("LF")
24
+ assert_equal(expected, actual)
25
+ end
26
+ def test_scan_lines_crlf()
27
+ str = "A\r\rA\n\nA\r\n\r\nA\n\r\n\rA"
28
+ expected = ["A\r\rA\n\nA\r\n", "\r\n", "A\n\r\n", "\rA"]
29
+ actual = str.scan_lines("CRLF")
30
+ assert_equal(expected, actual)
31
+ end
32
+
33
+ def test_source_lines_cr()
34
+ array1 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\rA".split(//)
35
+ array2 = ["b", "c", "c"]
36
+ difference = Difference.new(array1, array2)
37
+ expected = ["A\r", "\r", "A\n\nA\r", "\n\r", "\nA\n\r", "\n\r", "A"]
38
+ actual = View.new(difference, "US-ASCII", "CR").source_lines
39
+ assert_equal(expected, actual)
40
+ end
41
+ def test_source_lines_cr2()
42
+ array1 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\r".split(//)
43
+ array2 = ["b", "c", "c"]
44
+ difference = Difference.new(array1, array2)
45
+ expected = ["A\r", "\r", "A\n\nA\r", "\n\r", "\nA\n\r", "\n\r"]
46
+ actual = View.new(difference, "US-ASCII", "CR").source_lines
47
+ assert_equal(expected, actual)
48
+ end
49
+ def test_source_lines_lf()
50
+ array1 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\rA".split(//)
51
+ array2 = ["b", "c", "c"]
52
+ difference = Difference.new(array1, array2)
53
+ expected = ["A\r\rA\n", "\n", "A\r\n", "\r\n", "A\n", "\r\n", "\rA"]
54
+ actual = View.new(difference, "US-ASCII", "LF").source_lines
55
+ assert_equal(expected, actual)
56
+ end
57
+ def test_source_lines_lf2()
58
+ array1 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\r".split(//)
59
+ array2 = ["b", "c", "c"]
60
+ difference = Difference.new(array1, array2)
61
+ expected = ["A\r\rA\n", "\n", "A\r\n", "\r\n", "A\n", "\r\n", "\r"]
62
+ actual = View.new(difference, "US-ASCII", "LF").source_lines
63
+ assert_equal(expected, actual)
64
+ end
65
+ def test_source_lines_crlf()
66
+ array1 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\rA".split(//)
67
+ array2 = ["b", "c", "c"]
68
+ difference = Difference.new(array1, array2)
69
+ expected = ["A\r\rA\n\nA\r\n", "\r\n", "A\n\r\n", "\rA"]
70
+ actual = View.new(difference, "US-ASCII", "CRLF").source_lines
71
+ assert_equal(expected, actual)
72
+ end
73
+ def test_source_lines_crlf2()
74
+ array1 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\r".split(//)
75
+ array2 = ["b", "c", "c"]
76
+ difference = Difference.new(array1, array2)
77
+ expected = ["A\r\rA\n\nA\r\n", "\r\n", "A\n\r\n", "\r"]
78
+ actual = View.new(difference, "US-ASCII", "CRLF").source_lines
79
+ assert_equal(expected, actual)
80
+ end
81
+ def test_source_lines_noeol()
82
+ array1 = ["a", "b", "c"]
83
+ array2 = ["b", "c", "c"]
84
+ difference = Difference.new(array1, array2)
85
+ expected = ["abc"]
86
+ actual = View.new(difference, "US-ASCII", nil).source_lines
87
+ assert_equal(expected, actual)
88
+ end
89
+ def test_target_lines_cr()
90
+ array1 = ["a", "b", "\n", "c"]
91
+ array2 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\rA".split(//)
92
+ difference = Difference.new(array1, array2)
93
+ expected = ["A\r", "\r", "A\n\nA\r", "\n\r", "\nA\n\r", "\n\r", "A"]
94
+ actual = View.new(difference, "US-ASCII", "CR").target_lines
95
+ assert_equal(expected, actual)
96
+ end
97
+ def test_target_lines_cr2()
98
+ array1 = ["a", "b", "\n", "c"]
99
+ array2 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\r".split(//)
100
+ difference = Difference.new(array1, array2)
101
+ expected = ["A\r", "\r", "A\n\nA\r", "\n\r", "\nA\n\r", "\n\r"]
102
+ actual = View.new(difference, "US-ASCII", "CR").target_lines
103
+ assert_equal(expected, actual)
104
+ end
105
+ def test_target_lines_lf()
106
+ array1 = ["a", "b", "\n", "c"]
107
+ array2 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\rA".split(//)
108
+ difference = Difference.new(array1, array2)
109
+ expected = ["A\r\rA\n", "\n", "A\r\n", "\r\n", "A\n", "\r\n", "\rA"]
110
+ actual = View.new(difference, "US-ASCII", "LF").target_lines
111
+ assert_equal(expected, actual)
112
+ end
113
+ def test_target_lines_lf2()
114
+ array1 = ["a", "b", "\n", "c"]
115
+ array2 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\r".split(//)
116
+ difference = Difference.new(array1, array2)
117
+ expected = ["A\r\rA\n", "\n", "A\r\n", "\r\n", "A\n", "\r\n", "\r"]
118
+ actual = View.new(difference, "US-ASCII", "LF").target_lines
119
+ assert_equal(expected, actual)
120
+ end
121
+ def test_target_lines_crlf()
122
+ array1 = ["a", "b", "\n", "c"]
123
+ array2 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\rA".split(//)
124
+ difference = Difference.new(array1, array2)
125
+ expected = ["A\r\rA\n\nA\r\n", "\r\n", "A\n\r\n", "\rA"]
126
+ actual = View.new(difference, "US-ASCII", "CRLF").target_lines
127
+ assert_equal(expected, actual)
128
+ end
129
+ def test_target_lines_crlf2()
130
+ array1 = ["a", "b", "\n", "c"]
131
+ array2 = "A\r\rA\n\nA\r\n\r\nA\n\r\n\r".split(//)
132
+ difference = Difference.new(array1, array2)
133
+ expected = ["A\r\rA\n\nA\r\n", "\r\n", "A\n\r\n", "\r"]
134
+ actual = View.new(difference, "US-ASCII", "CRLF").target_lines
135
+ assert_equal(expected, actual)
136
+ end
137
+ def test_target_lines_noeol()
138
+ array1 = ["a", "b", "c"]
139
+ array2 = ["b", "c", "c"]
140
+ difference = Difference.new(array1, array2)
141
+ expected = ["bcc"]
142
+ actual = View.new(difference, "US-ASCII", nil).target_lines
143
+ assert_equal(expected, actual)
144
+ end
145
+
146
+ def test_to_tty_del_add_ascii()
147
+ array1 = ['a', 'b', 'c']
148
+ array2 = ['b', 'c', 'c']
149
+ difference = Difference.new(array1, array2)
150
+ expected = ["\033[7;4;31ma\033[0m",
151
+ "b",
152
+ "\033[7;1;34mc\033[0m",
153
+ "c"]
154
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_tty(nil, false))
155
+ end
156
+ def test_to_tty_change_ascii()
157
+ array1 = ['a', 'b', 'c']
158
+ array2 = ['a', 'x', 'c']
159
+ difference = Difference.new(array1, array2)
160
+ expected = ["a",
161
+ "\033[7;4;33mb\033[0m\033[7;1;32mx\033[0m",
162
+ "c"]
163
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_tty(nil, false))
164
+ end
165
+ def test_to_tty_del_add_ja()
166
+ array1 = ['��', '��', '��']
167
+ array2 = ['��', '��', '��']
168
+ expected = ["\033[7;4;31m��\033[0m",
169
+ "��",
170
+ "\033[7;1;34m��\033[0m",
171
+ "��"]
172
+ assert_equal(expected, View.new(Difference.new(array1, array2), "EUC-JP", nil).to_tty(nil, false))
173
+ assert_equal(expected.collect{|i|NKF.nkf("-s",i)},
174
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-s",i)},
175
+ array2.collect{|i|NKF.nkf("-s",i)}),
176
+ "Shift_JIS", nil).to_tty(nil, false))
177
+ assert_equal(expected.collect{|i|NKF.nkf("-E -w", i)},
178
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-E -w", i)},
179
+ array2.collect{|i|NKF.nkf("-E -w", i)}),
180
+ "UTF-8", nil).to_tty(nil, false))
181
+ end
182
+ def test_to_tty_change_ja()
183
+ array1 = ['��', '��', '��']
184
+ array2 = ['��', '��', '��']
185
+ expected = ["��",
186
+ "\033[7;4;33m��\033[0m\033[7;1;32m��\033[0m",
187
+ "��"]
188
+ assert_equal(expected, View.new(Difference.new(array1, array2), "EUC-JP", nil).to_tty(nil, false))
189
+ assert_equal(expected.collect{|i|NKF.nkf("-s",i)},
190
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-s",i)},
191
+ array2.collect{|i|NKF.nkf("-s",i)}),
192
+ "Shift_JIS", nil).to_tty(nil, false))
193
+ assert_equal(expected.collect{|i|NKF.nkf("-E -w", i)},
194
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-E -w", i)},
195
+ array2.collect{|i|NKF.nkf("-E -w", i)}),
196
+ "UTF-8", nil).to_tty(nil, false))
197
+ end
198
+ def test_to_tty_digest()
199
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"]
200
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"]
201
+ expected = ["----\n",
202
+ "1-2,(1)\n\033[7;4;31ma\nb\033[0mcd\n----\n",
203
+ "(2),1-2\ncd\033[7;1;34mX\nY\033[0me\n\n----\n",
204
+ "3,3\ne\n\033[7;4;33mf\033[0m\033[7;1;32mF\033[0m\n\n----\n"]
205
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").to_tty_digest(nil, false))
206
+ end
207
+ def test_to_tty_digest_multi()
208
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"]
209
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"]
210
+ expected = ["----\n",
211
+ "1-2,(1)\na\nbcd\n\033[7;4;31ma\nb\033[0mcd\n----\n",
212
+ "(2),1-2\ncde\n\ncd\033[7;1;34mX\nY\033[0me\n\n----\n",
213
+ "3,3\ne\n\033[7;4;33mf\033[0m\n\ne\n\033[7;1;32mF\033[0m\n\n----\n"]
214
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").to_tty_digest({:display=>'multi'}, false))
215
+ end
216
+
217
+ def test_to_html_cr_ascii()
218
+ array1 = ['a', "\r"]
219
+ array2 = ['a', "\r"]
220
+ difference = Difference.new(array1, array2)
221
+ expected = ["<span class=\"common\">a<br />\r</span>"]
222
+ assert_equal(expected, View.new(difference, "US-ASCII", "CR").to_html(nil, false))
223
+ end
224
+ def test_to_html_lf_ascii()
225
+ array1 = ['a', "\n"]
226
+ array2 = ['a', "\n"]
227
+ difference = Difference.new(array1, array2)
228
+ expected = ["<span class=\"common\">a<br />\n</span>"]
229
+ assert_equal(expected, View.new(difference, "US-ASCII", "LF").to_html(nil, false))
230
+ end
231
+ def test_to_html_crlf_ascii()
232
+ array1 = ['a', "\r\n"]
233
+ array2 = ['a', "\r\n"]
234
+ difference = Difference.new(array1, array2)
235
+ expected = ["<span class=\"common\">a<br />\r\n</span>"]
236
+ assert_equal(expected, View.new(difference, "US-ASCII", "CRLF").to_html(nil, false))
237
+ end
238
+ def test_to_html_escaping_ascii()
239
+ array1 = ['<>& ']
240
+ array2 = ['<>& ']
241
+ difference = Difference.new(array1, array2)
242
+ expected = ["<span class=\"common\">&lt;&gt;&amp;&nbsp;&nbsp; </span>"]
243
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_html(nil, false))
244
+ end
245
+ def test_to_html_digest()
246
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"]
247
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"]
248
+ expected = ["<ul>",
249
+ "<li class=\"entry\"><p class=\"position\">1-2,(1)</p><blockquote class=\"body\"><p class=\"body\"><span class=\"del\"><del>a<br />\nb</del></span>cd</p></blockquote></li>\n",
250
+ "<li class=\"entry\"><p class=\"position\">(2),1-2</p><blockquote class=\"body\"><p class=\"body\">cd<span class=\"add\"><ins>X<br />\nY</ins></span>e<br />\n</p></blockquote></li>\n",
251
+ "<li class=\"entry\"><p class=\"position\">3,3</p><blockquote class=\"body\"><p class=\"body\">e<br />\n<span class=\"before-change\"><del>f</del></span><span class=\"after-change\"><ins>F</ins></span><br />\n</p></blockquote></li>\n",
252
+ "</ul>"]
253
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").to_html_digest(nil,false))
254
+ end
255
+ def test_to_html_digest_multi()
256
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"]
257
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"]
258
+ expected = ["<ul>",
259
+ "<li class=\"entry\"><p class=\"position\">1-2,(1)</p><blockquote class=\"body\"><p class=\"body\">a<br />\nbcd</p><p class=\"body\"><span class=\"del\"><del>a<br />\nb</del></span>cd</p></blockquote></li>\n",
260
+ "<li class=\"entry\"><p class=\"position\">(2),1-2</p><blockquote class=\"body\"><p class=\"body\">cde<br />\n</p><p class=\"body\">cd<span class=\"add\"><ins>X<br />\nY</ins></span>e<br />\n</p></blockquote></li>\n",
261
+ "<li class=\"entry\"><p class=\"position\">3,3</p><blockquote class=\"body\"><p class=\"body\">e<br />\n<span class=\"before-change\"><del>f</del></span><br />\n</p><p class=\"body\">e<br />\n<span class=\"after-change\"><ins>F</ins></span><br />\n</p></blockquote></li>\n",
262
+ "</ul>"]
263
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").to_html_digest({:display=>'multi'},false))
264
+ end
265
+
266
+ def test_to_html_del_add_ascii()
267
+ array1 = ['a', 'b', 'c']
268
+ array2 = ['b', 'c', 'c']
269
+ difference = Difference.new(array1, array2)
270
+ expected = ['<span class="del"><del>a</del></span>',
271
+ '<span class="common">b</span>',
272
+ '<span class="add"><ins>c</ins></span>',
273
+ '<span class="common">c</span>']
274
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_html(nil, false))
275
+ end
276
+ def test_to_html_change_ascii()
277
+ array1 = ['a', 'b', 'c']
278
+ array2 = ['a', 'x', 'c']
279
+ difference = Difference.new(array1, array2)
280
+ expected = ['<span class="common">a</span>',
281
+ '<span class="before-change"><del>b</del></span><span class="after-change"><ins>x</ins></span>',
282
+ '<span class="common">c</span>']
283
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_html(nil, false))
284
+ end
285
+ def test_to_html_del_add_ja()
286
+ array1 = ['��', '��', '��']
287
+ array2 = ['��', '��', '��']
288
+ expected = ['<span class="del"><del>��</del></span>',
289
+ '<span class="common">��</span>',
290
+ '<span class="add"><ins>��</ins></span>',
291
+ '<span class="common">��</span>']
292
+ assert_equal(expected, View.new(Difference.new(array1, array2), "EUC-JP", nil).to_html(nil, false))
293
+ assert_equal(expected.collect{|i|NKF.nkf("-s",i)},
294
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-s",i)},
295
+ array2.collect{|i|NKF.nkf("-s",i)}),
296
+ "Shift_JIS", nil).to_html(nil, false))
297
+ assert_equal(expected.collect{|i|NKF.nkf("-E -w", i)},
298
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-E -w", i)},
299
+ array2.collect{|i|NKF.nkf("-E -w", i)}),
300
+ "UTF-8", nil).to_html(nil, false))
301
+ end
302
+ def test_to_html_change_ja()
303
+ array1 = ['��', '��', '��']
304
+ array2 = ['��', '��', '��']
305
+ expected = ['<span class="common">��</span>',
306
+ '<span class="before-change"><del>��</del></span><span class="after-change"><ins>��</ins></span>',
307
+ '<span class="common">��</span>']
308
+ assert_equal(expected, View.new(Difference.new(array1, array2), "EUC-JP", nil).to_html(nil, false))
309
+ assert_equal(expected.collect{|i|NKF.nkf("-s",i)},
310
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-s",i)},
311
+ array2.collect{|i|NKF.nkf("-s",i)}),
312
+ "Shift_JIS", nil).to_html(nil, false))
313
+ assert_equal(expected.collect{|i|NKF.nkf("-E -w", i)},
314
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-E -w", i)},
315
+ array2.collect{|i|NKF.nkf("-E -w", i)}),
316
+ "UTF-8", nil).to_html(nil, false))
317
+ end
318
+
319
+ def test_to_manued_del_add_ascii()
320
+ array1 = ['a', 'b', 'c']
321
+ array2 = ['b', 'c', 'c']
322
+ difference = Difference.new(array1, array2)
323
+ expected = ['[a/]',
324
+ 'b',
325
+ '[/c]',
326
+ 'c']
327
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_manued(nil, false))
328
+ end
329
+ def test_to_manued_change_ascii()
330
+ array1 = ['a', 'b', 'c']
331
+ array2 = ['a', 'x', 'c']
332
+ difference = Difference.new(array1, array2)
333
+ expected = ['a',
334
+ '[b/x]',
335
+ 'c']
336
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_manued(nil, false))
337
+ end
338
+ def test_to_manued_del_add_ja()
339
+ array1 = ['��', '��', '��']
340
+ array2 = ['��', '��', '��']
341
+ expected = ['[��/]',
342
+ '��',
343
+ '[/��]',
344
+ '��']
345
+ assert_equal(expected, View.new(Difference.new(array1, array2), "EUC-JP", nil).to_manued(nil, false))
346
+ assert_equal(expected.collect{|i|NKF.nkf("-s",i)},
347
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-s",i)},
348
+ array2.collect{|i|NKF.nkf("-s",i)}),
349
+ "Shift_JIS", nil).to_manued(nil, false))
350
+ assert_equal(expected.collect{|i|NKF.nkf("-E -w", i)},
351
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-E -w", i)},
352
+ array2.collect{|i|NKF.nkf("-E -w", i)}),
353
+ "UTF-8", nil).to_manued(nil, false))
354
+ end
355
+ def test_to_manued_change_ja()
356
+ array1 = ['��', '��', '��']
357
+ array2 = ['��', '��', '��']
358
+ expected = ['��',
359
+ '[��/��]',
360
+ '��']
361
+ assert_equal(expected, View.new(Difference.new(array1, array2), "EUC-JP", nil).to_manued(nil, false))
362
+ assert_equal(expected.collect{|i|NKF.nkf("-s",i)},
363
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-s",i)},
364
+ array2.collect{|i|NKF.nkf("-s",i)}),
365
+ "Shift_JIS", nil).to_manued(nil, false))
366
+ assert_equal(expected.collect{|i|NKF.nkf("-E -w", i)},
367
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-E -w", i)},
368
+ array2.collect{|i|NKF.nkf("-E -w", i)}),
369
+ "UTF-8", nil).to_manued(nil, false))
370
+ end
371
+ def test_to_manued_escaping_ascii()
372
+ array1 = ['a', '[/;]~', 'b', '[/;]~']
373
+ array2 = ['a', '[/;]~', 'b']
374
+ difference = Difference.new(array1, array2)
375
+ expected = ["a~[/;]~~b", "[~[~/~;~]~~/]"]
376
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_manued(nil, false))
377
+ end
378
+ def test_to_manued_digest()
379
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"]
380
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"]
381
+ expected = ["----\n",
382
+ "1-2,(1)\n[a\nb/]cd\n----\n",
383
+ "(2),1-2\ncd[/X\nY]e\n\n----\n",
384
+ "3,3\ne\n[f/F]\n\n----\n"]
385
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").to_manued_digest(nil,false))
386
+ end
387
+ def test_to_manued_digest_multi()
388
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"]
389
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"]
390
+ expected = ["----\n",
391
+ "1-2,(1)\na\nbcd\n[a\nb/]cd\n----\n",
392
+ "(2),1-2\ncde\n\ncd[/X\nY]e\n\n----\n",
393
+ "3,3\ne\n[f/]\n\ne\n[/F]\n\n----\n"]
394
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").to_manued_digest({:display=>'multi'},false))
395
+ end
396
+
397
+ def test_to_wdiff_del_add_ascii()
398
+ array1 = ['a', 'b', 'c']
399
+ array2 = ['b', 'c', 'c']
400
+ difference = Difference.new(array1, array2)
401
+ expected = ['[-a-]',
402
+ 'b',
403
+ '{+c+}',
404
+ 'c']
405
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_wdiff(nil, false))
406
+ end
407
+ def test_to_wdiff_change_ascii()
408
+ array1 = ['a', 'b', 'c']
409
+ array2 = ['a', 'x', 'c']
410
+ difference = Difference.new(array1, array2)
411
+ expected = ['a',
412
+ '[-b-]{+x+}',
413
+ 'c']
414
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_wdiff(nil, false))
415
+ end
416
+ def test_to_wdiff_del_add_ja()
417
+ array1 = ['��', '��', '��']
418
+ array2 = ['��', '��', '��']
419
+ expected = ['[-��-]',
420
+ '��',
421
+ '{+��+}',
422
+ '��']
423
+ assert_equal(expected, View.new(Difference.new(array1, array2), "EUC-JP", nil).to_wdiff(nil, false))
424
+ assert_equal(expected.collect{|i|NKF.nkf("-s",i)},
425
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-s",i)},
426
+ array2.collect{|i|NKF.nkf("-s",i)}),
427
+ "Shift_JIS", nil).to_wdiff(nil, false))
428
+ assert_equal(expected.collect{|i|NKF.nkf("-E -w", i)},
429
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-E -w", i)},
430
+ array2.collect{|i|NKF.nkf("-E -w", i)}),
431
+ "UTF-8", nil).to_wdiff(nil, false))
432
+ end
433
+ def test_to_wdiff_change_ja()
434
+ array1 = ['��', '��', '��']
435
+ array2 = ['��', '��', '��']
436
+ expected = ['��',
437
+ '[-��-]{+��+}',
438
+ '��']
439
+ assert_equal(expected, View.new(Difference.new(array1, array2), "EUC-JP", nil).to_wdiff(nil, false))
440
+ assert_equal(expected.collect{|i|NKF.nkf("-s",i)},
441
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-s",i)},
442
+ array2.collect{|i|NKF.nkf("-s",i)}),
443
+ "Shift_JIS", nil).to_wdiff(nil, false))
444
+ assert_equal(expected.collect{|i|NKF.nkf("-E -w", i)},
445
+ View.new(Difference.new(array1.collect{|i|NKF.nkf("-E -w", i)},
446
+ array2.collect{|i|NKF.nkf("-E -w", i)}),
447
+ "UTF-8", nil).to_wdiff(nil, false))
448
+ end
449
+ def test_to_wdiff_digest()
450
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"]
451
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"]
452
+ expected = ["----\n",
453
+ "1-2,(1)\n[-a\nb-]cd\n----\n",
454
+ "(2),1-2\ncd{+X\nY+}e\n\n----\n",
455
+ "3,3\ne\n[-f-]{+F+}\n\n----\n"]
456
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").to_wdiff_digest(nil,false))
457
+ end
458
+ def test_to_wdiff_digest_multi()
459
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"]
460
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"]
461
+ expected = ["----\n",
462
+ "1-2,(1)\na\nbcd\n[-a\nb-]cd\n----\n",
463
+ "(2),1-2\ncde\n\ncd{+X\nY+}e\n\n----\n",
464
+ "3,3\ne\n[-f-]\n\ne\n{+F+}\n\n----\n"]
465
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").to_wdiff_digest({:display => 'multi'}, false))
466
+ end
467
+
468
+ def test_to_user_del_add_en()
469
+ array1 = ['a', 'b', 'c']
470
+ array2 = ['b', 'c', 'c']
471
+ difference = Difference.new(array1, array2)
472
+ user_tags = {:start_common => '<=>',
473
+ :end_common => '</=>',
474
+ :start_del => '<->',
475
+ :end_del => '</->',
476
+ :start_add => '<+>',
477
+ :end_add => '</+>',
478
+ :start_before_change => '<!->',
479
+ :end_before_change => '</!->',
480
+ :start_after_change => '<!+>',
481
+ :end_after_change => '</!+>'}
482
+ expected = ['<->a</->',
483
+ '<=>b</=>',
484
+ '<+>c</+>',
485
+ '<=>c</=>']
486
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_user(user_tags, false))
487
+ end
488
+ def test_to_user_change_en()
489
+ array1 = ['a', 'b', 'c']
490
+ array2 = ['a', 'x', 'c']
491
+ difference = Difference.new(array1, array2)
492
+ user_tags = {:start_common => '<=>',
493
+ :end_common => '</=>',
494
+ :start_del => '<->',
495
+ :end_del => '</->',
496
+ :start_add => '<+>',
497
+ :end_add => '</+>',
498
+ :start_before_change => '<!->',
499
+ :end_before_change => '</!->',
500
+ :start_after_change => '<!+>',
501
+ :end_after_change => '</!+>'}
502
+ expected = ['<=>a</=>',
503
+ '<!->b</!-><!+>x</!+>',
504
+ '<=>c</=>']
505
+ assert_equal(expected, View.new(difference, "US-ASCII", nil).to_user(user_tags, false))
506
+ end
507
+ def test_to_user_digest()
508
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"]
509
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"]
510
+ user_tags = {:start_common => '<=>',
511
+ :end_common => '</=>',
512
+ :start_del => '<->',
513
+ :end_del => '</->',
514
+ :start_add => '<+>',
515
+ :end_add => '</+>',
516
+ :start_before_change => '<!->',
517
+ :end_before_change => '</!->',
518
+ :start_after_change => '<!+>',
519
+ :end_after_change => '</!+>'}
520
+ expected = ["1-2,(1) <->a\nb</->cd\n",
521
+ "(2),1-2 cd<+>X\nY</+>e\n\n",
522
+ "3,3 e\n<!->f</!-><!+>F</!+>\n\n"]
523
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").to_user_digest(user_tags, false))
524
+ end
525
+ def test_to_user_digest_multi()
526
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"]
527
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"]
528
+ user_tags = {:start_common => '<=>',
529
+ :end_common => '</=>',
530
+ :start_del => '<->',
531
+ :end_del => '</->',
532
+ :start_add => '<+>',
533
+ :end_add => '</+>',
534
+ :start_before_change => '<!->',
535
+ :end_before_change => '</!->',
536
+ :start_after_change => '<!+>',
537
+ :end_after_change => '</!+>',
538
+ :display => 'multi'}
539
+ expected = ["1-2,(1) a\nbcd<->a\nb</->cd\n",
540
+ "(2),1-2 cde\ncd<+>X\nY</+>e\n\n",
541
+ "3,3 e\n<!->f</!->\ne\n<!+>F</!+>\n\n"]
542
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").to_user_digest(user_tags, false))
543
+ end
544
+
545
+ def test_difference_whole()
546
+ array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"] # a \n b c d e \n f \n
547
+ array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"] # c d X \n Y e \n F \n
548
+ expected = [[:del_elt, ["a", "\n", "b"], nil],
549
+ [:common_elt_elt, ["c", "d"], ["c", "d"]],
550
+ [:add_elt, nil, ["X", "\n", "Y"]],
551
+ [:common_elt_elt, ["e", "\n"], ["e", "\n"]],
552
+ [:change_elt, ["f"], ["F"]],
553
+ [:common_elt_elt, ["\n"], ["\n"]]]
554
+ assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").difference_whole)
555
+ end
556
+
557
+ # def test_difference_digest()
558
+ # array1 = ["a", "\n", "b", "c", "d", "e", "\n", "f", "\n"] # a \n b c d e \n f \n
559
+ # array2 = ["c", "d", "X", "\n", "Y", "e", "\n", "F", "\n"] # c d X \n Y e \n F \n
560
+ # expected = [
561
+ # # something
562
+ # ]
563
+ # assert_equal(expected, View.new(Difference.new(array1, array2), "US-ASCII", "LF").difference_digest)
564
+ # end
565
+
566
+ def teardown()
567
+ #
568
+ end
569
+
570
+ end