apply plugin: 'java-library' jar { baseName 'pantheon-core' manifest { attributes('Implementation-Title': baseName, 'Implementation-Version': project.version) } } dependencies { implementation project(':crypto') implementation project(':ethereum:rlp') implementation project(':ethereum:trie') implementation project(':services:kvstore') implementation 'com.fasterxml.jackson.core:jackson-databind' implementation 'com.google.guava:guava' implementation 'io.vertx:vertx-core' implementation 'org.apache.logging.log4j:log4j-api' runtime 'org.apache.logging.log4j:log4j-core' testImplementation project(path:':ethereum:referencetests', configuration: 'testOutput') testImplementation project(':testutil') testImplementation 'org.assertj:assertj-core' testImplementation 'org.mockito:mockito-core' testImplementation 'junit:junit' integrationTestImplementation 'org.assertj:assertj-core' integrationTestImplementation 'org.mockito:mockito-core' integrationTestImplementation 'junit:junit' testSupportImplementation project(':testutil') testSupportImplementation 'org.assertj:assertj-core' testSupportImplementation 'org.mockito:mockito-core' testSupportImplementation 'junit:junit' } configurations { testArtifacts } task testJar (type: Jar) { baseName = "${project.name}-test" from sourceSets.test.output } test { exclude 'tech/pegasys/pantheon/ethereum/vm/**ReferenceTest.class' exclude 'tech/pegasys/pantheon/ethereum/vm/blockchain/**.class' exclude 'tech/pegasys/pantheon/ethereum/vm/generalstate/**.class' } def generateTestFiles(FileTree jsonPath, File resourcesPath, File templateFile, String pathstrip, String destination, String namePrefix) { def referenceTestTemplate = templateFile.text // This is how many json files to include in each test file def fileSets = jsonPath.getFiles().collate(5) fileSets.each { fileSet -> def resPath = resourcesPath.getPath().replaceAll("\\\\", "/") def name = fileSet.first().getPath().toString() .replaceAll("\\\\", "/") .replaceAll(resPath + "/", "") .replaceAll(pathstrip, "") .replaceAll(".json", "") .replaceAll("/", "_") .replaceAll("\\^", "") .replaceAll("\\-", "") .replaceAll("\\+", "") def paths = [] fileSet.each { testJsonFile -> if (!testJsonFile.getName().toString().startsWith(".")) { paths << testJsonFile.getPath().toString() .replaceAll(resPath + "/", "") } } def testFile = file(destination + "/" + namePrefix + "_" + name + ".java") def allPaths = '"' + paths.join('", "') + '"'; def testFileContents = referenceTestTemplate .replaceAll("%%TESTS_FILE%%", allPaths) .replaceAll("%%TESTS_NAME%%", namePrefix + "_" + name) testFile.newWriter().withWriter { w -> w << testFileContents } } } task blockchainReferenceTestsSetup { generateTestFiles( fileTree('../referencetests/src/test/resources/BlockchainTests'), file("../referencetests/src/test/resources"), file("./src/test/resources/tech/pegasys/pantheon/ethereum/vm/BlockchainReferenceTest.java.template"), "BlockchainTests/", "./src/test/java/tech/pegasys/pantheon/ethereum/vm/blockchain", "BlockchainReferenceTest" ) } compileTestJava.dependsOn(blockchainReferenceTestsSetup) task generalstateReferenceTestsSetup { generateTestFiles( fileTree("../referencetests/src/test/resources/GeneralStateTests"), file("../referencetests/src/test/resources"), file("./src/test/resources/tech/pegasys/pantheon/ethereum/vm/GeneralStateReferenceTest.java.template"), "GeneralStateTests/", "./src/test/java/tech/pegasys/pantheon/ethereum/vm/generalstate", "GeneralStateReferenceTest" ) } compileTestJava.dependsOn(generalstateReferenceTestsSetup) task generalstateRegressionReferenceTestsSetup { generateTestFiles( fileTree("./src/test/resources/regressions/generalstate"), file("./src/test/resources"), file("./src/test/resources/tech/pegasys/pantheon/ethereum/vm/GeneralStateReferenceTest.java.template"), "regressions/generalstate/", "./src/test/java/tech/pegasys/pantheon/ethereum/vm/generalstate", "GeneralStateRegressionReferenceTest" ) } compileTestJava.dependsOn(generalstateRegressionReferenceTestsSetup) task cleanupReferenceTests(type: Delete) { delete fileTree("./src/test/java/tech/pegasys/pantheon/ethereum/vm/generalstate/") { include("**/GeneralStateReferenceTest*.java") include("**/GeneralStateRegressionReferenceTest*.java") } delete fileTree("./src/test/java/tech/pegasys/pantheon/ethereum/vm/blockchain/") { include("**/BlockchainReferenceTest*.java") } } clean.dependsOn(cleanupReferenceTests) task referenceTests(type: Test, dependsOn: ["compileTestJava"]) { scanForTestClasses = false enableAssertions = true include 'tech/pegasys/pantheon/ethereum/vm/**ReferenceTest.class' include 'tech/pegasys/pantheon/ethereum/vm/blockchain/**.class' include 'tech/pegasys/pantheon/ethereum/vm/generalstate/**.class' } artifacts { testArtifacts testJar testSupportArtifacts testSupportJar }