/
FileAsserts.java
145 lines (134 loc) · 5.37 KB
/
FileAsserts.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/*
* #%L
* Netarchivesuite - common - test
* %%
* Copyright (C) 2005 - 2018 The Royal Danish Library,
* the National Library of France and the Austrian National Library.
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 2.1 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Lesser Public License for more details.
*
* You should have received a copy of the GNU General Lesser Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/lgpl-2.1.html>.
* #L%
*/
package dk.netarkivet.testutils;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Pattern;
import org.hamcrest.CoreMatchers;
import org.hamcrest.core.IsNot;
import org.junit.Assert;
import dk.netarkivet.common.utils.FileUtils;
import junit.framework.TestCase;
/**
* Utility functions for asserting statements about files. Notice that using these may cause the files to be re-read
* several times. This ought to be cheap, but may not be for big files.
*/
public class FileAsserts {
/**
* Assert that a given string exists in the file. If it doesn't, fail and print the file contents. If the file
* couldn't be read, fail and print the error message.
*
* @param msg An explanatory message.
* @param str A string to find in the file.
* @param file A file to scan.
*/
public static void assertFileContains(String msg, String str, File file) {
try {
String contents = FileUtils.readFile(file);
// http://stackoverflow.com/a/1092241/53897
Assert.assertThat(contents, CoreMatchers.containsString(str));
} catch (IOException e) {
TestCase.fail("Should be able to read " + file + ", but got " + e);
}
}
/**
* Assert that a given pattern has a match in the file. If it doesn't, fail and print the file contents. If the file
* couldn't be read, fail and print the error message.
*
* @param msg An explanatory message.
* @param regexp A pattern to search for in the file.
* @param file A file to scan.
*/
public static void assertFileMatches(String msg, String regexp, File file) {
try {
String contents = FileUtils.readFile(file);
Pattern pattern = Pattern.compile(regexp, Pattern.MULTILINE);
// https://github.com/derari/cthul/wiki/Matchers#string-matchers
Assert.assertThat(contents, org.cthul.matchers.CthulMatchers.containsPattern(pattern));
} catch (IOException e) {
TestCase.fail("Should be able to read " + file + ", but got " + e);
}
}
/**
* Assert that a given string exists in the file. If it doesn't, fail and print the file contents. If the file
* couldn't be read, fail and print the error message.
*
* @param msg An explanatory message.
* @param file A file to scan.
* @param str A string to find in the file.
*/
public static void assertFileNotContains(String msg, File file, String str) {
try {
String contents = FileUtils.readFile(file);
// http://stackoverflow.com/a/1092241/53897
Assert.assertThat(contents, IsNot.not(CoreMatchers.containsString(str)));
} catch (IOException e) {
TestCase.fail("Should be able to read " + file + ", but got " + e);
}
}
/**
* Assert that a given file has the expected number of lines If it doesn't, fail and print the file contents. If the
* file couldn't be read, fail and print the error message.
*
* @param msg an explanatory message
* @param file the File to check
* @param n the expected number of lines
*/
public static void assertFileNumberOfLines(String msg, File file, int n) {
try {
BufferedReader r = new BufferedReader(new FileReader(file));
int i = 0;
String line = "";
while (line != null) {
line = r.readLine();
if (line != null) {
i++;
}
}
if (i != n) {
TestCase.fail(msg + ": Expected " + n + " lines in " + file + " but found only " + i);
}
r.close();
} catch (IOException e) {
TestCase.fail(msg + ": Couldn't read " + file + ", got " + e);
}
}
/**
* Assert that a given file contains exactly the string given. This will read the given file's contents into a
* string.
*
* @param msg An explanatory message
* @param toMatch The string that should be the full contents of the file
* @param file The file that the string should be in.
*/
public static void assertFileContainsExactly(String msg, String toMatch, File file) {
try {
String contents = FileUtils.readFile(file);
TestCase.assertEquals(msg, toMatch, contents);
} catch (IOException e) {
TestCase.fail("Should be able to read " + file + ", but got " + e);
}
}
}