package osm.surveyor.matchtime;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import org.apache.commons.codec.digest.DigestUtils;
import org.junit.experimental.theories.DataPoints;
public class Fixture {
String[] args;
String[] ans;
HashMap<String, File> before;
public Fixture(
String[] args,
String[] ans
) {
this.args = args;
this.ans = ans;
this.before = new HashMap<>();
}
/**
* フォルダ内のファイルとファイルのMD5リストを作成
* @param dir
* @return
*/
public void setUp() throws IOException {
if (args.length > 0) {
String dirPath = args[0];
File[] files = Paths.get(dirPath).toFile().listFiles();
for (File f : files) {
FileInputStream fis = new FileInputStream(f);
this.before.put(DigestUtils.md5Hex(fis), f);
}
}
}
/**
*
* @param imgDir
* @param ans
*/
public void check() {
if (args.length > 5) {
String dirPath = args[0];
File imgDir = Paths.get(dirPath).toFile();
if (this.args.length >= 6) {
imgDir = Paths.get(args[5]).toFile();
}
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
File[] files = imgDir.listFiles();
assertThat(files.length, is(ans.length));
java.util.Arrays.sort(files, (File file1, File file2) -> file1.getName().compareTo(file2.getName()));
int i = 0;
for (File jpgFile : files) {
long msec = jpgFile.lastModified();
String lastModifiedStr = df.format(new Date(msec));
assertThat(lastModifiedStr, is(ans[i]));
i++;
}
}
}
/**
*
* @param map
* @param dir
*/
public void checkUnchanged() {
if (this.args.length < 6) {
return;
}
String outStr = args[5];
Path dir = Paths.get(outStr);
assertThat(Files.isDirectory(dir), is(true));
try {
File[] files = dir.toFile().listFiles();
assertThat(files.length, is(this.before.size()));
for (String key : this.before.keySet()) {
File sfile = this.before.get(key);
Path ofile = Paths.get(dir.toString(), sfile.getName());
assertNotNull(ofile);
FileInputStream fis = new FileInputStream(ofile.toFile());
String md5 = DigestUtils.md5Hex(fis);
assertThat(key, is(md5));
}
}
catch (Exception e) {
fail();
}
}
@Override
public String toString() {
String msg = "テストパターン";
for (String arg : args) {
msg += String.format("\n%s", arg);
}
return msg;
}
@DataPoints
public static Fixture[] datas = {
new Fixture(
new String[]{},
new String[] {}
),
new Fixture(
new String[]{
"./target/test-classes/images"
},
new String[] {
"2019-09-01 16:26:51 JST",
"2019-09-01 16:26:56 JST",
"2019-09-01 16:27:01 JST",
"2019-09-01 16:27:06 JST",
"2019-09-01 16:27:11 JST",
"2019-09-01 16:27:16 JST",
"2019-09-01 16:27:21 JST",
"2019-09-01 16:27:26 JST",
"2019-09-01 16:27:31 JST"
}
),
new Fixture(
new String[]{
"./target/test-classes/images",
"00001.jpg",
"2019-09-01 16:26:51 JST",
"00003.jpg",
"2019-09-01 16:27:01 JST",
"./target/test-classes/out"
},
new String[] {
"2019-09-01 16:26:51 JST",
"2019-09-01 16:26:56 JST",
"2019-09-01 16:27:01 JST",
"2019-09-01 16:27:06 JST",
"2019-09-01 16:27:11 JST",
"2019-09-01 16:27:16 JST",
"2019-09-01 16:27:21 JST",
"2019-09-01 16:27:26 JST",
"2019-09-01 16:27:31 JST",
}
),
new Fixture(
new String[]{
"./target/test-classes/images",
"00002.jpg",
"2019-09-02 16:26:56 JST",
"00004.jpg",
"2019-09-02 16:27:01 JST"
},
new String[] {
"2019-09-02 16:26:53 JST", // 0.0 sec
"2019-09-02 16:26:56 JST", // 3.0 sec
"2019-09-02 16:26:58 JST", // 2.0 sec
"2019-09-02 16:27:01 JST", // 3.0 sec
"2019-09-02 16:27:03 JST", // 2.0 sec
"2019-09-02 16:27:06 JST", // 3.0 sec
"2019-09-02 16:27:08 JST", // 2.0 sec
"2019-09-02 16:27:11 JST", // 3.0 sec
"2019-09-02 16:27:13 JST", // 2.0 sec
}
),
new Fixture(
new String[]{
"./target/test-classes/images",
"00001.jpg",
"2019-09-03 16:26:53 JST",
"00003.jpg",
"2019-09-03 16:26:58 JST"
},
new String[] {
"2019-09-03 16:26:53 JST", // 0.0
"2019-09-03 16:26:55 JST", // 2.0
"2019-09-03 16:26:58 JST", // 3.0
"2019-09-03 16:27:00 JST", // 2.0
"2019-09-03 16:27:03 JST", // 3.0
"2019-09-03 16:27:05 JST", // 2.0
"2019-09-03 16:27:08 JST", // 3.0
"2019-09-03 16:27:10 JST", // 2.0
"2019-09-03 16:27:13 JST", // 3.0
}
),
// 4
new Fixture(
new String[]{
"./target/test-classes/images",
"00003.jpg",
"2019-09-04 16:26:58 JST",
"00005.jpg",
"2019-09-04 16:27:03 JST"
},
new String[] {
"2019-09-04 16:26:53 JST", // 0.0
"2019-09-04 16:26:55 JST", // 2.0
"2019-09-04 16:26:58 JST", // 3.0
"2019-09-04 16:27:00 JST", // 2.0
"2019-09-04 16:27:03 JST", // 3.0
"2019-09-04 16:27:05 JST", // 2.0
"2019-09-04 16:27:08 JST", // 3.0
"2019-09-04 16:27:10 JST", // 2.0
"2019-09-04 16:27:13 JST", // 3.0
}
),
// 5
new Fixture(
new String[]{
"./target/test-classes/images",
"00003.jpg",
"2019-09-04 16:26:58 JST",
"00005.jpg",
"2019-09-04 16:27:03 JST",
"./target/test-classes/out"
},
new String[] {
"2019-09-04 16:26:53 JST", // 0.0
"2019-09-04 16:26:55 JST", // 2.0
"2019-09-04 16:26:58 JST", // 3.0
"2019-09-04 16:27:00 JST", // 2.0
"2019-09-04 16:27:03 JST", // 3.0
"2019-09-04 16:27:05 JST", // 2.0
"2019-09-04 16:27:08 JST", // 3.0
"2019-09-04 16:27:10 JST", // 2.0
"2019-09-04 16:27:13 JST", // 3.0
}
),
};
}