/*
* Copyright (C) 2010.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 or
* version 2 as published by the Free Software Foundation.
*
* 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 Public License for more details.
*/
package func.style;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import uk.me.parabola.mkgmap.main.StyleTester;
import func.lib.TestUtils;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* A set of tests written as files, using the StyleTester.
*/
public class ScriptedStyleTest {
private OutputStream output;
/**
* This is to check that the tests are working. Run a test that fails
* on purpose to check that we can detect this.
*/
@Test
public void failureTest() {
TestUtils.registerFile("styletester.style");
StyleTester.runSimpleTest("test/resources/rules/fails-on-purpose.fail");
String result = output.toString();
assertTrue("failure check", result.contains("ERROR"));
}
/**
* This is really a whole bunch of tests as we find test files in a
* directory and run each one in turn.
*/
@Test
public void testAllRuleFiles() throws IOException {
File d = new File("test/resources/rules/");
assertTrue(d.isDirectory());
// Only run files ending in .test
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
if (name.endsWith(".test"))
return true;
return false;
}
};
int count = 0;
File[] files = d.listFiles(filter);
for (File file : files) {
setup();
String name = file.getCanonicalPath();
StyleTester.runSimpleTest(name);
String result = output.toString();
// Make sure that the result does not contain an error
if (result.contains("ERROR")) {
System.out.println(result);
assertFalse(name, true);
}
// make sure that the output was reasonable (and not 'cannot open
// file', for example).
assertTrue(name, result.contains("WAY 1:"));
count++;
}
// Check that some tests were run (ie. it will fail if you just delete
// them all).
assertTrue("tests run", count >= 3);
}
@Before
public void setup() {
output = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(output);
StyleTester.setOut(ps);
// Make sure that there is a given result set
StyleTester.forceUseOfGiven(true);
}
}