diff --git a/build.gradle b/build.gradle index 8ecbbf12..ea758b05 100644 --- a/build.gradle +++ b/build.gradle @@ -130,7 +130,7 @@ task pinpoint(type: Test) { //include "**/impl/MaterialCoreImplSpec.class" //include "**/impl/MaterialImplSpec.class" //include "**/impl/MaterialPairImpl.class" - include "**/impl/MaterialRepositoryImplSpec.class" + //include "**/impl/MaterialRepositoryImplSpec.class" //include "**/impl/MaterialStorageImplSpec.class" //include "**/impl/TSuiteResultImplSpec.class" //include "**/IndexerFactorySpec.class" @@ -139,7 +139,7 @@ task pinpoint(type: Test) { //include "**/MaterialPairSpec.class" //include "**/MaterialPairsSpec.class" //include "**/MaterialRepositoryFactorySpec.class" - include "**/MaterialRepositorySpec.class" + //include "**/MaterialRepositorySpec.class" //include "**/MaterialSpec.class" //include "**/MaterialStorageSpec.class" //include "**/MiscSpec.class" @@ -172,6 +172,7 @@ task pinpoint(type: Test) { //include "**/view/IndexerParallelSpec.class" //include "**/view/JUnitReportWrapperSpec.class" //include "**/view/RepositoryVisitorGeneratingBootstrapTreeviewDataSpec.class" + include "**/view/RepositoryVisitorGeneratingHtmlDivsAsModalBaseSpec.class" //include "**/view/RepositoryVisitorGeneratingHtmlDivsAsModalCarouselSpec.class" //include "**/view/RepositoryVisitorGeneratingHtmlDivsAsModalConciseSpec.class" //include "**/view/RepositoryVisitorGeneratingHtmlDivsAsModalParallelSpec.class" diff --git a/src/main/groovy/com/kazurayam/materials/view/RepositoryVisitorGeneratingHtmlDivsAsModalBase.groovy b/src/main/groovy/com/kazurayam/materials/view/RepositoryVisitorGeneratingHtmlDivsAsModalBase.groovy index 12fe2d59..75267d6c 100644 --- a/src/main/groovy/com/kazurayam/materials/view/RepositoryVisitorGeneratingHtmlDivsAsModalBase.groovy +++ b/src/main/groovy/com/kazurayam/materials/view/RepositoryVisitorGeneratingHtmlDivsAsModalBase.groovy @@ -263,9 +263,9 @@ abstract class RepositoryVisitorGeneratingHtmlDivsAsModalBase } } } else { - String msg = this.class.getSimpleName() + "#generateAnchorsToOrigins this.comparisonResultBundle_ is found to be null" + String msg = this.class.getSimpleName() + "#generateAnchorsToOrigins this.comparisonResultBundle_ is null" logger_.warn(msg) - vtLogger_.info(msg) + vtLogger_.warn(msg) } } @@ -412,20 +412,20 @@ abstract class RepositoryVisitorGeneratingHtmlDivsAsModalBase } } */ - private String getExpectedMaterialOriginHref(Path baseDir, ComparisonResult cr) { + String getExpectedMaterialOriginHref(Path baseDir, ComparisonResult cr) { def jsonObject = new JsonSlurper().parseText(cr.toJsonText()) return getXMaterialOriginHref(baseDir, jsonObject.ComparisonResult.expectedMaterial.Material.hrefRelativeToRepositoryRoot) } - private String getActualMaterialOriginHref(Path baseDir, ComparisonResult cr) { + String getActualMaterialOriginHref(Path baseDir, ComparisonResult cr) { def jsonObject = new JsonSlurper().parseText(cr.toJsonText()) return getXMaterialOriginHref(baseDir, jsonObject.ComparisonResult.actualMaterial.Material.hrefRelativeToRepositoryRoot) } - private String getXMaterialOriginHref(Path baseDir, String hrefRelativeToRepositoryRoot) { - String[] components = hrefRelativeToRepositoryRoot.split('/') // [ '47news.chronos_capture', '20190404_111956', '47news.visitSite', 'top.png' ] + String getXMaterialOriginHref(Path baseDir, String hrefRelativeToRepositoryRoot) { + String[] components = hrefRelativeToRepositoryRoot.split('/') // [ '47news.chronos_capture', 'default', '20190923_112138', '47news.visitSite', 'top.png' ] if (components.length > 2) { - Path metadataBundlePath = baseDir.resolve(components[0]).resolve(components[1]).resolve(MaterialMetadataBundle.SERIALIZED_FILE_NAME) + Path metadataBundlePath = baseDir.resolve(components[0]).resolve(components[1]).resolve(components[2]).resolve(MaterialMetadataBundle.SERIALIZED_FILE_NAME) if (Files.exists(metadataBundlePath)) { MaterialMetadataBundle metadataBundle = MaterialMetadataBundle.deserialize(metadataBundlePath) MaterialMetadata metadata = metadataBundle.findLastByMaterialPath(hrefRelativeToRepositoryRoot) @@ -435,14 +435,17 @@ abstract class RepositoryVisitorGeneratingHtmlDivsAsModalBase * { * "MaterialMetadataBundle": [ * { - * "MaterialMetadata": { - * "MaterialPath": "47news.chronos_capture/20190404_112053/47news.visitSite/top.png", - * "TCaseName": "Test Cases/47news/visitSite", - * "InvokedMethodName": "resolveScreenshotPathByUrlPathComponents", - * "SubPath": "", - * "URL": "https://www.47news.jp/", - * "ExecutionProfileName": "default" - * } + * "MaterialMetadata": { + * "MaterialPath": "47News.chronos_exam/default/20190923_112817/47News.ImageDiff_chronos/47News.visitSite/TOP(7.07).png", + * "TCaseName": "Test Cases/47News/ImageDiff_chronos", + * "MaterialDescription": { + * "category": "category text", + * "description": "description text" + * }, + * "InvokedMethodName": "resolveMaterialPath", + * "SubPath": "47News.visitSite", + * "FileName": "TOP(7.07).png" + * } * } * ] * } @@ -456,7 +459,7 @@ abstract class RepositoryVisitorGeneratingHtmlDivsAsModalBase return null } } else { - String msg = "#getXMaterialOriginHref ${metadataBundlePath} does ot exist" + String msg = "#getXMaterialOriginHref ${metadataBundlePath} does not exist" logger_.warn(msg) vtLogger_.failed(msg) return null diff --git a/src/main/groovy/com/kazurayam/materials/view/RepositoryVisitorGeneratingHtmlDivsAsModalConcise.groovy b/src/main/groovy/com/kazurayam/materials/view/RepositoryVisitorGeneratingHtmlDivsAsModalConcise.groovy index 2a8fcfeb..5652da45 100644 --- a/src/main/groovy/com/kazurayam/materials/view/RepositoryVisitorGeneratingHtmlDivsAsModalConcise.groovy +++ b/src/main/groovy/com/kazurayam/materials/view/RepositoryVisitorGeneratingHtmlDivsAsModalConcise.groovy @@ -40,7 +40,6 @@ class RepositoryVisitorGeneratingHtmlDivsAsModalConcise */ @Override void generateImgTags(Material mate) { - println "${this.getClass().getName()}#generateImgTags(${mate}) was invoked" if (this.comparisonResultBundle_ != null && this.comparisonResultBundle_.containsImageDiff(mate.getPath())) { // This material is a diff image, so render it in Carousel format of Diff > Expected + Actual diff --git a/src/test/fixtures/com.kazurayam.materials.view.RepositoryVisitorGeneratingHtmlDivsXXXXSpec/Materials/47News.chronos_exam/default/20190923_112817/47News.ImageDiff_chronos/comparison-result-bundle.json b/src/test/fixtures/com.kazurayam.materials.view.RepositoryVisitorGeneratingHtmlDivsXXXXSpec/Materials/47News.chronos_exam/default/20190923_112817/47News.ImageDiff_chronos/comparison-result-bundle.json index 083ef4ff..2e7ddbc3 100644 --- a/src/test/fixtures/com.kazurayam.materials.view.RepositoryVisitorGeneratingHtmlDivsXXXXSpec/Materials/47News.chronos_exam/default/20190923_112817/47News.ImageDiff_chronos/comparison-result-bundle.json +++ b/src/test/fixtures/com.kazurayam.materials.view.RepositoryVisitorGeneratingHtmlDivsXXXXSpec/Materials/47News.chronos_exam/default/20190923_112817/47News.ImageDiff_chronos/comparison-result-bundle.json @@ -14,8 +14,8 @@ ] } }, - "path": "/Users/urayamakazuaki/katalon-workspace/VT_47News/Materials/47News.chronos_capture/20190923_112138/47News.visitSite/TOP.png", - "hrefRelativeToRepositoryRoot": "47News.chronos_capture/20190923_112138/47News.visitSite/TOP.png", + "path": "/Users/urayamakazuaki/katalon-workspace/VT_47News/Materials/47News.chronos_capture/default/20190923_112138/47News.visitSite/TOP.png", + "hrefRelativeToRepositoryRoot": "47News.chronos_capture/default/20190923_112138/47News.visitSite/TOP.png", "lastModified": "2019-09-23T02:22:27", "description": "20190923_112138" }, @@ -41,16 +41,16 @@ ] } }, - "path": "/Users/urayamakazuaki/katalon-workspace/VT_47News/Materials/47News.chronos_capture/20190923_112816/47News.visitSite/TOP.png", - "hrefRelativeToRepositoryRoot": "47News.chronos_capture/20190923_112816/47News.visitSite/TOP.png", + "path": "/Users/urayamakazuaki/katalon-workspace/VT_47News/Materials/47News.chronos_capture/default/20190923_112816/47News.visitSite/TOP.png", + "hrefRelativeToRepositoryRoot": "47News.chronos_capture/default/20190923_112816/47News.visitSite/TOP.png", "lastModified": "2019-09-23T02:29", "description": "20190923_112816" } }, "diffMaterial": { "Material": { - "path": "/Users/urayamakazuaki/katalon-workspace/VT_47News/Materials/47News.chronos_exam/20190923_112817/47News.ImageDiff_chronos/47News.visitSite/TOP(7.07).png", - "hrefRelativeToRepositoryRoot": "47News.chronos_exam/20190923_112817/47News.ImageDiff_chronos/47News.visitSite/TOP(7.07).png" + "path": "/Users/urayamakazuaki/katalon-workspace/VT_47News/Materials/47News.chronos_exam/default/20190923_112817/47News.ImageDiff_chronos/47News.visitSite/TOP(7.07).png", + "hrefRelativeToRepositoryRoot": "47News.chronos_exam/default/20190923_112817/47News.ImageDiff_chronos/47News.visitSite/TOP(7.07).png" } }, "criteriaPercentage": 1.00, diff --git a/src/test/groovy/com/kazurayam/materials/view/RepositoryVisitorGeneratingHtmlDivsAsModalBaseSpec.groovy b/src/test/groovy/com/kazurayam/materials/view/RepositoryVisitorGeneratingHtmlDivsAsModalBaseSpec.groovy index 063b062a..8f10dd1c 100644 --- a/src/test/groovy/com/kazurayam/materials/view/RepositoryVisitorGeneratingHtmlDivsAsModalBaseSpec.groovy +++ b/src/test/groovy/com/kazurayam/materials/view/RepositoryVisitorGeneratingHtmlDivsAsModalBaseSpec.groovy @@ -16,7 +16,11 @@ import com.kazurayam.materials.TSuiteName import com.kazurayam.materials.TSuiteResult import com.kazurayam.materials.TSuiteResultId import com.kazurayam.materials.TSuiteTimestamp +import com.kazurayam.materials.imagedifference.ComparisonResult +import com.kazurayam.materials.imagedifference.ComparisonResultBundle import com.kazurayam.materials.impl.MaterialCoreImpl +import com.kazurayam.materials.repository.RepositoryVisitor +import com.kazurayam.materials.repository.RepositoryWalker import groovy.xml.MarkupBuilder import spock.lang.Ignore import spock.lang.Specification @@ -29,7 +33,7 @@ class RepositoryVisitorGeneratingHtmlDivsAsModalBaseSpec extends Specification { private static Path specOutputDir_ private static Path fixture_ = Paths.get( - "./src/test/fixtures/com.kazurayam.materials.view.RepositoryVisitorGeneratingHtmlDivsXXXXSpec") + "./src/test/fixtures/com.kazurayam.materials.view.RepositoryVisitorGeneratingHtmlDivsXXXXSpec") def setupSpec() { specOutputDir_ = Paths.get( @@ -41,6 +45,7 @@ class RepositoryVisitorGeneratingHtmlDivsAsModalBaseSpec extends Specification { def cleanup() {} def cleanupSpec() {} + @Ignore def test_findTestSuiteTimestamp() { expect: @@ -54,31 +59,48 @@ class RepositoryVisitorGeneratingHtmlDivsAsModalBaseSpec extends Specification { Helpers.copyDirectory(fixture_, caseOutputDir) // Path materialsDir = caseOutputDir.resolve('Materials') - Path storageDir = caseOutputDir.resolve('Storage') Path reportsDir = caseOutputDir.resolve('Reports') MaterialRepository mr = MaterialRepositoryFactory.createInstance(materialsDir) - MaterialStorage ms = MaterialStorageFactory.createInstance(storageDir) - // copy files from the Storage directory to the Materials directory - ms.restore(mr, [ - TSuiteResultId.newInstance( - new TSuiteName('Test Suites/47News/chronos_capture'), - new TExecutionProfile('default'), - new TSuiteTimestamp('20190923_112138')), - TSuiteResultId.newInstance( - new TSuiteName('Test Suites/47News/chronos_capture'), - new TExecutionProfile('default'), - new TSuiteTimestamp('20190923_112816')), - ]) ReportsAccessor ra = ReportsAccessorFactory.createInstance(reportsDir) + mr.scan() + TSuiteResult tsr = mr.getTSuiteResult(TSuiteResultId.newInstance( + new TSuiteName('Test Suites/47News/chronos_capture'), + new TExecutionProfile('default'), + new TSuiteTimestamp('20190923_112816') + )) + assert tsr != null + TCaseResult tcr = tsr.getTCaseResult( + new TCaseName('Test Cases/47News/visitSite')) + assert tcr != null + List materialList = tcr.getMaterialList() + assert materialList != null + Material mate = materialList.get(0) + when: Path output = materialsDir.resolve("test_findExecutionProfileName.html") Writer writer = new OutputStreamWriter(new FileOutputStream(output.toFile()), 'utf-8') MarkupBuilder markupBuilder = new MarkupBuilder(writer) RepositoryVisitorGeneratingHtmlDivsAsModalConcise visitor = new RepositoryVisitorGeneratingHtmlDivsAsModalConcise(mr.getRepositoryRoot(), markupBuilder) visitor.setReportsAccessor(ra) assert visitor != null + // + MaterialCore mc = new MaterialCoreImpl(mate.getBaseDir(), mate.getPath()) + String executionProfile = visitor.findExecutionProfileName(mr.getRepositoryRoot(), mc) + then: + executionProfile != null + executionProfile == 'default' + } - when: + def test_getExpectedMaterialOriginHref() { + setup: + // copy files from the fixtures directory to the Storage directory + Path caseOutputDir = specOutputDir_.resolve('test_getExpectedMaterialOriginHref') + Helpers.copyDirectory(fixture_, caseOutputDir) + // + Path materialsDir = caseOutputDir.resolve('Materials') + Path reportsDir = caseOutputDir.resolve('Reports') + MaterialRepository mr = MaterialRepositoryFactory.createInstance(materialsDir) + ReportsAccessor ra = ReportsAccessorFactory.createInstance(reportsDir) mr.scan() TSuiteResult tsr = mr.getTSuiteResult(TSuiteResultId.newInstance( new TSuiteName('Test Suites/47News/chronos_capture'), @@ -92,10 +114,22 @@ class RepositoryVisitorGeneratingHtmlDivsAsModalBaseSpec extends Specification { List materialList = tcr.getMaterialList() assert materialList != null Material mate = materialList.get(0) - MaterialCore mc = new MaterialCoreImpl(mate.getBaseDir(), mate.getPath()) - String executionProfile = visitor.findExecutionProfileName(mr.getRepositoryRoot(), mc) + + when: + Path output = materialsDir.resolve("test_findExecutionProfileName.html") + Writer writer = new OutputStreamWriter(new FileOutputStream(output.toFile()), 'utf-8') + MarkupBuilder markupBuilder = new MarkupBuilder(writer) + RepositoryVisitorGeneratingHtmlDivsAsModalConcise visitor = new RepositoryVisitorGeneratingHtmlDivsAsModalConcise(mr.getRepositoryRoot(), markupBuilder) + visitor.setReportsAccessor(ra) + assert visitor != null + // + Path comparisonResultBundlePath = mr.getBaseDir().resolve("47News.chronos_exam/default/20190923_112817/47News.ImageDiff_chronos/comparison-result-bundle.json") + assert Files.exists(comparisonResultBundlePath) + String fullText = comparisonResultBundlePath.toFile().text + ComparisonResultBundle crb = new ComparisonResultBundle(mr.getBaseDir(), fullText) + String expectedHref = visitor.getExpectedMaterialOriginHref(mate.getBaseDir(), crb.get(0)) then: - executionProfile != null - executionProfile == 'default' + expectedHref == "https://www.47news.jp/" } -} + +} \ No newline at end of file