diff --git a/.classpath b/.classpath deleted file mode 100644 index de71593..0000000 --- a/.classpath +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3ae2f4d --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +/build +/nl.jssl.autounit.testclasses.BooleanArguments.xml +/nl.jssl.autounit.testclasses.ByteArguments.xml +/nl.jssl.autounit.testclasses.FloatArguments.xml +/nl.jssl.autounit.testclasses.IntArguments.xml +/nl.jssl.autounit.testclasses.SomeBean.xml +/nl.jssl.autounit.testclasses.StringArguments.xml +/bin +/.settings +/.gradle +/.project +/.classpath diff --git a/.project b/.project deleted file mode 100644 index 0d83f04..0000000 --- a/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - autounit - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 8634861..0000000 --- a/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,95 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore -org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault -org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable -org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning -org.eclipse.jdt.core.compiler.problem.deadCode=warning -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore -org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore -org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=error -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled -org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning -org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore -org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error -org.eclipse.jdt.core.compiler.problem.nullReference=warning -org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error -org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore -org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore -org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore -org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning -org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning -org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore -org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning -org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled -org.eclipse.jdt.core.compiler.problem.unusedImport=warning -org.eclipse.jdt.core.compiler.problem.unusedLabel=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.7 diff --git a/bin/.gitignore b/bin/.gitignore deleted file mode 100644 index 998e0dd..0000000 --- a/bin/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/nl diff --git a/bin/nl/jssl/autounit/AutoTester.class b/bin/nl/jssl/autounit/AutoTester.class deleted file mode 100644 index 41ef729..0000000 Binary files a/bin/nl/jssl/autounit/AutoTester.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/Configuration.class b/bin/nl/jssl/autounit/Configuration.class deleted file mode 100644 index bd5b49e..0000000 Binary files a/bin/nl/jssl/autounit/Configuration.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/CoverageAnalyser.class b/bin/nl/jssl/autounit/CoverageAnalyser.class deleted file mode 100644 index 4f39d4b..0000000 Binary files a/bin/nl/jssl/autounit/CoverageAnalyser.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/ExecutionException.class b/bin/nl/jssl/autounit/ExecutionException.class deleted file mode 100644 index 8169f8b..0000000 Binary files a/bin/nl/jssl/autounit/ExecutionException.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/InAndOutput.class b/bin/nl/jssl/autounit/InAndOutput.class deleted file mode 100644 index 7c2abec..0000000 Binary files a/bin/nl/jssl/autounit/InAndOutput.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/InvocationResult.class b/bin/nl/jssl/autounit/InvocationResult.class deleted file mode 100644 index a1b3320..0000000 Binary files a/bin/nl/jssl/autounit/InvocationResult.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/MethodCallResults.class b/bin/nl/jssl/autounit/MethodCallResults.class deleted file mode 100644 index 1556c99..0000000 Binary files a/bin/nl/jssl/autounit/MethodCallResults.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/MethodcallExecutor.class b/bin/nl/jssl/autounit/MethodcallExecutor.class deleted file mode 100644 index fa13f86..0000000 Binary files a/bin/nl/jssl/autounit/MethodcallExecutor.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/Player.class b/bin/nl/jssl/autounit/Player.class deleted file mode 100644 index 221b5d9..0000000 Binary files a/bin/nl/jssl/autounit/Player.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/PrimtiveTypeTests.class b/bin/nl/jssl/autounit/PrimtiveTypeTests.class deleted file mode 100644 index c9498b4..0000000 Binary files a/bin/nl/jssl/autounit/PrimtiveTypeTests.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/Recorder.class b/bin/nl/jssl/autounit/Recorder.class deleted file mode 100644 index 30d934a..0000000 Binary files a/bin/nl/jssl/autounit/Recorder.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/ResultsWriter.class b/bin/nl/jssl/autounit/ResultsWriter.class deleted file mode 100644 index ec4c1b7..0000000 Binary files a/bin/nl/jssl/autounit/ResultsWriter.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/StringTypeTests.class b/bin/nl/jssl/autounit/StringTypeTests.class deleted file mode 100644 index 9ccc6e9..0000000 Binary files a/bin/nl/jssl/autounit/StringTypeTests.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/inputs/ArgumentsForSingleCall.class b/bin/nl/jssl/autounit/inputs/ArgumentsForSingleCall.class deleted file mode 100644 index 8c5860d..0000000 Binary files a/bin/nl/jssl/autounit/inputs/ArgumentsForSingleCall.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/inputs/BooleanInputsFactory.class b/bin/nl/jssl/autounit/inputs/BooleanInputsFactory.class deleted file mode 100644 index b1a861c..0000000 Binary files a/bin/nl/jssl/autounit/inputs/BooleanInputsFactory.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/inputs/ByteInputsFactory.class b/bin/nl/jssl/autounit/inputs/ByteInputsFactory.class deleted file mode 100644 index bf3a109..0000000 Binary files a/bin/nl/jssl/autounit/inputs/ByteInputsFactory.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/inputs/CombinedInputSetFactory.class b/bin/nl/jssl/autounit/inputs/CombinedInputSetFactory.class deleted file mode 100644 index 06c8dcb..0000000 Binary files a/bin/nl/jssl/autounit/inputs/CombinedInputSetFactory.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/inputs/DoubleInputsFactory.class b/bin/nl/jssl/autounit/inputs/DoubleInputsFactory.class deleted file mode 100644 index 6880abd..0000000 Binary files a/bin/nl/jssl/autounit/inputs/DoubleInputsFactory.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/inputs/FloatInputsFactory.class b/bin/nl/jssl/autounit/inputs/FloatInputsFactory.class deleted file mode 100644 index a6d0f56..0000000 Binary files a/bin/nl/jssl/autounit/inputs/FloatInputsFactory.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/inputs/InputsFactory.class b/bin/nl/jssl/autounit/inputs/InputsFactory.class deleted file mode 100644 index 8c47d97..0000000 Binary files a/bin/nl/jssl/autounit/inputs/InputsFactory.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/inputs/IntegerInputsFactory.class b/bin/nl/jssl/autounit/inputs/IntegerInputsFactory.class deleted file mode 100644 index f32dd9b..0000000 Binary files a/bin/nl/jssl/autounit/inputs/IntegerInputsFactory.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/inputs/LongInputsFactory.class b/bin/nl/jssl/autounit/inputs/LongInputsFactory.class deleted file mode 100644 index 8391c4f..0000000 Binary files a/bin/nl/jssl/autounit/inputs/LongInputsFactory.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/inputs/MocksFactory.class b/bin/nl/jssl/autounit/inputs/MocksFactory.class deleted file mode 100644 index 4ecdfe7..0000000 Binary files a/bin/nl/jssl/autounit/inputs/MocksFactory.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/inputs/SingleTypeInputs.class b/bin/nl/jssl/autounit/inputs/SingleTypeInputs.class deleted file mode 100644 index 338332e..0000000 Binary files a/bin/nl/jssl/autounit/inputs/SingleTypeInputs.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/inputs/StringInputsFactory.class b/bin/nl/jssl/autounit/inputs/StringInputsFactory.class deleted file mode 100644 index c8f14bb..0000000 Binary files a/bin/nl/jssl/autounit/inputs/StringInputsFactory.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/inspect/ConstantpoolReaderTest.class b/bin/nl/jssl/autounit/inspect/ConstantpoolReaderTest.class deleted file mode 100644 index 9b269ae..0000000 Binary files a/bin/nl/jssl/autounit/inspect/ConstantpoolReaderTest.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/testclasses/BooleanArguments.class b/bin/nl/jssl/autounit/testclasses/BooleanArguments.class deleted file mode 100644 index 342052e..0000000 Binary files a/bin/nl/jssl/autounit/testclasses/BooleanArguments.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/testclasses/ByteArguments.class b/bin/nl/jssl/autounit/testclasses/ByteArguments.class deleted file mode 100644 index af5a18b..0000000 Binary files a/bin/nl/jssl/autounit/testclasses/ByteArguments.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/testclasses/FloatArguments.class b/bin/nl/jssl/autounit/testclasses/FloatArguments.class deleted file mode 100644 index 5a1afe3..0000000 Binary files a/bin/nl/jssl/autounit/testclasses/FloatArguments.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/testclasses/IntArguments.class b/bin/nl/jssl/autounit/testclasses/IntArguments.class deleted file mode 100644 index d3b23ca..0000000 Binary files a/bin/nl/jssl/autounit/testclasses/IntArguments.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/testclasses/MethodSignatureMaker.class b/bin/nl/jssl/autounit/testclasses/MethodSignatureMaker.class deleted file mode 100644 index af23300..0000000 Binary files a/bin/nl/jssl/autounit/testclasses/MethodSignatureMaker.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/testclasses/MyMethod.class b/bin/nl/jssl/autounit/testclasses/MyMethod.class deleted file mode 100644 index 5759cf2..0000000 Binary files a/bin/nl/jssl/autounit/testclasses/MyMethod.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/testclasses/StringArguments.class b/bin/nl/jssl/autounit/testclasses/StringArguments.class deleted file mode 100644 index facc8ef..0000000 Binary files a/bin/nl/jssl/autounit/testclasses/StringArguments.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/utils/ArgumentsConverter.class b/bin/nl/jssl/autounit/utils/ArgumentsConverter.class deleted file mode 100644 index 7db3401..0000000 Binary files a/bin/nl/jssl/autounit/utils/ArgumentsConverter.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/utils/ConstantpoolReader.class b/bin/nl/jssl/autounit/utils/ConstantpoolReader.class deleted file mode 100644 index 1dc3161..0000000 Binary files a/bin/nl/jssl/autounit/utils/ConstantpoolReader.class and /dev/null differ diff --git a/bin/nl/jssl/autounit/utils/SilentObjectCreator.class b/bin/nl/jssl/autounit/utils/SilentObjectCreator.class deleted file mode 100644 index 82171f8..0000000 Binary files a/bin/nl/jssl/autounit/utils/SilentObjectCreator.class and /dev/null differ diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..65d6678 --- /dev/null +++ b/build.gradle @@ -0,0 +1,29 @@ +apply plugin: 'java' +apply plugin: 'eclipse' + +repositories{ + mavenCentral() +} + +sourceCompatibility = "1.6" +targetCompatibility = "1.6" + +sourceSets { + test { + java { + srcDir 'src/test/testclasses' + } + } +} + +task wrapper{ +} + +dependencies{ + compile 'javassist:javassist:3.12.1.GA' + compile 'com.thoughtworks.xstream:xstream:1.4.7' + compile 'org.mockito:mockito-all:1.9.5' + testCompile 'junit:junit:4.11' + testCompile 'org.jacoco:org.jacoco.core:0.7.1.201405082137' + +} diff --git a/nl.jssl.autounit.testclasses.BooleanArguments.xml b/nl.jssl.autounit.testclasses.BooleanArguments.xml deleted file mode 100644 index c6ed3ef..0000000 --- a/nl.jssl.autounit.testclasses.BooleanArguments.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - public java.lang.String getText(boolean arg1,boolean arg2) - - - - - false - false - - falsefalse - - - - - \ No newline at end of file diff --git a/nl.jssl.autounit.testclasses.ByteArguments.xml b/nl.jssl.autounit.testclasses.ByteArguments.xml deleted file mode 100644 index 8499087..0000000 --- a/nl.jssl.autounit.testclasses.ByteArguments.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - public int getDouble(byte arg1) - - - - - -128 - - -256 - - - - 0 - - 11 - - - - - \ No newline at end of file diff --git a/nl.jssl.autounit.testclasses.FloatArguments.xml b/nl.jssl.autounit.testclasses.FloatArguments.xml deleted file mode 100644 index 979b8f4..0000000 --- a/nl.jssl.autounit.testclasses.FloatArguments.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - public int round(float arg1) - - - - - -2.006128E38 - - -2147483648 - - - - - \ No newline at end of file diff --git a/nl.jssl.autounit.testclasses.IntArguments.xml b/nl.jssl.autounit.testclasses.IntArguments.xml deleted file mode 100644 index 85818e6..0000000 --- a/nl.jssl.autounit.testclasses.IntArguments.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - public java.lang.String evenOrUneven(int arg1,int arg2) - - - - - -2147483648 - -2147483648 - - even - - - - -2147483648 - -1 - - uneven - - - - - - public int randomOther(int arg1) - - - - - -2147483648 - - 0 - - - - - \ No newline at end of file diff --git a/src/nl/jssl/autounit/AutoTester.java b/src/main/java/nl/jssl/autounit/AutoTester.java similarity index 88% rename from src/nl/jssl/autounit/AutoTester.java rename to src/main/java/nl/jssl/autounit/AutoTester.java index 42c1d28..c39b8bc 100644 --- a/src/nl/jssl/autounit/AutoTester.java +++ b/src/main/java/nl/jssl/autounit/AutoTester.java @@ -1,7 +1,6 @@ package nl.jssl.autounit; import java.io.FileInputStream; -import java.io.IOException; import java.io.ObjectInputStream; import java.util.Map; @@ -14,7 +13,7 @@ import java.util.Map; public class AutoTester { ResultsWriter resultsWriter = new ResultsWriter(); - public Map record(Class instance) { + public Map record(Class instance) { Map results = new Recorder(instance).record(); resultsWriter.write(instance.getName(), results); return results; @@ -35,7 +34,7 @@ public class AutoTester { Map results = (Map) objectInputStream.readObject(); objectInputStream.close(); return results; - } catch (IOException | ClassNotFoundException e) { + } catch (Exception e) { throw new RuntimeException(e); } } diff --git a/src/nl/jssl/autounit/Configuration.java b/src/main/java/nl/jssl/autounit/Configuration.java similarity index 90% rename from src/nl/jssl/autounit/Configuration.java rename to src/main/java/nl/jssl/autounit/Configuration.java index d308a99..5bccde3 100644 --- a/src/nl/jssl/autounit/Configuration.java +++ b/src/main/java/nl/jssl/autounit/Configuration.java @@ -3,6 +3,10 @@ package nl.jssl.autounit; import javassist.ClassPool; import javassist.NotFoundException; +/** + * TODO make configurable + * + */ public class Configuration { public static ClassPool getClassPool() { ClassPool classPool = new ClassPool(); diff --git a/src/nl/jssl/autounit/CoverageAnalyser.java b/src/main/java/nl/jssl/autounit/CoverageAnalyser.java similarity index 99% rename from src/nl/jssl/autounit/CoverageAnalyser.java rename to src/main/java/nl/jssl/autounit/CoverageAnalyser.java index 199eba3..debecd9 100644 --- a/src/nl/jssl/autounit/CoverageAnalyser.java +++ b/src/main/java/nl/jssl/autounit/CoverageAnalyser.java @@ -21,6 +21,7 @@ public class CoverageAnalyser { private IRuntime runtime; private RuntimeData data = new RuntimeData(); + @SuppressWarnings("unchecked") public T instrument(Class testTarget) { try { String targetName = testTarget.getName(); diff --git a/src/nl/jssl/autounit/ExecutionException.java b/src/main/java/nl/jssl/autounit/ExecutionException.java similarity index 100% rename from src/nl/jssl/autounit/ExecutionException.java rename to src/main/java/nl/jssl/autounit/ExecutionException.java diff --git a/src/nl/jssl/autounit/InAndOutput.java b/src/main/java/nl/jssl/autounit/InAndOutput.java similarity index 100% rename from src/nl/jssl/autounit/InAndOutput.java rename to src/main/java/nl/jssl/autounit/InAndOutput.java diff --git a/src/nl/jssl/autounit/MethodCallResults.java b/src/main/java/nl/jssl/autounit/MethodCallResults.java similarity index 100% rename from src/nl/jssl/autounit/MethodCallResults.java rename to src/main/java/nl/jssl/autounit/MethodCallResults.java diff --git a/src/nl/jssl/autounit/MethodcallExecutor.java b/src/main/java/nl/jssl/autounit/MethodcallExecutor.java similarity index 75% rename from src/nl/jssl/autounit/MethodcallExecutor.java rename to src/main/java/nl/jssl/autounit/MethodcallExecutor.java index 6af41b7..2d87e25 100644 --- a/src/nl/jssl/autounit/MethodcallExecutor.java +++ b/src/main/java/nl/jssl/autounit/MethodcallExecutor.java @@ -3,7 +3,6 @@ package nl.jssl.autounit; import java.lang.reflect.Method; import java.util.List; -import nl.jssl.autounit.inputs.ArgumentsForSingleCall; import nl.jssl.autounit.utils.Permuter.Tuple; /** @@ -39,16 +38,24 @@ public class MethodcallExecutor { break; } } - if (previous == null) { - result.setCoverageResult(lastInvocationResult.coverage); - } else { - result.setCoverageResult(previous.coverage); + if (lastInvocationResult != null) { + if (previous == null) { + result.setCoverageResult(lastInvocationResult.coverage); + } else { + result.setCoverageResult(previous.coverage); + } } return result; } private InvocationResult analyseMethodCall(Method m, Tuple input) { - return coverageAnalyser.analyse(instrumentedTestTarget, m, input.toArray()); + Object[] argumentarray = input.toArray(); + for (int i = 0; i < argumentarray.length; i++) { + if (argumentarray[i].toString().equals("autounit:[NULL]")) { + argumentarray[i] = null; + } + } + return coverageAnalyser.analyse(instrumentedTestTarget, m, argumentarray); } public MethodCallResults getResult() { diff --git a/src/nl/jssl/autounit/Player.java b/src/main/java/nl/jssl/autounit/Player.java similarity index 100% rename from src/nl/jssl/autounit/Player.java rename to src/main/java/nl/jssl/autounit/Player.java diff --git a/src/nl/jssl/autounit/Recorder.java b/src/main/java/nl/jssl/autounit/Recorder.java similarity index 89% rename from src/nl/jssl/autounit/Recorder.java rename to src/main/java/nl/jssl/autounit/Recorder.java index 648317c..489bcc3 100644 --- a/src/nl/jssl/autounit/Recorder.java +++ b/src/main/java/nl/jssl/autounit/Recorder.java @@ -7,8 +7,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import nl.jssl.autounit.inputs.ArgumentsForSingleCall; -import nl.jssl.autounit.inputs.CombinedInputSetFactory; +import nl.jssl.autounit.inputs.MethodcallArgumentsFactory; import nl.jssl.autounit.utils.Permuter.Tuple; public class Recorder { @@ -43,7 +42,7 @@ public class Recorder { } private MethodCallResults recordMethod(Method m) { - List inputSet = new CombinedInputSetFactory().getInputs(testTarget, m); + List inputSet = new MethodcallArgumentsFactory().getInputs(testTarget, m); MethodcallExecutor methodcallExecutor = new MethodcallExecutor(testTarget, m); methodcallExecutor.execute(inputSet); return methodcallExecutor.getResult(); diff --git a/src/nl/jssl/autounit/ResultsWriter.java b/src/main/java/nl/jssl/autounit/ResultsWriter.java similarity index 74% rename from src/nl/jssl/autounit/ResultsWriter.java rename to src/main/java/nl/jssl/autounit/ResultsWriter.java index eed21c5..93802c0 100644 --- a/src/nl/jssl/autounit/ResultsWriter.java +++ b/src/main/java/nl/jssl/autounit/ResultsWriter.java @@ -4,8 +4,8 @@ import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.util.Map; -import nl.jssl.autounit.inputs.ArgumentsForSingleCall; -import nl.jssl.autounit.utils.ArgumentsConverter; +import nl.jssl.autounit.utils.Permuter.Tuple; +import nl.jssl.autounit.utils.XStreamArgumentsConverter; import com.thoughtworks.xstream.XStream; @@ -19,8 +19,9 @@ public class ResultsWriter { private void setup() { xstream.alias("case", InAndOutput.class); xstream.alias("results", MethodCallResults.class); - xstream.alias("args", ArgumentsForSingleCall.class); - xstream.registerConverter(new ArgumentsConverter()); + xstream.alias("args", Tuple.class); + + xstream.registerConverter(new XStreamArgumentsConverter()); } public void write(String classname, Map results) { diff --git a/src/main/java/nl/jssl/autounit/inputs/ArgumentsForSingleParameter.java b/src/main/java/nl/jssl/autounit/inputs/ArgumentsForSingleParameter.java new file mode 100644 index 0000000..16ce684 --- /dev/null +++ b/src/main/java/nl/jssl/autounit/inputs/ArgumentsForSingleParameter.java @@ -0,0 +1,10 @@ +package nl.jssl.autounit.inputs; + +import java.util.ArrayList; + +/** + * Meant to keep lists apart. Not to get confused. Might loose its necessity. + */ +@SuppressWarnings("serial") +public class ArgumentsForSingleParameter extends ArrayList { +} diff --git a/src/main/java/nl/jssl/autounit/inputs/MethodcallArgumentsFactory.java b/src/main/java/nl/jssl/autounit/inputs/MethodcallArgumentsFactory.java new file mode 100644 index 0000000..c98ea6c --- /dev/null +++ b/src/main/java/nl/jssl/autounit/inputs/MethodcallArgumentsFactory.java @@ -0,0 +1,94 @@ +package nl.jssl.autounit.inputs; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import nl.jssl.autounit.inputs.objects.ObjectArgumentFactory; +import nl.jssl.autounit.inputs.objects.StringArgumentFactory; +import nl.jssl.autounit.inputs.primtives.ArgumentFactory; +import nl.jssl.autounit.inputs.primtives.BooleanArgumentFactory; +import nl.jssl.autounit.inputs.primtives.ByteArgumentFactory; +import nl.jssl.autounit.inputs.primtives.DoubleArgumentFactory; +import nl.jssl.autounit.inputs.primtives.FloatArgumentFactory; +import nl.jssl.autounit.inputs.primtives.IntegerArgumentFactory; +import nl.jssl.autounit.utils.Permuter; +import nl.jssl.autounit.utils.Permuter.Tuple; + +public class MethodcallArgumentsFactory { + private final Map, ArgumentFactory> primitivesFactories; + + public MethodcallArgumentsFactory() { + primitivesFactories = new HashMap, ArgumentFactory>(); + populateFactories(); + } + + public List getInputs(Class testTarget, Method m) { + return combine(getArgumentsForAllParameters(testTarget, m)); + } + + private List combine(List> inputSetsForAllArguments) { + int nrOfParameters = inputSetsForAllArguments.size(); + if (nrOfParameters == 0) { + return Collections.emptyList(); + } else if (nrOfParameters == 1) { + // simple case + return makeArgumentsForSingleParameterCall(inputSetsForAllArguments); + } else { + return Permuter.permute(inputSetsForAllArguments); + } + } + + private List makeArgumentsForSingleParameterCall(List> generatedInputSetsForAllArguments) { + List allPossibleArguments = new ArrayList(); + + List generatedInputs = generatedInputSetsForAllArguments.iterator().next(); + + for (Object variable : generatedInputs) { + Tuple argument = new Tuple(variable); + allPossibleArguments.add(argument); + } + return allPossibleArguments; + } + + List> getArgumentsForAllParameters(Class testTarget, Method m) { + List> singleInputSets = new ArrayList>(); + for (Class parametertype : m.getParameterTypes()) { + List inputs = tryPrimitives(testTarget, parametertype); + + if (inputs == null) { + inputs = new ObjectArgumentFactory().getObjectArgument(testTarget, parametertype); + } + if (inputs != null) { + singleInputSets.add(inputs); + } + } + return singleInputSets; + } + + private ArgumentsForSingleParameter tryPrimitives(Class testTarget, Class parametertype) { + ArgumentFactory inputsFactory = primitivesFactories.get(parametertype); + if (inputsFactory != null) { + return inputsFactory.getInputs(testTarget); + } else { + return null; + } + } + + private void populateFactories() { + primitivesFactories.put(int.class, new IntegerArgumentFactory()); + primitivesFactories.put(Integer.class, new IntegerArgumentFactory()); + primitivesFactories.put(double.class, new DoubleArgumentFactory()); + primitivesFactories.put(Double.class, new DoubleArgumentFactory()); + primitivesFactories.put(float.class, new FloatArgumentFactory()); + primitivesFactories.put(Float.class, new FloatArgumentFactory()); + primitivesFactories.put(byte.class, new ByteArgumentFactory()); + primitivesFactories.put(Byte.class, new ByteArgumentFactory()); + primitivesFactories.put(Boolean.class, new BooleanArgumentFactory()); + primitivesFactories.put(boolean.class, new BooleanArgumentFactory()); + primitivesFactories.put(String.class, new StringArgumentFactory()); + } +} diff --git a/src/main/java/nl/jssl/autounit/inputs/objects/ObjectArgumentFactory.java b/src/main/java/nl/jssl/autounit/inputs/objects/ObjectArgumentFactory.java new file mode 100644 index 0000000..4d688f5 --- /dev/null +++ b/src/main/java/nl/jssl/autounit/inputs/objects/ObjectArgumentFactory.java @@ -0,0 +1,55 @@ +package nl.jssl.autounit.inputs.objects; + +import java.lang.reflect.Method; + +import nl.jssl.autounit.inputs.ArgumentsForSingleParameter; +import nl.jssl.autounit.inputs.MethodcallArgumentsFactory; + +import org.mockito.Mockito; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; + +/** + * Creates arguments if they are objects. Methods that return values are populated like in regular mocking. + * + */ +public class ObjectArgumentFactory { + private MethodcallArgumentsFactory argumentsFactory; + + public ArgumentsForSingleParameter getObjectArgument(Class testTarget, Class parametertype) { + ArgumentsForSingleParameter inputs = new ArgumentsForSingleParameter(); + Object mock = createMock(parametertype); + inputs.add(mock); + return inputs; + } + + private Object createMock(Class parametertype) { + Object mock = Mockito.mock(parametertype, new DefaultAnswer()); + + return mock; + } + + static class DefaultAnswer implements Answer { + + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + Method method = invocation.getMethod(); + // necessary? + if (returnsVoid(method)) { + return Void.TYPE; + } + return null; + + } + + } + + static boolean returnsVoid(Method m) { + Class returnType = m.getReturnType(); + return returnType != Void.TYPE; + } + + public void setArgumentsFactory(MethodcallArgumentsFactory argumentsFactory) { + this.argumentsFactory = argumentsFactory; + } +} diff --git a/src/main/java/nl/jssl/autounit/inputs/objects/StringArgumentFactory.java b/src/main/java/nl/jssl/autounit/inputs/objects/StringArgumentFactory.java new file mode 100644 index 0000000..878d339 --- /dev/null +++ b/src/main/java/nl/jssl/autounit/inputs/objects/StringArgumentFactory.java @@ -0,0 +1,26 @@ +package nl.jssl.autounit.inputs.objects; + +import javassist.ClassPool; +import nl.jssl.autounit.inputs.ArgumentsForSingleParameter; +import nl.jssl.autounit.inputs.primtives.ArgumentFactory; +import nl.jssl.autounit.utils.ConstantpoolReader; + +/** + * Creates Strings as arguments for a method call. Uses bytecode analysis to scan the class-under-test for "interesting" + * strings and adds them to the argument set. + * + * Also adds null to check for NPE. //is this feasible? + */ +public class StringArgumentFactory implements ArgumentFactory { + private static ConstantpoolReader constantpoolReader = new ConstantpoolReader(ClassPool.getDefault()); + + @Override + public ArgumentsForSingleParameter getInputs(Class testTarget) { + ArgumentsForSingleParameter inputs = new ArgumentsForSingleParameter(); + inputs.add(null); + inputs.add("some"); + inputs.addAll(constantpoolReader.scanStrings(testTarget)); + return inputs; + } + +} diff --git a/src/main/java/nl/jssl/autounit/inputs/primtives/ArgumentFactory.java b/src/main/java/nl/jssl/autounit/inputs/primtives/ArgumentFactory.java new file mode 100644 index 0000000..f8c9045 --- /dev/null +++ b/src/main/java/nl/jssl/autounit/inputs/primtives/ArgumentFactory.java @@ -0,0 +1,7 @@ +package nl.jssl.autounit.inputs.primtives; + +import nl.jssl.autounit.inputs.ArgumentsForSingleParameter; + +public interface ArgumentFactory { + ArgumentsForSingleParameter getInputs(Class testTarget); +} diff --git a/src/main/java/nl/jssl/autounit/inputs/primtives/BooleanArgumentFactory.java b/src/main/java/nl/jssl/autounit/inputs/primtives/BooleanArgumentFactory.java new file mode 100644 index 0000000..9d830c6 --- /dev/null +++ b/src/main/java/nl/jssl/autounit/inputs/primtives/BooleanArgumentFactory.java @@ -0,0 +1,14 @@ +package nl.jssl.autounit.inputs.primtives; + +import nl.jssl.autounit.inputs.ArgumentsForSingleParameter; + +public class BooleanArgumentFactory implements ArgumentFactory { + + public ArgumentsForSingleParameter getInputs(Class testTarget) { + ArgumentsForSingleParameter inputs = new ArgumentsForSingleParameter(); + inputs.add(Boolean.FALSE); + inputs.add(Boolean.TRUE); + return inputs; + } + +} diff --git a/src/main/java/nl/jssl/autounit/inputs/primtives/ByteArgumentFactory.java b/src/main/java/nl/jssl/autounit/inputs/primtives/ByteArgumentFactory.java new file mode 100644 index 0000000..f2b5a9b --- /dev/null +++ b/src/main/java/nl/jssl/autounit/inputs/primtives/ByteArgumentFactory.java @@ -0,0 +1,15 @@ +package nl.jssl.autounit.inputs.primtives; + +import nl.jssl.autounit.inputs.ArgumentsForSingleParameter; + +public class ByteArgumentFactory implements ArgumentFactory { + + public ArgumentsForSingleParameter getInputs(Class testTarget) { + ArgumentsForSingleParameter inputs = new ArgumentsForSingleParameter(); + for (byte i = Byte.MIN_VALUE; i < Byte.MAX_VALUE; i++) { + inputs.add(i); + } + return inputs; + } + +} diff --git a/src/main/java/nl/jssl/autounit/inputs/primtives/DoubleArgumentFactory.java b/src/main/java/nl/jssl/autounit/inputs/primtives/DoubleArgumentFactory.java new file mode 100644 index 0000000..51083e8 --- /dev/null +++ b/src/main/java/nl/jssl/autounit/inputs/primtives/DoubleArgumentFactory.java @@ -0,0 +1,23 @@ +package nl.jssl.autounit.inputs.primtives; + +import nl.jssl.autounit.inputs.ArgumentsForSingleParameter; + + +public class DoubleArgumentFactory implements ArgumentFactory { + + public ArgumentsForSingleParameter getInputs(Class testTarget) { + ArgumentsForSingleParameter inputs = new ArgumentsForSingleParameter(); + for (int i = 0; i < 1000; i++) { + inputs.add(((2 * Math.random() - 2) * Double.MAX_VALUE)); + } + inputs.add(Double.MIN_VALUE); + inputs.add(-2D); + inputs.add(-1D); + inputs.add(0D); + inputs.add(1D); + inputs.add(2D); + inputs.add(Double.MAX_VALUE); + return inputs; + } + +} diff --git a/src/main/java/nl/jssl/autounit/inputs/primtives/FloatArgumentFactory.java b/src/main/java/nl/jssl/autounit/inputs/primtives/FloatArgumentFactory.java new file mode 100644 index 0000000..a454284 --- /dev/null +++ b/src/main/java/nl/jssl/autounit/inputs/primtives/FloatArgumentFactory.java @@ -0,0 +1,22 @@ +package nl.jssl.autounit.inputs.primtives; + +import nl.jssl.autounit.inputs.ArgumentsForSingleParameter; + + +public class FloatArgumentFactory implements ArgumentFactory { + + public ArgumentsForSingleParameter getInputs(Class testTarget) { + ArgumentsForSingleParameter inputs = new ArgumentsForSingleParameter(); + for (int i = 0; i < 1000; i++) { + inputs.add((float) ((2 * Math.random() - 2) * Float.MAX_VALUE)); + } + inputs.add(Float.MIN_VALUE); + inputs.add(-2F); + inputs.add(-1F); + inputs.add(0F); + inputs.add(1F); + inputs.add(2F); + inputs.add(Float.MAX_VALUE); + return inputs; + } +} diff --git a/src/main/java/nl/jssl/autounit/inputs/primtives/IntegerArgumentFactory.java b/src/main/java/nl/jssl/autounit/inputs/primtives/IntegerArgumentFactory.java new file mode 100644 index 0000000..f866f72 --- /dev/null +++ b/src/main/java/nl/jssl/autounit/inputs/primtives/IntegerArgumentFactory.java @@ -0,0 +1,20 @@ +package nl.jssl.autounit.inputs.primtives; + +import nl.jssl.autounit.inputs.ArgumentsForSingleParameter; + +public class IntegerArgumentFactory implements ArgumentFactory { + + public ArgumentsForSingleParameter getInputs(Class testTarget) { + ArgumentsForSingleParameter inputs = new ArgumentsForSingleParameter(); +// for (int i = 0; i < 2; i++) { +// inputs.add((int) ((2 * Math.random() - 2) * Integer.MAX_VALUE)); +// } + inputs.add(Integer.MIN_VALUE); + inputs.add(-1); + inputs.add(0); + inputs.add(1); + inputs.add(Integer.MAX_VALUE); + return inputs; + } + +} diff --git a/src/main/java/nl/jssl/autounit/inputs/primtives/LongArgumentFactory.java b/src/main/java/nl/jssl/autounit/inputs/primtives/LongArgumentFactory.java new file mode 100644 index 0000000..89d1eea --- /dev/null +++ b/src/main/java/nl/jssl/autounit/inputs/primtives/LongArgumentFactory.java @@ -0,0 +1,23 @@ +package nl.jssl.autounit.inputs.primtives; + +import nl.jssl.autounit.inputs.ArgumentsForSingleParameter; + + +public class LongArgumentFactory implements ArgumentFactory { + + public ArgumentsForSingleParameter getInputs(Class testTarget) { + ArgumentsForSingleParameter inputs = new ArgumentsForSingleParameter(); + for (int i = 0; i < 1000; i++) { + inputs.add((long) ((2 * Math.random() - 2) * Long.MAX_VALUE)); + } + inputs.add(Long.MIN_VALUE); + inputs.add(-2L); + inputs.add(-1L); + inputs.add(0L); + inputs.add(1L); + inputs.add(2L); + inputs.add(Long.MAX_VALUE); + return inputs; + } + +} diff --git a/src/nl/jssl/autounit/utils/ConstantpoolReader.java b/src/main/java/nl/jssl/autounit/utils/ConstantpoolReader.java similarity index 94% rename from src/nl/jssl/autounit/utils/ConstantpoolReader.java rename to src/main/java/nl/jssl/autounit/utils/ConstantpoolReader.java index 205a3b3..5cae9fa 100644 --- a/src/nl/jssl/autounit/utils/ConstantpoolReader.java +++ b/src/main/java/nl/jssl/autounit/utils/ConstantpoolReader.java @@ -22,7 +22,7 @@ public class ConstantpoolReader { CtClass ctClass; try { ctClass = pool.get(target.getName()); - List strings = new ArrayList<>(); + List strings = new ArrayList(); if (isScannable(ctClass)) { ConstPool constPool = ctClass.getClassFile().getConstPool(); int size = constPool.getSize(); diff --git a/src/nl/jssl/autounit/utils/MemoryClassloader.java b/src/main/java/nl/jssl/autounit/utils/MemoryClassloader.java similarity index 100% rename from src/nl/jssl/autounit/utils/MemoryClassloader.java rename to src/main/java/nl/jssl/autounit/utils/MemoryClassloader.java diff --git a/src/nl/jssl/autounit/utils/Permuter.java b/src/main/java/nl/jssl/autounit/utils/Permuter.java similarity index 90% rename from src/nl/jssl/autounit/utils/Permuter.java rename to src/main/java/nl/jssl/autounit/utils/Permuter.java index 9b2f137..4899ab9 100644 --- a/src/nl/jssl/autounit/utils/Permuter.java +++ b/src/main/java/nl/jssl/autounit/utils/Permuter.java @@ -25,7 +25,7 @@ public class Permuter { } private static List permutePairs(List list1, List list2) { - List pairs = new ArrayList<>(); + List pairs = new ArrayList(); for (Object element1 : list1) { for (Object element2 : list2) { pairs.add(new Tuple(element1, element2)); @@ -34,7 +34,7 @@ public class Permuter { return pairs; } - public static class Tuple implements Iterable { + public static class Tuple implements Iterable { public final Object element1; public final Object element2; @@ -55,9 +55,11 @@ public class Permuter { } private List asList() { - List list = new ArrayList<>(); + List list = new ArrayList(); if (element1 != null) { add(element1, list); + } else { + add("autounit:[NULL]", list); } if (element2 != null) { add(element2, list); diff --git a/src/nl/jssl/autounit/utils/SilentObjectCreator.java b/src/main/java/nl/jssl/autounit/utils/SilentObjectCreator.java similarity index 88% rename from src/nl/jssl/autounit/utils/SilentObjectCreator.java rename to src/main/java/nl/jssl/autounit/utils/SilentObjectCreator.java index 1052ae5..6686bc2 100644 --- a/src/nl/jssl/autounit/utils/SilentObjectCreator.java +++ b/src/main/java/nl/jssl/autounit/utils/SilentObjectCreator.java @@ -18,7 +18,7 @@ public class SilentObjectCreator { try { ReflectionFactory rf = ReflectionFactory.getReflectionFactory(); Constructor objDef = parent.getDeclaredConstructor(); - Constructor intConstr = rf.newConstructorForSerialization(clazz, objDef); + Constructor intConstr = (Constructor) rf.newConstructorForSerialization(clazz, objDef); return clazz.cast(intConstr.newInstance()); } catch (RuntimeException e) { throw e; diff --git a/src/nl/jssl/autounit/utils/ArgumentsConverter.java b/src/main/java/nl/jssl/autounit/utils/XStreamArgumentsConverter.java similarity index 73% rename from src/nl/jssl/autounit/utils/ArgumentsConverter.java rename to src/main/java/nl/jssl/autounit/utils/XStreamArgumentsConverter.java index 1e9b588..23c16ae 100644 --- a/src/nl/jssl/autounit/utils/ArgumentsConverter.java +++ b/src/main/java/nl/jssl/autounit/utils/XStreamArgumentsConverter.java @@ -1,6 +1,6 @@ package nl.jssl.autounit.utils; -import nl.jssl.autounit.inputs.ArgumentsForSingleCall; +import nl.jssl.autounit.utils.Permuter.Tuple; import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.MarshallingContext; @@ -8,16 +8,17 @@ import com.thoughtworks.xstream.converters.UnmarshallingContext; import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; -public class ArgumentsConverter implements Converter { +public class XStreamArgumentsConverter implements Converter { + @SuppressWarnings("rawtypes") public boolean canConvert(Class clazz) { - return (clazz == ArgumentsForSingleCall.class); + return (clazz == Tuple.class); } public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) { - ArgumentsForSingleCall person = (ArgumentsForSingleCall) value; + Tuple arguments = (Tuple) value; int index = 1; - for (Object arg : person) { + for (Object arg : arguments) { writer.startNode("arg" + index); writer.setValue(arg.toString()); writer.endNode(); diff --git a/src/nl/jssl/autounit/inputs/ArgumentsForSingleCall.java b/src/nl/jssl/autounit/inputs/ArgumentsForSingleCall.java deleted file mode 100644 index 73585c5..0000000 --- a/src/nl/jssl/autounit/inputs/ArgumentsForSingleCall.java +++ /dev/null @@ -1,7 +0,0 @@ -package nl.jssl.autounit.inputs; - -import java.util.ArrayList; - -public class ArgumentsForSingleCall extends ArrayList { - -} diff --git a/src/nl/jssl/autounit/inputs/BooleanInputsFactory.java b/src/nl/jssl/autounit/inputs/BooleanInputsFactory.java deleted file mode 100644 index ca79d6b..0000000 --- a/src/nl/jssl/autounit/inputs/BooleanInputsFactory.java +++ /dev/null @@ -1,12 +0,0 @@ -package nl.jssl.autounit.inputs; - -public class BooleanInputsFactory implements InputsFactory { - - public SingleTypeInputs getInputs(Class testTarget) { - SingleTypeInputs inputs = new SingleTypeInputs(); - inputs.add(Boolean.FALSE); - inputs.add(Boolean.TRUE); - return inputs; - } - -} diff --git a/src/nl/jssl/autounit/inputs/ByteInputsFactory.java b/src/nl/jssl/autounit/inputs/ByteInputsFactory.java deleted file mode 100644 index 5817557..0000000 --- a/src/nl/jssl/autounit/inputs/ByteInputsFactory.java +++ /dev/null @@ -1,13 +0,0 @@ -package nl.jssl.autounit.inputs; - -public class ByteInputsFactory implements InputsFactory { - - public SingleTypeInputs getInputs(Class testTarget) { - SingleTypeInputs inputs = new SingleTypeInputs(); - for (byte i = Byte.MIN_VALUE; i < Byte.MAX_VALUE; i++) { - inputs.add(i); - } - return inputs; - } - -} diff --git a/src/nl/jssl/autounit/inputs/CombinedInputSetFactory.java b/src/nl/jssl/autounit/inputs/CombinedInputSetFactory.java deleted file mode 100644 index 58a7f8c..0000000 --- a/src/nl/jssl/autounit/inputs/CombinedInputSetFactory.java +++ /dev/null @@ -1,84 +0,0 @@ -package nl.jssl.autounit.inputs; - -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import nl.jssl.autounit.utils.Permuter; -import nl.jssl.autounit.utils.Permuter.Tuple; - -public class CombinedInputSetFactory { - private final Map, InputsFactory> primitivesFactories; - - public CombinedInputSetFactory() { - primitivesFactories = new HashMap<>(); - populateFactories(); - } - - public List getInputs(Class testTarget, Method m) { - return combine(getInputSetsForAllArguments(testTarget, m)); - } - - private List combine(List> inputSetsForAllArguments) { - int nrOfParameters = inputSetsForAllArguments.size(); - if (nrOfParameters == 1) { - // simple case - return makeArgumentsForSingleParameterCall(inputSetsForAllArguments); - } else { - return Permuter.permute(inputSetsForAllArguments); - } - } - - private List makeArgumentsForSingleParameterCall( - List> generatedInputSetsForAllArguments) { - List allPossibleArguments = new ArrayList(); - - List generatedInputs = generatedInputSetsForAllArguments.iterator().next(); - - for (Object variable : generatedInputs) { - Tuple argument = new Tuple(variable); - allPossibleArguments.add(argument); - } - return allPossibleArguments; - } - - private List> getInputSetsForAllArguments(Class testTarget, Method m) { - List> singleInputSets = new ArrayList<>(); - for (Class parametertype : m.getParameterTypes()) { - List inputs = tryPrimitives(testTarget, parametertype); - - if (inputs == null) { - inputs = new MocksFactory().getMockInputs(testTarget, parametertype); - } - if (inputs != null) { - singleInputSets.add(inputs); - } - } - return singleInputSets; - } - - private SingleTypeInputs tryPrimitives(Class testTarget, Class parametertype) { - InputsFactory inputsFactory = primitivesFactories.get(parametertype); - if (inputsFactory != null) { - return inputsFactory.getInputs(testTarget); - } else { - return null; - } - } - - private void populateFactories() { - primitivesFactories.put(int.class, new IntegerInputsFactory()); - primitivesFactories.put(Integer.class, new IntegerInputsFactory()); - primitivesFactories.put(double.class, new DoubleInputsFactory()); - primitivesFactories.put(Double.class, new DoubleInputsFactory()); - primitivesFactories.put(float.class, new FloatInputsFactory()); - primitivesFactories.put(Float.class, new FloatInputsFactory()); - primitivesFactories.put(byte.class, new ByteInputsFactory()); - primitivesFactories.put(Byte.class, new ByteInputsFactory()); - primitivesFactories.put(Boolean.class, new BooleanInputsFactory()); - primitivesFactories.put(boolean.class, new BooleanInputsFactory()); - primitivesFactories.put(String.class, new StringInputsFactory()); - } -} diff --git a/src/nl/jssl/autounit/inputs/DoubleInputsFactory.java b/src/nl/jssl/autounit/inputs/DoubleInputsFactory.java deleted file mode 100644 index c6d5791..0000000 --- a/src/nl/jssl/autounit/inputs/DoubleInputsFactory.java +++ /dev/null @@ -1,21 +0,0 @@ -package nl.jssl.autounit.inputs; - - -public class DoubleInputsFactory implements InputsFactory { - - public SingleTypeInputs getInputs(Class testTarget) { - SingleTypeInputs inputs = new SingleTypeInputs(); - for (int i = 0; i < 1000; i++) { - inputs.add(((2 * Math.random() - 2) * Double.MAX_VALUE)); - } - inputs.add(Double.MIN_VALUE); - inputs.add(-2D); - inputs.add(-1D); - inputs.add(0D); - inputs.add(1D); - inputs.add(2D); - inputs.add(Double.MAX_VALUE); - return inputs; - } - -} diff --git a/src/nl/jssl/autounit/inputs/FloatInputsFactory.java b/src/nl/jssl/autounit/inputs/FloatInputsFactory.java deleted file mode 100644 index a887fb2..0000000 --- a/src/nl/jssl/autounit/inputs/FloatInputsFactory.java +++ /dev/null @@ -1,20 +0,0 @@ -package nl.jssl.autounit.inputs; - - -public class FloatInputsFactory implements InputsFactory { - - public SingleTypeInputs getInputs(Class testTarget) { - SingleTypeInputs inputs = new SingleTypeInputs(); - for (int i = 0; i < 1000; i++) { - inputs.add((float) ((2 * Math.random() - 2) * Float.MAX_VALUE)); - } - inputs.add(Float.MIN_VALUE); - inputs.add(-2F); - inputs.add(-1F); - inputs.add(0F); - inputs.add(1F); - inputs.add(2F); - inputs.add(Float.MAX_VALUE); - return inputs; - } -} diff --git a/src/nl/jssl/autounit/inputs/InputsFactory.java b/src/nl/jssl/autounit/inputs/InputsFactory.java deleted file mode 100644 index d71a581..0000000 --- a/src/nl/jssl/autounit/inputs/InputsFactory.java +++ /dev/null @@ -1,5 +0,0 @@ -package nl.jssl.autounit.inputs; - -public interface InputsFactory { - SingleTypeInputs getInputs(Class testTarget); -} diff --git a/src/nl/jssl/autounit/inputs/IntegerInputsFactory.java b/src/nl/jssl/autounit/inputs/IntegerInputsFactory.java deleted file mode 100644 index 2014b1d..0000000 --- a/src/nl/jssl/autounit/inputs/IntegerInputsFactory.java +++ /dev/null @@ -1,18 +0,0 @@ -package nl.jssl.autounit.inputs; - -public class IntegerInputsFactory implements InputsFactory { - - public SingleTypeInputs getInputs(Class testTarget) { - SingleTypeInputs inputs = new SingleTypeInputs(); -// for (int i = 0; i < 2; i++) { -// inputs.add((int) ((2 * Math.random() - 2) * Integer.MAX_VALUE)); -// } - inputs.add(Integer.MIN_VALUE); - inputs.add(-1); - inputs.add(0); - inputs.add(1); - inputs.add(Integer.MAX_VALUE); - return inputs; - } - -} diff --git a/src/nl/jssl/autounit/inputs/LongInputsFactory.java b/src/nl/jssl/autounit/inputs/LongInputsFactory.java deleted file mode 100644 index f072ad1..0000000 --- a/src/nl/jssl/autounit/inputs/LongInputsFactory.java +++ /dev/null @@ -1,21 +0,0 @@ -package nl.jssl.autounit.inputs; - - -public class LongInputsFactory implements InputsFactory { - - public SingleTypeInputs getInputs(Class testTarget) { - SingleTypeInputs inputs = new SingleTypeInputs(); - for (int i = 0; i < 1000; i++) { - inputs.add((long) ((2 * Math.random() - 2) * Long.MAX_VALUE)); - } - inputs.add(Long.MIN_VALUE); - inputs.add(-2L); - inputs.add(-1L); - inputs.add(0L); - inputs.add(1L); - inputs.add(2L); - inputs.add(Long.MAX_VALUE); - return inputs; - } - -} diff --git a/src/nl/jssl/autounit/inputs/MocksFactory.java b/src/nl/jssl/autounit/inputs/MocksFactory.java deleted file mode 100644 index 7c0aa0b..0000000 --- a/src/nl/jssl/autounit/inputs/MocksFactory.java +++ /dev/null @@ -1,25 +0,0 @@ -package nl.jssl.autounit.inputs; - -import java.lang.reflect.Method; - -import org.mockito.Mockito; - -public class MocksFactory { - CombinedInputSetFactory inputSetFactory = new CombinedInputSetFactory(); - - public SingleTypeInputs getMockInputs(Class testTarget, Class parametertype) { - SingleTypeInputs inputs = new SingleTypeInputs<>(); - setExpectations(parametertype); - // inputs.add(mock); - return inputs; - } - - private void setExpectations(Class parametertype) { - Method[] declaredMethods = parametertype.getDeclaredMethods(); - for (Method m : declaredMethods) { - // Set> inputs = - // inputSetFactory.getInputs(parametertype, m); - } - Object mock = Mockito.mock(parametertype); - } -} diff --git a/src/nl/jssl/autounit/inputs/SingleTypeInputs.java b/src/nl/jssl/autounit/inputs/SingleTypeInputs.java deleted file mode 100644 index 6f85f11..0000000 --- a/src/nl/jssl/autounit/inputs/SingleTypeInputs.java +++ /dev/null @@ -1,6 +0,0 @@ -package nl.jssl.autounit.inputs; - -import java.util.ArrayList; - -public class SingleTypeInputs extends ArrayList { -} diff --git a/src/nl/jssl/autounit/inputs/StringInputsFactory.java b/src/nl/jssl/autounit/inputs/StringInputsFactory.java deleted file mode 100644 index 7cb1642..0000000 --- a/src/nl/jssl/autounit/inputs/StringInputsFactory.java +++ /dev/null @@ -1,18 +0,0 @@ -package nl.jssl.autounit.inputs; - -import nl.jssl.autounit.Configuration; -import nl.jssl.autounit.utils.ConstantpoolReader; - -public class StringInputsFactory implements InputsFactory { - private static ConstantpoolReader constantpoolReader = new ConstantpoolReader(Configuration.getClassPool()); - - @Override - public SingleTypeInputs getInputs(Class testTarget) { - SingleTypeInputs inputs = new SingleTypeInputs(); - inputs.add(null); - inputs.add("some"); - inputs.addAll(constantpoolReader.scanStrings(testTarget)); - return inputs; - } - -} diff --git a/tst/nl/jssl/autounit/PrimtiveTypeTests.java b/src/test/java/nl/jssl/autounit/PrimtiveTypeTests.java similarity index 100% rename from tst/nl/jssl/autounit/PrimtiveTypeTests.java rename to src/test/java/nl/jssl/autounit/PrimtiveTypeTests.java diff --git a/tst/nl/jssl/autounit/StringTypeTests.java b/src/test/java/nl/jssl/autounit/StringTypeTests.java similarity index 100% rename from tst/nl/jssl/autounit/StringTypeTests.java rename to src/test/java/nl/jssl/autounit/StringTypeTests.java diff --git a/src/test/java/nl/jssl/autounit/inputs/objects/JavaBeanTests.java b/src/test/java/nl/jssl/autounit/inputs/objects/JavaBeanTests.java new file mode 100644 index 0000000..c399cc5 --- /dev/null +++ b/src/test/java/nl/jssl/autounit/inputs/objects/JavaBeanTests.java @@ -0,0 +1,23 @@ +package nl.jssl.autounit.inputs.objects; + +import java.util.Map; +import java.util.Set; + +import nl.jssl.autounit.AutoTester; +import nl.jssl.autounit.MethodCallResults; +import nl.jssl.autounit.testclasses.SomeBean; + +import org.junit.Assert; +import org.junit.Test; + +public class JavaBeanTests { + @Test + public void testJavaBeanArgument() { + Map results = new AutoTester().record(SomeBean.class); + Set keys = results.keySet(); + Assert.assertTrue(keys.contains("public void setFoo(java.lang.String arg1)")); + MethodCallResults mcr = results.values().iterator().next(); + System.out.println(mcr.getCoverageResult().getLineCounter().getMissedCount() + " missed lines"); + System.out.println(mcr.getReport()); + } +} diff --git a/src/test/java/nl/jssl/autounit/inputs/objects/ObjectArgumentFactoryTests.java b/src/test/java/nl/jssl/autounit/inputs/objects/ObjectArgumentFactoryTests.java new file mode 100644 index 0000000..ab33f3f --- /dev/null +++ b/src/test/java/nl/jssl/autounit/inputs/objects/ObjectArgumentFactoryTests.java @@ -0,0 +1,23 @@ +package nl.jssl.autounit.inputs.objects; + +import static org.junit.Assert.assertEquals; + +import java.lang.reflect.Method; + +import org.junit.Test; + +public class ObjectArgumentFactoryTests { + @Test + public void testVoidReturn() throws NoSuchMethodException, SecurityException { + ObjectArgumentFactory o = new ObjectArgumentFactory(); + Method testVoidReturnMethod = ObjectArgumentFactoryTests.class.getMethod("testVoidReturn", new Class[] {}); + assertEquals(false, o.returnsVoid(testVoidReturnMethod)); + + Method getBarMethod = ObjectArgumentFactoryTests.class.getMethod("getBar", new Class[] {}); + assertEquals(true, o.returnsVoid(getBarMethod)); + } + + public String getBar() { + return "foo"; + } +} diff --git a/tst/nl/jssl/autounit/inspect/ConstantpoolReaderTest.java b/src/test/java/nl/jssl/autounit/inspect/ConstantpoolReaderTest.java similarity index 100% rename from tst/nl/jssl/autounit/inspect/ConstantpoolReaderTest.java rename to src/test/java/nl/jssl/autounit/inspect/ConstantpoolReaderTest.java diff --git a/tst/nl/jssl/autounit/util/PermuterTests.java b/src/test/java/nl/jssl/autounit/util/PermuterTests.java similarity index 82% rename from tst/nl/jssl/autounit/util/PermuterTests.java rename to src/test/java/nl/jssl/autounit/util/PermuterTests.java index 6fb15cf..1341ec3 100644 --- a/tst/nl/jssl/autounit/util/PermuterTests.java +++ b/src/test/java/nl/jssl/autounit/util/PermuterTests.java @@ -13,13 +13,13 @@ import org.junit.Test; public class PermuterTests { @Test public void testPairs() { - List integers = new ArrayList<>(); + List integers = new ArrayList(); integers.add(1); integers.add(2); - List strings = new ArrayList<>(); + List strings = new ArrayList(); strings.add("A"); strings.add("B"); - List> outer = new ArrayList<>(); + List> outer = new ArrayList>(); outer.add(integers); outer.add(strings); List permuted = Permuter.permute(outer); @@ -31,17 +31,17 @@ public class PermuterTests { @Test public void testTriplets() { - List integers = new ArrayList<>(); + List integers = new ArrayList(); integers.add(1); integers.add(2); - List strings = new ArrayList<>(); + List strings = new ArrayList(); strings.add("A"); strings.add("B"); - List vogons = new ArrayList<>(); + List vogons = new ArrayList(); vogons.add(new Vogon("Jeltz")); vogons.add(new Vogon("Gummbah")); - List> outer = new ArrayList<>(); + List> outer = new ArrayList>(); outer.add(integers); outer.add(strings); outer.add(vogons); diff --git a/testclasses/nl/jssl/autounit/testclasses/BooleanArguments.java b/src/test/testclasses/nl/jssl/autounit/testclasses/BooleanArguments.java similarity index 100% rename from testclasses/nl/jssl/autounit/testclasses/BooleanArguments.java rename to src/test/testclasses/nl/jssl/autounit/testclasses/BooleanArguments.java diff --git a/testclasses/nl/jssl/autounit/testclasses/ByteArguments.java b/src/test/testclasses/nl/jssl/autounit/testclasses/ByteArguments.java similarity index 100% rename from testclasses/nl/jssl/autounit/testclasses/ByteArguments.java rename to src/test/testclasses/nl/jssl/autounit/testclasses/ByteArguments.java diff --git a/testclasses/nl/jssl/autounit/testclasses/FloatArguments.java b/src/test/testclasses/nl/jssl/autounit/testclasses/FloatArguments.java similarity index 100% rename from testclasses/nl/jssl/autounit/testclasses/FloatArguments.java rename to src/test/testclasses/nl/jssl/autounit/testclasses/FloatArguments.java diff --git a/testclasses/nl/jssl/autounit/testclasses/IntArguments.java b/src/test/testclasses/nl/jssl/autounit/testclasses/IntArguments.java similarity index 100% rename from testclasses/nl/jssl/autounit/testclasses/IntArguments.java rename to src/test/testclasses/nl/jssl/autounit/testclasses/IntArguments.java diff --git a/testclasses/nl/jssl/autounit/testclasses/MethodSignatureMaker.java b/src/test/testclasses/nl/jssl/autounit/testclasses/MethodSignatureMaker.java similarity index 100% rename from testclasses/nl/jssl/autounit/testclasses/MethodSignatureMaker.java rename to src/test/testclasses/nl/jssl/autounit/testclasses/MethodSignatureMaker.java diff --git a/testclasses/nl/jssl/autounit/testclasses/MyMethod.java b/src/test/testclasses/nl/jssl/autounit/testclasses/MyMethod.java similarity index 100% rename from testclasses/nl/jssl/autounit/testclasses/MyMethod.java rename to src/test/testclasses/nl/jssl/autounit/testclasses/MyMethod.java diff --git a/src/test/testclasses/nl/jssl/autounit/testclasses/SomeBean.java b/src/test/testclasses/nl/jssl/autounit/testclasses/SomeBean.java new file mode 100644 index 0000000..f5e63b1 --- /dev/null +++ b/src/test/testclasses/nl/jssl/autounit/testclasses/SomeBean.java @@ -0,0 +1,24 @@ +package nl.jssl.autounit.testclasses; + +public class SomeBean { + private String foo; + + private int bar; + + public String getFoo() { + return foo; + } + + public void setFoo(String foo) { + this.foo = foo; + } + + public int getBar() { + return bar; + } + + public void setBar(int bar) { + this.bar = bar; + } + +} diff --git a/testclasses/nl/jssl/autounit/testclasses/StringArguments.java b/src/test/testclasses/nl/jssl/autounit/testclasses/StringArguments.java similarity index 100% rename from testclasses/nl/jssl/autounit/testclasses/StringArguments.java rename to src/test/testclasses/nl/jssl/autounit/testclasses/StringArguments.java