1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.dbunit.testutil;
22
23 import java.io.BufferedReader;
24 import java.io.File;
25 import java.io.FileInputStream;
26 import java.io.IOException;
27 import java.io.InputStream;
28 import java.io.InputStreamReader;
29
30 import org.dbunit.assertion.DefaultFailureHandler;
31 import org.dbunit.assertion.JUnitFailureFactory;
32 import org.dbunit.assertion.SimpleAssert;
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 public class FileAsserts
68 {
69 private static final DefaultFailureHandler FAILURE_HANDLER = new DefaultFailureHandler();
70 static{
71 FAILURE_HANDLER.setFailureFactory(new JUnitFailureFactory());
72 }
73 private static final SimpleAssert ASSERT = new SimpleAssert(FAILURE_HANDLER);
74
75
76
77
78 private static final Logger logger = LoggerFactory.getLogger(FileAsserts.class);
79
80 private static String processOneLine(int lineNumber,
81 BufferedReader expectedData,
82 BufferedReader actualData)
83 throws IOException
84 {
85 if(logger.isDebugEnabled())
86 logger.debug("processOneLine(lineNumber={}, expectedData={}, actualData={}) - start",
87 new Object[] {new Integer(lineNumber), expectedData, actualData} );
88
89 String problem = null;
90 String expectedLine = expectedData.readLine();
91 if (!actualData.ready())
92 {
93 problem = "at line " + lineNumber + ", expected:\n" +
94 expectedLine + "\n" +
95 "but actual file was not ready for reading at this line.";
96 }
97 else
98 {
99 String actualLine = actualData.readLine();
100 if (!expectedLine.equals(actualLine))
101 {
102
103 problem = "at line " + lineNumber + " there was a mismatch. Expected:\n";
104 int maxLen = expectedLine.length();
105 if (expectedLine.length() > actualLine.length())
106 {
107 maxLen = actualLine.length();
108 }
109 int startOffset = 0;
110 for (int i = 0; i < maxLen; i++)
111 {
112 if (expectedLine.charAt(i) != actualLine.charAt(i))
113 {
114 startOffset = i;
115 break;
116 }
117 }
118 problem += expectedLine.substring(startOffset) + "\n" +
119 "actual was:\n" +
120 actualLine.substring(startOffset) + "\n";
121 }
122 }
123 return problem;
124 }
125
126 public static void assertEquals(BufferedReader expected,
127 BufferedReader actual) throws Exception
128 {
129 logger.debug("assertEquals(expected={}, actual={}) - start", expected, actual);
130
131 ASSERT.assertNotNull(expected);
132 ASSERT.assertNotNull(actual);
133
134 String problem = null;
135 try
136 {
137 int lineCounter = 0;
138 while (expected.ready() && problem == null)
139 {
140 problem = processOneLine(lineCounter, expected, actual);
141 lineCounter++;
142 }
143 }
144 finally
145 {
146 expected.close();
147 actual.close();
148 }
149
150 if (problem != null)
151 {
152 ASSERT.fail(problem);
153 }
154 }
155
156 public static void assertEquals(InputStream expected, File actual)
157 throws Exception
158 {
159 logger.debug("assertEquals(expected={}, actual={}) - start", expected, actual);
160
161 ASSERT.assertNotNull(expected);
162 ASSERT.assertNotNull(actual);
163
164 ASSERT.assertTrue(actual.canRead());
165
166
167 BufferedReader expectedData = new BufferedReader(new InputStreamReader(expected));
168
169 BufferedReader actualData =
170 new BufferedReader(new InputStreamReader(new FileInputStream(actual)));
171 assertEquals(expectedData, actualData);
172 }
173
174 public static void assertEquals(File expected, File actual) throws Exception
175 {
176 logger.debug("assertEquals(expected={}, actual={}) - start", expected, actual);
177
178 ASSERT.assertNotNull(expected);
179 ASSERT.assertNotNull(actual);
180
181 ASSERT.assertTrue(expected.canRead());
182 ASSERT.assertTrue(actual.canRead());
183
184 BufferedReader expectedData =
185 new BufferedReader(new InputStreamReader(new FileInputStream(expected)));
186 BufferedReader actualData =
187 new BufferedReader(new InputStreamReader(new FileInputStream(actual)));
188 assertEquals(expectedData, actualData);
189 }
190 }
191
192
193