From 5420eb53071b9edff14e15905b7367536c4c6792 Mon Sep 17 00:00:00 2001 From: lukas-123 Date: Sat, 30 May 2015 15:43:09 +0200 Subject: [PATCH 1/7] Added counter for failed cases --- Testing/Test.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/Testing/Test.java b/Testing/Test.java index a9fa4b0..159c989 100644 --- a/Testing/Test.java +++ b/Testing/Test.java @@ -4,8 +4,10 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; -import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; import java.util.Scanner; +import java.util.Set; import java.util.stream.Stream; @@ -25,13 +27,20 @@ public Test(String dir, TestFunction t) { public void testAll(){ String[] data = new File(directory).list(); data = Stream.of(data).filter(s -> s.contains(".in")).toArray(size -> new String[size]); + Set badRuns = new HashSet(); for(String e : data){ e = e.replace(".in", ""); System.out.println("------------------------\n" + "Case "+e+"\n" + "------------------------"); - if(!testCase(e)) break; + if(!testCase(e)) { + badRuns.add(e); + } } + + System.out.println("\nTests successful: " + (data.length - badRuns.size()) + "/" + data.length); + System.out.println("Failed Tests: " + badRuns.toString()); + } public boolean testCase(String name){ @@ -69,10 +78,10 @@ private String getCorrectOutput(String filename){ System.out.println("File not found: "+filename); } Scanner s = new Scanner(r); - String correctOutput = ""; - while(s.hasNext()) correctOutput += s.nextLine(); + StringBuilder correctOutput = new StringBuilder(); + while(s.hasNext()) { correctOutput.append(s.nextLine());} s.close(); - return correctOutput; + return correctOutput.toString(); } From 476a204bc31ec21978ede9ecc8f204a275fbdc40 Mon Sep 17 00:00:00 2001 From: lukas-123 Date: Sun, 7 Jun 2015 23:10:45 +0200 Subject: [PATCH 2/7] Added a logger --- Testing/Main.java | 2 +- Testing/StreamHandler.java | 5 +- Testing/Test.java | 203 +++++++++++++++++++++++-------------- 3 files changed, 131 insertions(+), 79 deletions(-) diff --git a/Testing/Main.java b/Testing/Main.java index 446d402..dc91a06 100644 --- a/Testing/Main.java +++ b/Testing/Main.java @@ -2,7 +2,7 @@ public class Main { public static void main(String[] args){ - Test t = new Test("~FOLDERNAME~", () -> ~PACKAGENAME~.Program.main(new String[]{})); + Test t = new Test("Test", () -> ~Fill~.Program.main(new String[]{})); t.testAll(); } } diff --git a/Testing/StreamHandler.java b/Testing/StreamHandler.java index fbb1157..0ae474f 100644 --- a/Testing/StreamHandler.java +++ b/Testing/StreamHandler.java @@ -4,14 +4,15 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; import java.io.InputStream; -import java.io.OutputStream; import java.io.PrintStream; import java.io.UnsupportedEncodingException; public class StreamHandler{ private static final InputStream sIn = System.in; - public static final PrintStream out = System.out; + protected static final PrintStream out = System.out; public static ByteArrayOutputStream setOutputStream(int i){ diff --git a/Testing/Test.java b/Testing/Test.java index 159c989..85f7c61 100644 --- a/Testing/Test.java +++ b/Testing/Test.java @@ -4,89 +4,140 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; -import java.util.HashMap; import java.util.HashSet; import java.util.Scanner; import java.util.Set; +import java.util.logging.Formatter; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.logging.SimpleFormatter; import java.util.stream.Stream; +public class Test +{ + private int testAmount; + private String directory; + private TestFunction testFunc; + private static ByteArrayOutputStream generatedOutputStream = new ByteArrayOutputStream(); + private final static Logger LOGGER = Logger.getLogger(Test.class.getName()); -public class Test { - private int testAmount; - private String directory; - private TestFunction testFunc; - private static ByteArrayOutputStream generatedOutputStream = new ByteArrayOutputStream(); - - public Test(String dir, TestFunction t) { - testAmount = new File(dir).list().length/2; - directory = dir; - testFunc = t; - } - - - public void testAll(){ - String[] data = new File(directory).list(); - data = Stream.of(data).filter(s -> s.contains(".in")).toArray(size -> new String[size]); - Set badRuns = new HashSet(); - for(String e : data){ - e = e.replace(".in", ""); - System.out.println("------------------------\n" - + "Case "+e+"\n" - + "------------------------"); - if(!testCase(e)) { - badRuns.add(e); - } - } - - System.out.println("\nTests successful: " + (data.length - badRuns.size()) + "/" + data.length); - System.out.println("Failed Tests: " + badRuns.toString()); - - } - - public boolean testCase(String name){ - String filenameIn = directory + "/" + name + ".in"; - String filenameOut = directory + "/" + name + ".out"; - StreamHandler.setInputFileStream(filenameIn); - generatedOutputStream = new ByteArrayOutputStream(); - StreamHandler.setOutputStream(generatedOutputStream); - - testFunc.invoke(); - - StreamHandler.resetStreams(); - return checkSolution(filenameOut); - - } - - private boolean checkSolution(String filenameOut){ - //Trim is used to remove any whitespace surrounding the output - String correctOutput = getCorrectOutput(filenameOut).trim().replaceAll("(\\r|\\n|\\r\\n)+", ""); - String generatedOutput = generatedOutputStream.toString().trim().replaceAll("(\\r|\\n|\\r\\n)+", ""); - boolean check = generatedOutput.equals(correctOutput); - - StreamHandler.out.println("Correct Output: "+correctOutput); - StreamHandler.out.println("Generated Output: "+generatedOutput); - StreamHandler.out.println(check); - - return check; - } - - private String getCorrectOutput(String filename){ - FileReader r = null; - try { - r = new FileReader(new File(filename)); - } catch (FileNotFoundException e) { - System.out.println("File not found: "+filename); - } - Scanner s = new Scanner(r); - StringBuilder correctOutput = new StringBuilder(); - while(s.hasNext()) { correctOutput.append(s.nextLine());} - s.close(); - return correctOutput.toString(); - - } + public Test(String dir, TestFunction t) + { + testAmount = new File(dir).list().length / 2; + directory = dir; + testFunc = t; + } + + public void testAll() + { + + LOGGER.addHandler(new java.util.logging.StreamHandler(StreamHandler.out, new SimpleFormatter())); + LOGGER.setUseParentHandlers(false); + LOGGER.entering(Test.class.getName(), "testAll()"); + + long start = System.currentTimeMillis(); + String[] data = new File(directory).list(); + data = Stream.of(data).filter(s -> s.contains(".in")) + .toArray(size -> new String[size]); + Set badRuns = new HashSet(); + for (String e : data) + { + e = e.replace(".in", ""); + LOGGER.log(Level.FINE, "------------------------\n" + "Case " + e + + "\n" + "------------------------"); + if (!testCase(e)) + { + badRuns.add(e); + + } + } + + LOGGER.log(Level.INFO, + "\nTests successful: " + (data.length - badRuns.size()) + "/" + + data.length); + LOGGER.log(Level.INFO, "Failed Tests: " + badRuns.toString()); + long totalTime = System.currentTimeMillis() - start; + LOGGER.log( + Level.INFO, + "Testing took " + totalTime + " ms or " + + Math.round((double) totalTime / 1000) + " s"); + + LOGGER.exiting(Test.class.getName(), "testAll()"); + + } + + public boolean testCase(String name) + { + String filenameIn = directory + "/" + name + ".in"; + String filenameOut = directory + "/" + name + ".out"; + StreamHandler.setInputFileStream(filenameIn); + generatedOutputStream = new ByteArrayOutputStream(); + StreamHandler.setOutputStream(generatedOutputStream); + + try + { + testFunc.invoke(); + } + catch (Exception e) + { + LOGGER.log(Level.SEVERE, "Exception thrown: ", e); + } + + StreamHandler.resetStreams(); + return checkSolution(filenameOut); + + } + + private boolean checkSolution(String filenameOut) + { + // Trim is used to remove any whitespace surrounding the output + String correctOutput = getCorrectOutput(filenameOut).trim().replaceAll( + "(\\r|\\n|\\r\\n)+", ""); + String generatedOutput = generatedOutputStream.toString().trim() + .replaceAll("(\\r|\\n|\\r\\n)+", ""); + boolean check = generatedOutput.equals(correctOutput); + + if (check) + { + LOGGER.log(Level.FINE, "Correct Output: " + correctOutput); + LOGGER.log(Level.FINE, "Generated Output: " + generatedOutput); + LOGGER.log(Level.FINE, "Successful"); + } + else + { + LOGGER.log(Level.INFO, "Correct Output: " + correctOutput); + LOGGER.log(Level.INFO, "Generated Output: " + generatedOutput); + LOGGER.log(Level.INFO, "Fail"); + } + + return check; + } + + private String getCorrectOutput(String filename) + { + FileReader r = null; + try + { + r = new FileReader(new File(filename)); + } + catch (FileNotFoundException e) + { + LOGGER.log(Level.SEVERE, "File not found: " + filename + "\t", e); + } + Scanner s = new Scanner(r); + StringBuilder correctOutput = new StringBuilder(); + while (s.hasNext()) + { + correctOutput.append(s.nextLine()); + } + s.close(); + return correctOutput.toString(); + + } } -interface TestFunction { - public void invoke(); +interface TestFunction +{ + public void invoke(); } From 82b562c803a01107defe1f34b10eb6de3e8032e3 Mon Sep 17 00:00:00 2001 From: lukas-123 Date: Sun, 7 Jun 2015 23:13:11 +0200 Subject: [PATCH 3/7] Revert "Added a logger" This reverts commit 476a204bc31ec21978ede9ecc8f204a275fbdc40. --- Testing/Main.java | 2 +- Testing/StreamHandler.java | 5 +- Testing/Test.java | 203 ++++++++++++++----------------------- 3 files changed, 79 insertions(+), 131 deletions(-) diff --git a/Testing/Main.java b/Testing/Main.java index dc91a06..446d402 100644 --- a/Testing/Main.java +++ b/Testing/Main.java @@ -2,7 +2,7 @@ public class Main { public static void main(String[] args){ - Test t = new Test("Test", () -> ~Fill~.Program.main(new String[]{})); + Test t = new Test("~FOLDERNAME~", () -> ~PACKAGENAME~.Program.main(new String[]{})); t.testAll(); } } diff --git a/Testing/StreamHandler.java b/Testing/StreamHandler.java index 0ae474f..fbb1157 100644 --- a/Testing/StreamHandler.java +++ b/Testing/StreamHandler.java @@ -4,15 +4,14 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; -import java.io.FileWriter; -import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.io.PrintStream; import java.io.UnsupportedEncodingException; public class StreamHandler{ private static final InputStream sIn = System.in; - protected static final PrintStream out = System.out; + public static final PrintStream out = System.out; public static ByteArrayOutputStream setOutputStream(int i){ diff --git a/Testing/Test.java b/Testing/Test.java index 85f7c61..159c989 100644 --- a/Testing/Test.java +++ b/Testing/Test.java @@ -4,140 +4,89 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; +import java.util.HashMap; import java.util.HashSet; import java.util.Scanner; import java.util.Set; -import java.util.logging.Formatter; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.logging.SimpleFormatter; import java.util.stream.Stream; -public class Test -{ - private int testAmount; - private String directory; - private TestFunction testFunc; - private static ByteArrayOutputStream generatedOutputStream = new ByteArrayOutputStream(); - private final static Logger LOGGER = Logger.getLogger(Test.class.getName()); - public Test(String dir, TestFunction t) - { - testAmount = new File(dir).list().length / 2; - directory = dir; - testFunc = t; - } - - public void testAll() - { - - LOGGER.addHandler(new java.util.logging.StreamHandler(StreamHandler.out, new SimpleFormatter())); - LOGGER.setUseParentHandlers(false); - LOGGER.entering(Test.class.getName(), "testAll()"); - - long start = System.currentTimeMillis(); - String[] data = new File(directory).list(); - data = Stream.of(data).filter(s -> s.contains(".in")) - .toArray(size -> new String[size]); - Set badRuns = new HashSet(); - for (String e : data) - { - e = e.replace(".in", ""); - LOGGER.log(Level.FINE, "------------------------\n" + "Case " + e - + "\n" + "------------------------"); - if (!testCase(e)) - { - badRuns.add(e); - - } - } - - LOGGER.log(Level.INFO, - "\nTests successful: " + (data.length - badRuns.size()) + "/" - + data.length); - LOGGER.log(Level.INFO, "Failed Tests: " + badRuns.toString()); - long totalTime = System.currentTimeMillis() - start; - LOGGER.log( - Level.INFO, - "Testing took " + totalTime + " ms or " - + Math.round((double) totalTime / 1000) + " s"); - - LOGGER.exiting(Test.class.getName(), "testAll()"); - - } - - public boolean testCase(String name) - { - String filenameIn = directory + "/" + name + ".in"; - String filenameOut = directory + "/" + name + ".out"; - StreamHandler.setInputFileStream(filenameIn); - generatedOutputStream = new ByteArrayOutputStream(); - StreamHandler.setOutputStream(generatedOutputStream); - - try - { - testFunc.invoke(); - } - catch (Exception e) - { - LOGGER.log(Level.SEVERE, "Exception thrown: ", e); - } - - StreamHandler.resetStreams(); - return checkSolution(filenameOut); - - } - - private boolean checkSolution(String filenameOut) - { - // Trim is used to remove any whitespace surrounding the output - String correctOutput = getCorrectOutput(filenameOut).trim().replaceAll( - "(\\r|\\n|\\r\\n)+", ""); - String generatedOutput = generatedOutputStream.toString().trim() - .replaceAll("(\\r|\\n|\\r\\n)+", ""); - boolean check = generatedOutput.equals(correctOutput); - - if (check) - { - LOGGER.log(Level.FINE, "Correct Output: " + correctOutput); - LOGGER.log(Level.FINE, "Generated Output: " + generatedOutput); - LOGGER.log(Level.FINE, "Successful"); - } - else - { - LOGGER.log(Level.INFO, "Correct Output: " + correctOutput); - LOGGER.log(Level.INFO, "Generated Output: " + generatedOutput); - LOGGER.log(Level.INFO, "Fail"); - } - - return check; - } - - private String getCorrectOutput(String filename) - { - FileReader r = null; - try - { - r = new FileReader(new File(filename)); - } - catch (FileNotFoundException e) - { - LOGGER.log(Level.SEVERE, "File not found: " + filename + "\t", e); - } - Scanner s = new Scanner(r); - StringBuilder correctOutput = new StringBuilder(); - while (s.hasNext()) - { - correctOutput.append(s.nextLine()); - } - s.close(); - return correctOutput.toString(); - - } +public class Test { + private int testAmount; + private String directory; + private TestFunction testFunc; + private static ByteArrayOutputStream generatedOutputStream = new ByteArrayOutputStream(); + + public Test(String dir, TestFunction t) { + testAmount = new File(dir).list().length/2; + directory = dir; + testFunc = t; + } + + + public void testAll(){ + String[] data = new File(directory).list(); + data = Stream.of(data).filter(s -> s.contains(".in")).toArray(size -> new String[size]); + Set badRuns = new HashSet(); + for(String e : data){ + e = e.replace(".in", ""); + System.out.println("------------------------\n" + + "Case "+e+"\n" + + "------------------------"); + if(!testCase(e)) { + badRuns.add(e); + } + } + + System.out.println("\nTests successful: " + (data.length - badRuns.size()) + "/" + data.length); + System.out.println("Failed Tests: " + badRuns.toString()); + + } + + public boolean testCase(String name){ + String filenameIn = directory + "/" + name + ".in"; + String filenameOut = directory + "/" + name + ".out"; + StreamHandler.setInputFileStream(filenameIn); + generatedOutputStream = new ByteArrayOutputStream(); + StreamHandler.setOutputStream(generatedOutputStream); + + testFunc.invoke(); + + StreamHandler.resetStreams(); + return checkSolution(filenameOut); + + } + + private boolean checkSolution(String filenameOut){ + //Trim is used to remove any whitespace surrounding the output + String correctOutput = getCorrectOutput(filenameOut).trim().replaceAll("(\\r|\\n|\\r\\n)+", ""); + String generatedOutput = generatedOutputStream.toString().trim().replaceAll("(\\r|\\n|\\r\\n)+", ""); + boolean check = generatedOutput.equals(correctOutput); + + StreamHandler.out.println("Correct Output: "+correctOutput); + StreamHandler.out.println("Generated Output: "+generatedOutput); + StreamHandler.out.println(check); + + return check; + } + + private String getCorrectOutput(String filename){ + FileReader r = null; + try { + r = new FileReader(new File(filename)); + } catch (FileNotFoundException e) { + System.out.println("File not found: "+filename); + } + Scanner s = new Scanner(r); + StringBuilder correctOutput = new StringBuilder(); + while(s.hasNext()) { correctOutput.append(s.nextLine());} + s.close(); + return correctOutput.toString(); + + } } -interface TestFunction -{ - public void invoke(); +interface TestFunction { + public void invoke(); } From fcbadc8894d64b6107b3a6dbcef1a8225c15de9b Mon Sep 17 00:00:00 2001 From: lukas-123 Date: Sun, 7 Jun 2015 23:15:28 +0200 Subject: [PATCH 4/7] Added Logger --- Testing/StreamHandler.java | 5 +- Testing/Test.java | 203 +++++++++++++++++++++++-------------- 2 files changed, 130 insertions(+), 78 deletions(-) diff --git a/Testing/StreamHandler.java b/Testing/StreamHandler.java index fbb1157..0ae474f 100644 --- a/Testing/StreamHandler.java +++ b/Testing/StreamHandler.java @@ -4,14 +4,15 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; import java.io.InputStream; -import java.io.OutputStream; import java.io.PrintStream; import java.io.UnsupportedEncodingException; public class StreamHandler{ private static final InputStream sIn = System.in; - public static final PrintStream out = System.out; + protected static final PrintStream out = System.out; public static ByteArrayOutputStream setOutputStream(int i){ diff --git a/Testing/Test.java b/Testing/Test.java index 159c989..85f7c61 100644 --- a/Testing/Test.java +++ b/Testing/Test.java @@ -4,89 +4,140 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; -import java.util.HashMap; import java.util.HashSet; import java.util.Scanner; import java.util.Set; +import java.util.logging.Formatter; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.logging.SimpleFormatter; import java.util.stream.Stream; +public class Test +{ + private int testAmount; + private String directory; + private TestFunction testFunc; + private static ByteArrayOutputStream generatedOutputStream = new ByteArrayOutputStream(); + private final static Logger LOGGER = Logger.getLogger(Test.class.getName()); -public class Test { - private int testAmount; - private String directory; - private TestFunction testFunc; - private static ByteArrayOutputStream generatedOutputStream = new ByteArrayOutputStream(); - - public Test(String dir, TestFunction t) { - testAmount = new File(dir).list().length/2; - directory = dir; - testFunc = t; - } - - - public void testAll(){ - String[] data = new File(directory).list(); - data = Stream.of(data).filter(s -> s.contains(".in")).toArray(size -> new String[size]); - Set badRuns = new HashSet(); - for(String e : data){ - e = e.replace(".in", ""); - System.out.println("------------------------\n" - + "Case "+e+"\n" - + "------------------------"); - if(!testCase(e)) { - badRuns.add(e); - } - } - - System.out.println("\nTests successful: " + (data.length - badRuns.size()) + "/" + data.length); - System.out.println("Failed Tests: " + badRuns.toString()); - - } - - public boolean testCase(String name){ - String filenameIn = directory + "/" + name + ".in"; - String filenameOut = directory + "/" + name + ".out"; - StreamHandler.setInputFileStream(filenameIn); - generatedOutputStream = new ByteArrayOutputStream(); - StreamHandler.setOutputStream(generatedOutputStream); - - testFunc.invoke(); - - StreamHandler.resetStreams(); - return checkSolution(filenameOut); - - } - - private boolean checkSolution(String filenameOut){ - //Trim is used to remove any whitespace surrounding the output - String correctOutput = getCorrectOutput(filenameOut).trim().replaceAll("(\\r|\\n|\\r\\n)+", ""); - String generatedOutput = generatedOutputStream.toString().trim().replaceAll("(\\r|\\n|\\r\\n)+", ""); - boolean check = generatedOutput.equals(correctOutput); - - StreamHandler.out.println("Correct Output: "+correctOutput); - StreamHandler.out.println("Generated Output: "+generatedOutput); - StreamHandler.out.println(check); - - return check; - } - - private String getCorrectOutput(String filename){ - FileReader r = null; - try { - r = new FileReader(new File(filename)); - } catch (FileNotFoundException e) { - System.out.println("File not found: "+filename); - } - Scanner s = new Scanner(r); - StringBuilder correctOutput = new StringBuilder(); - while(s.hasNext()) { correctOutput.append(s.nextLine());} - s.close(); - return correctOutput.toString(); - - } + public Test(String dir, TestFunction t) + { + testAmount = new File(dir).list().length / 2; + directory = dir; + testFunc = t; + } + + public void testAll() + { + + LOGGER.addHandler(new java.util.logging.StreamHandler(StreamHandler.out, new SimpleFormatter())); + LOGGER.setUseParentHandlers(false); + LOGGER.entering(Test.class.getName(), "testAll()"); + + long start = System.currentTimeMillis(); + String[] data = new File(directory).list(); + data = Stream.of(data).filter(s -> s.contains(".in")) + .toArray(size -> new String[size]); + Set badRuns = new HashSet(); + for (String e : data) + { + e = e.replace(".in", ""); + LOGGER.log(Level.FINE, "------------------------\n" + "Case " + e + + "\n" + "------------------------"); + if (!testCase(e)) + { + badRuns.add(e); + + } + } + + LOGGER.log(Level.INFO, + "\nTests successful: " + (data.length - badRuns.size()) + "/" + + data.length); + LOGGER.log(Level.INFO, "Failed Tests: " + badRuns.toString()); + long totalTime = System.currentTimeMillis() - start; + LOGGER.log( + Level.INFO, + "Testing took " + totalTime + " ms or " + + Math.round((double) totalTime / 1000) + " s"); + + LOGGER.exiting(Test.class.getName(), "testAll()"); + + } + + public boolean testCase(String name) + { + String filenameIn = directory + "/" + name + ".in"; + String filenameOut = directory + "/" + name + ".out"; + StreamHandler.setInputFileStream(filenameIn); + generatedOutputStream = new ByteArrayOutputStream(); + StreamHandler.setOutputStream(generatedOutputStream); + + try + { + testFunc.invoke(); + } + catch (Exception e) + { + LOGGER.log(Level.SEVERE, "Exception thrown: ", e); + } + + StreamHandler.resetStreams(); + return checkSolution(filenameOut); + + } + + private boolean checkSolution(String filenameOut) + { + // Trim is used to remove any whitespace surrounding the output + String correctOutput = getCorrectOutput(filenameOut).trim().replaceAll( + "(\\r|\\n|\\r\\n)+", ""); + String generatedOutput = generatedOutputStream.toString().trim() + .replaceAll("(\\r|\\n|\\r\\n)+", ""); + boolean check = generatedOutput.equals(correctOutput); + + if (check) + { + LOGGER.log(Level.FINE, "Correct Output: " + correctOutput); + LOGGER.log(Level.FINE, "Generated Output: " + generatedOutput); + LOGGER.log(Level.FINE, "Successful"); + } + else + { + LOGGER.log(Level.INFO, "Correct Output: " + correctOutput); + LOGGER.log(Level.INFO, "Generated Output: " + generatedOutput); + LOGGER.log(Level.INFO, "Fail"); + } + + return check; + } + + private String getCorrectOutput(String filename) + { + FileReader r = null; + try + { + r = new FileReader(new File(filename)); + } + catch (FileNotFoundException e) + { + LOGGER.log(Level.SEVERE, "File not found: " + filename + "\t", e); + } + Scanner s = new Scanner(r); + StringBuilder correctOutput = new StringBuilder(); + while (s.hasNext()) + { + correctOutput.append(s.nextLine()); + } + s.close(); + return correctOutput.toString(); + + } } -interface TestFunction { - public void invoke(); +interface TestFunction +{ + public void invoke(); } From 1fd8606173bce2272c1fed6b987dfe2bfb2354e5 Mon Sep 17 00:00:00 2001 From: lukas-123 Date: Fri, 19 Jun 2015 14:20:25 +0200 Subject: [PATCH 5/7] Added own logging formatter Added a formatter which doesn't logs timestamps --- Testing/LoggingFormatter.java | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Testing/LoggingFormatter.java diff --git a/Testing/LoggingFormatter.java b/Testing/LoggingFormatter.java new file mode 100644 index 0000000..22b4200 --- /dev/null +++ b/Testing/LoggingFormatter.java @@ -0,0 +1,28 @@ +package testing; + +import java.util.logging.LogRecord; +import java.util.logging.SimpleFormatter; + +public class LoggingFormatter extends SimpleFormatter +{ + + @Override + public synchronized String format(LogRecord record) + { + StringBuilder message = new StringBuilder(); + + + message.append(record.getLevel().toString()); + message.append(": "); + message.append(record.getMessage()); + message.append("\n"); + Throwable thrown = record.getThrown(); + if (thrown != null) + { + message.append(record.getThrown()); + } + + return message.toString(); + } + +} From 7cbad4d6baa52bdda8f22f86760de1a44ca191ee Mon Sep 17 00:00:00 2001 From: lukas-123 Date: Fri, 19 Jun 2015 14:23:51 +0200 Subject: [PATCH 6/7] Changed initialization of Logger to static / Changed program to work with command line - application now able to read from location from the whole filesystem - no more hardcoded testfolder location - no more hardcoded main program - Known issues: only works when compiled to .jar file, only works with .class files --- Testing/Main.java | 98 +++++++++++++++++++++++++++++++++++--- Testing/StreamHandler.java | 4 +- Testing/Test.java | 83 +++++++++++++++++++++----------- 3 files changed, 147 insertions(+), 38 deletions(-) diff --git a/Testing/Main.java b/Testing/Main.java index 446d402..a7c2d38 100644 --- a/Testing/Main.java +++ b/Testing/Main.java @@ -1,8 +1,94 @@ -package Testing; +package testing; -public class Main { - public static void main(String[] args){ - Test t = new Test("~FOLDERNAME~", () -> ~PACKAGENAME~.Program.main(new String[]{})); - t.testAll(); - } +import java.io.File; +import java.lang.reflect.Method; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class Main +{ + + private final static Logger LOGGER = Logger.getLogger(Test.class.getName()); + private static Level streamLogLevel = Level.FINE; + private static Level fileLogLevel = Level.ALL; + + static + { + LOGGER.setUseParentHandlers(false); + LOGGER.setLevel(Level.INFO); + java.util.logging.StreamHandler shandler = new java.util.logging.StreamHandler( + StreamHandler.out, new LoggingFormatter()); + LOGGER.addHandler(shandler); + } + + public static void main(String[] args) + { + + if (args.length != 3) + { + LOGGER.log( + Level.SEVERE, + "Invalid Parameters. Syntax: testGAD.jar testFolder programPath packageName.className\n" + + "The testFolder and programPath needs to be a directory. className must be the .class file which" + + "contains the main method of the program to test.\n" + + "Example: java -jar testGAD.jar ./Test ./dhashing dhashing.Program"); + } + else + { + try + { + String testFolder = args[0]; + String programPath = args[1]; + String className = args[2].replace(".class", ""); + + File file = new File(programPath); + + URL url = file.toURI().toURL(); + URL[] urls = new URL[] { url }; + ClassLoader cl = new URLClassLoader(urls); + + Class mainClass = Class.forName(className, true, cl); + Method main = mainClass.getMethod("main", String[].class); + Test test = new Test(testFolder, main); + test.testAll(); + + } + catch (ClassNotFoundException e) + { + LOGGER.log(Level.SEVERE, "Class not found", e); + } + catch (MalformedURLException e) + { + LOGGER.log(Level.SEVERE, + "Invalid path and/or name for program", e); + } + catch (NoSuchMethodException e) + { + LOGGER.log(Level.SEVERE, "main method not found", e); + } + catch (SecurityException e) + { + LOGGER.log(Level.SEVERE, "access to main method denied", e); + } + finally + { + LOGGER.log(Level.INFO, "testGad terminated"); + } + } + + } + + public static Level getStreamLogLevel() + { + return streamLogLevel; + } + + public static Level getFileLogLevel() + { + return fileLogLevel; + } + } diff --git a/Testing/StreamHandler.java b/Testing/StreamHandler.java index 0ae474f..f27e6f4 100644 --- a/Testing/StreamHandler.java +++ b/Testing/StreamHandler.java @@ -1,11 +1,9 @@ -package Testing; +package testing; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; -import java.io.FileWriter; -import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; import java.io.UnsupportedEncodingException; diff --git a/Testing/Test.java b/Testing/Test.java index 85f7c61..26c90cd 100644 --- a/Testing/Test.java +++ b/Testing/Test.java @@ -1,59 +1,77 @@ -package Testing; +package testing; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; +import java.lang.reflect.Method; import java.util.HashSet; import java.util.Scanner; import java.util.Set; -import java.util.logging.Formatter; +import java.util.logging.FileHandler; import java.util.logging.Level; import java.util.logging.Logger; -import java.util.logging.SimpleFormatter; import java.util.stream.Stream; public class Test { - private int testAmount; + private String directory; - private TestFunction testFunc; + private Method main; private static ByteArrayOutputStream generatedOutputStream = new ByteArrayOutputStream(); - private final static Logger LOGGER = Logger.getLogger(Test.class.getName()); - - public Test(String dir, TestFunction t) + private static final Logger LOGGER = Logger.getLogger(Test.class.getName()); + private static final Level failLogLevel = Level.FINE; + private static final Level succLogLevel = Level.FINER; + + static { + LOGGER.setUseParentHandlers(false); + LOGGER.setLevel(Level.ALL); + java.util.logging.StreamHandler shandler= new java.util.logging.StreamHandler(StreamHandler.out, new LoggingFormatter()); + shandler.setLevel(Main.getStreamLogLevel()); + LOGGER.addHandler(shandler); + try + { + FileHandler fhandler = new FileHandler("./results.txt"); + fhandler.setLevel(Main.getFileLogLevel()); + LOGGER.addHandler(fhandler); + } + catch (Exception e) + { + LOGGER.log(Level.WARNING, "Logging to file failed", e); + } + } + + public Test(String dir, Method main) { - testAmount = new File(dir).list().length / 2; + directory = dir; - testFunc = t; + this.main = main; } public void testAll() { - LOGGER.addHandler(new java.util.logging.StreamHandler(StreamHandler.out, new SimpleFormatter())); - LOGGER.setUseParentHandlers(false); - LOGGER.entering(Test.class.getName(), "testAll()"); long start = System.currentTimeMillis(); String[] data = new File(directory).list(); data = Stream.of(data).filter(s -> s.contains(".in")) .toArray(size -> new String[size]); Set badRuns = new HashSet(); - for (String e : data) + for (String caseName : data) { - e = e.replace(".in", ""); - LOGGER.log(Level.FINE, "------------------------\n" + "Case " + e - + "\n" + "------------------------"); - if (!testCase(e)) + caseName = caseName.replace(".in", ""); + if (!testCase(caseName)) { - badRuns.add(e); - + logCase(failLogLevel, caseName); + badRuns.add(caseName); + } + else { + logCase(succLogLevel, caseName); } } LOGGER.log(Level.INFO, - "\nTests successful: " + (data.length - badRuns.size()) + "/" + "Tests successful: " + (data.length - badRuns.size()) + "/" + data.length); LOGGER.log(Level.INFO, "Failed Tests: " + badRuns.toString()); long totalTime = System.currentTimeMillis() - start; @@ -76,11 +94,12 @@ public boolean testCase(String name) try { - testFunc.invoke(); + String[] args = new String[]{}; + main.invoke(main.getDeclaringClass(), (Object)args); } catch (Exception e) { - LOGGER.log(Level.SEVERE, "Exception thrown: ", e); + LOGGER.log(Level.SEVERE, "Exception thrown while invoking main method: ", e); } StreamHandler.resetStreams(); @@ -99,15 +118,15 @@ private boolean checkSolution(String filenameOut) if (check) { - LOGGER.log(Level.FINE, "Correct Output: " + correctOutput); - LOGGER.log(Level.FINE, "Generated Output: " + generatedOutput); - LOGGER.log(Level.FINE, "Successful"); + LOGGER.log(succLogLevel, "Correct Output: " + correctOutput); + LOGGER.log(succLogLevel, "Generated Output: " + generatedOutput); + LOGGER.log(succLogLevel, "Successful"); } else { - LOGGER.log(Level.INFO, "Correct Output: " + correctOutput); - LOGGER.log(Level.INFO, "Generated Output: " + generatedOutput); - LOGGER.log(Level.INFO, "Fail"); + LOGGER.log(failLogLevel, "Correct Output: " + correctOutput); + LOGGER.log(failLogLevel, "Generated Output: " + generatedOutput); + LOGGER.log(failLogLevel, "Fail"); } return check; @@ -134,6 +153,12 @@ private String getCorrectOutput(String filename) return correctOutput.toString(); } + + private void logCase(Level logLevel, String caseName) { + + LOGGER.log(logLevel, "------------------------\n" + "Case " + caseName + + "\n" + "------------------------"); + } } From 048d7ad02edc921901c070783b1089c324912766 Mon Sep 17 00:00:00 2001 From: lukas-123 Date: Fri, 19 Jun 2015 18:35:50 +0200 Subject: [PATCH 7/7] Minor fixes --- Testing/Main.java | 24 ++++++++++++++---------- Testing/Test.java | 4 ++-- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/Testing/Main.java b/Testing/Main.java index a7c2d38..2b6e03d 100644 --- a/Testing/Main.java +++ b/Testing/Main.java @@ -5,6 +5,7 @@ import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; +import java.util.Arrays; import java.util.logging.Level; import java.util.logging.Logger; @@ -14,45 +15,48 @@ public class Main private final static Logger LOGGER = Logger.getLogger(Test.class.getName()); private static Level streamLogLevel = Level.FINE; private static Level fileLogLevel = Level.ALL; + static { LOGGER.setUseParentHandlers(false); - LOGGER.setLevel(Level.INFO); java.util.logging.StreamHandler shandler = new java.util.logging.StreamHandler( StreamHandler.out, new LoggingFormatter()); LOGGER.addHandler(shandler); } - + public static void main(String[] args) { - + + LOGGER.log(Level.INFO, "Parameters: " + Arrays.toString(args)); if (args.length != 3) { LOGGER.log( Level.SEVERE, "Invalid Parameters. Syntax: testGAD.jar testFolder programPath packageName.className\n" + "The testFolder and programPath needs to be a directory. className must be the .class file which" - + "contains the main method of the program to test.\n" + + " contains the main method of the program to test.\n" + "Example: java -jar testGAD.jar ./Test ./dhashing dhashing.Program"); } else { try { - String testFolder = args[0]; - String programPath = args[1]; + File testFolder = new File(args[0]); + File programPath = new File(args[1]); String className = args[2].replace(".class", ""); + + LOGGER.log(Level.INFO,"programPath contains: " + Arrays.toString(programPath.list())); + System.out.println(testFolder.isDirectory() +" "+ programPath.isDirectory() ); - File file = new File(programPath); - - URL url = file.toURI().toURL(); + URL url = programPath.toURI().toURL(); URL[] urls = new URL[] { url }; ClassLoader cl = new URLClassLoader(urls); + Class mainClass = Class.forName(className, true, cl); Method main = mainClass.getMethod("main", String[].class); - Test test = new Test(testFolder, main); + Test test = new Test(testFolder.getAbsolutePath(), main); test.testAll(); } diff --git a/Testing/Test.java b/Testing/Test.java index 26c90cd..6789936 100644 --- a/Testing/Test.java +++ b/Testing/Test.java @@ -19,8 +19,8 @@ public class Test private String directory; private Method main; private static ByteArrayOutputStream generatedOutputStream = new ByteArrayOutputStream(); - private static final Logger LOGGER = Logger.getLogger(Test.class.getName()); - private static final Level failLogLevel = Level.FINE; + private static final Logger LOGGER = Logger.getLogger(Test.class.getName()); + private static final Level failLogLevel = Level.FINE; private static final Level succLogLevel = Level.FINER; static {