comparison test/org/tmatesoft/hg/test/TestDiffHelper.java @ 624:507602cb4fb3

FIXMEs and TODOs: pay some technical debt
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Mon, 20 May 2013 20:34:33 +0200
parents 8ed4f4f4f0a6
children 7839ff0bfd78
comparison
equal deleted inserted replaced
623:fedc54356091 624:507602cb4fb3
116 diff.init(new CharSequence("abcefg"), new CharSequence("bcdegh")); 116 diff.init(new CharSequence("abcefg"), new CharSequence("bcdegh"));
117 MatchCollector<CharSequence> mc; 117 MatchCollector<CharSequence> mc;
118 diff.findMatchingBlocks(mc = new MatchCollector<CharSequence>()); 118 diff.findMatchingBlocks(mc = new MatchCollector<CharSequence>());
119 assertEquals(3, mc.matchCount()); // bc, e, g 119 assertEquals(3, mc.matchCount()); // bc, e, g
120 } 120 }
121
122 @Test
123 public void testChangedEOL() {
124 DiffHelper<LineSequence> diffHelper = new DiffHelper<LineSequence>();
125 MatchCollector<LineSequence> mc; DeltaCollector dc;
126 // all lines changed
127 diffHelper.init(newlines("one\ntwo\nthree\n".getBytes()), newlines("one\r\ntwo\r\nthree\r\n".getBytes()));
128 diffHelper.findMatchingBlocks(mc = new MatchCollector<LineSequence>());
129 assertEquals(0, mc.matchCount());
130 diffHelper.findMatchingBlocks(dc = new DeltaCollector());
131 assertEquals(0, dc.unchangedCount());
132 assertEquals(1, dc.deletedCount());
133 assertTrue(dc.deletedLine(0));
134 assertTrue(dc.deletedLine(1));
135 assertTrue(dc.deletedLine(2));
136 assertEquals(1, dc.addedCount());
137 assertTrue(dc.addedLine(0));
138 assertTrue(dc.addedLine(1));
139 assertTrue(dc.addedLine(2));
140 // one line changed
141 diffHelper.init(newlines("one\ntwo\nthree\n".getBytes()), newlines("one\ntwo\r\nthree\n".getBytes()));
142 diffHelper.findMatchingBlocks(mc = new MatchCollector<LineSequence>());
143 assertEquals(2, mc.matchCount());
144 assertTrue(mc.originLineMatched(0));
145 assertTrue(mc.targetLineMatched(0));
146 assertFalse(mc.originLineMatched(1));
147 assertFalse(mc.targetLineMatched(1));
148 assertTrue(mc.originLineMatched(2));
149 assertTrue(mc.targetLineMatched(2));
150 diffHelper.findMatchingBlocks(dc = new DeltaCollector());
151 assertEquals(2, dc.unchangedCount());
152 assertEquals(1, dc.deletedCount());
153 assertTrue(dc.deletedLine(1));
154 assertEquals(1, dc.addedCount());
155 assertTrue(dc.addedLine(1));
156 }
121 157
122 // range is comprised of 3 values, range length always last, range start comes at index o (either 0 or 1) 158 // range is comprised of 3 values, range length always last, range start comes at index o (either 0 or 1)
123 static boolean includes(IntVector ranges, int o, int ln) { 159 static boolean includes(IntVector ranges, int o, int ln) {
124 assert ranges.size() % 3 == 0; 160 assert ranges.size() % 3 == 0;
125 for (int i = 2; i < ranges.size(); o += 3, i+=3) { 161 for (int i = 2; i < ranges.size(); o += 3, i+=3) {
186 @Override 222 @Override
187 protected void unchanged(int s1From, int s2From, int length) { 223 protected void unchanged(int s1From, int s2From, int length) {
188 same.add(s1From, s2From, length); 224 same.add(s1From, s2From, length);
189 } 225 }
190 226
227 // return number of regions that didn't change
191 int unchangedCount() { 228 int unchangedCount() {
192 return same.size() / 3; 229 return same.size() / 3;
193 } 230 }
194 231
232 // return number of added regions
195 int addedCount() { 233 int addedCount() {
196 return added.size() / 3; 234 return added.size() / 3;
197 } 235 }
198 236 // return number of deleted regions
199 int deletedCount() { 237 int deletedCount() {
200 return deleted.size() / 3; 238 return deleted.size() / 3;
201 } 239 }
240 // answer if 0-based line is marked as added
202 boolean addedLine(int ln) { 241 boolean addedLine(int ln) {
203 return includes(added, 1, ln); 242 return includes(added, 1, ln);
204 } 243 }
244 // answer if 0-based line is marked as deleted
205 boolean deletedLine(int ln) { 245 boolean deletedLine(int ln) {
206 return includes(deleted, 1, ln); 246 return includes(deleted, 1, ln);
207 } 247 }
208 } 248 }
209 } 249 }