From d78b5f177380c3a2b4c2900572fea37fbb069e9a Mon Sep 17 00:00:00 2001 From: Kristof Vrolijkx Date: Sun, 1 May 2016 22:45:06 +0200 Subject: [PATCH] adding diff for files in integration test --- modules/swagger-codegen/pom.xml | 10 ++++ .../typescript-angular2/apis.mustache | 6 +-- .../typescript-angular2/models.mustache | 3 -- .../io/swagger/codegen/utils/AssertFile.java | 50 ++++++++++++++++--- .../api/UserApi.ts | 1 - .../additional-properties-expected/api/api.ts | 2 - .../additional-properties-expected/index.ts | 4 +- .../model/User.ts | 1 - .../model/models.ts | 3 -- 9 files changed, 58 insertions(+), 22 deletions(-) diff --git a/modules/swagger-codegen/pom.xml b/modules/swagger-codegen/pom.xml index afaecfc3512..781a789372e 100644 --- a/modules/swagger-codegen/pom.xml +++ b/modules/swagger-codegen/pom.xml @@ -199,6 +199,9 @@ + + 1.2.1 + io.swagger @@ -279,6 +282,13 @@ test + + com.googlecode.java-diff-utils + diffutils + ${diffutils-version} + test + + diff --git a/modules/swagger-codegen/src/main/resources/typescript-angular2/apis.mustache b/modules/swagger-codegen/src/main/resources/typescript-angular2/apis.mustache index 05b5c6ec2ea..9a39b864538 100644 --- a/modules/swagger-codegen/src/main/resources/typescript-angular2/apis.mustache +++ b/modules/swagger-codegen/src/main/resources/typescript-angular2/apis.mustache @@ -1,9 +1,7 @@ {{#apiInfo}} {{#apis}} {{#operations}} -export * from '../api/{{classname}}'; +export * from './{{ classname }}'; {{/operations}} {{/apis}} -{{/apiInfo}} - - +{{/apiInfo}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/typescript-angular2/models.mustache b/modules/swagger-codegen/src/main/resources/typescript-angular2/models.mustache index 677b6b87328..ace053bd55b 100644 --- a/modules/swagger-codegen/src/main/resources/typescript-angular2/models.mustache +++ b/modules/swagger-codegen/src/main/resources/typescript-angular2/models.mustache @@ -3,6 +3,3 @@ export * from './{{{ classname }}}'; {{/model}} {{/models}} - - - diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/utils/AssertFile.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/utils/AssertFile.java index 5ec2d279d7d..d08b53bd686 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/utils/AssertFile.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/utils/AssertFile.java @@ -9,6 +9,11 @@ import java.nio.file.FileVisitor; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.attribute.BasicFileAttributes; +import java.util.List; + +import difflib.Delta; +import difflib.DiffUtils; +import difflib.Patch; import static org.testng.Assert.assertEquals; import static org.testng.Assert.fail; @@ -27,14 +32,14 @@ public class AssertFile { /** * Asserts that two directories are recursively equal. If they are not, an {@link AssertionError} is thrown with the * given message.
- * There will be a binary comparison of all files under expected with all files under actual. File attributes will + * There will be a textual comparison of all files under expected with all files under actual. File attributes will * not be considered.
* Missing or additional files are considered an error.
* * @param expected Path expected directory * @param actual Path actual directory */ - public static final void assertPathEqualsRecursively(final Path expected, final Path actual) { + public static void assertPathEqualsRecursively(final Path expected, final Path actual) { Assert.assertNotNull(expected); Assert.assertNotNull(actual); final Path absoluteExpected = expected.toAbsolutePath(); @@ -66,9 +71,8 @@ public class AssertFile { if (!Files.exists(actualFile)) { fail(String.format("File '%s' is missing.", actualFile)); } - assertEquals(Files.readAllLines(expectedFile, Charset.defaultCharset()), - Files.readAllLines(actualFile, Charset.defaultCharset()), - String.format("File content of '%s' and '%s' differ.", expectedFile, actualFile)); + + assertFilesAreEqual(expectedFile, actualFile); return FileVisitResult.CONTINUE; } @@ -86,9 +90,43 @@ public class AssertFile { }); } catch (IOException e) { - fail(e.getMessage()); + fail(e.getMessage(), e); } } + + public static void assertFilesAreEqual(final Path expected, final Path actual) { + + if(!Files.isRegularFile(expected)) { + fail("expected: '%s' is not a readable file"); + } + + if(!Files.isRegularFile(actual)) { + fail("actual: '%s' is not a readable file"); + } + + try { + List expectedLines = Files.readAllLines(expected, Charset.defaultCharset()); + List actualLines = Files.readAllLines(actual, Charset.defaultCharset()); + Patch diff = DiffUtils.diff(expectedLines, actualLines); + List deltas = diff.getDeltas(); + if(!deltas.isEmpty()) { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("files diff:\n"); + stringBuilder.append("\tfile: '" + expected.toAbsolutePath().toString() + "' \n"); + stringBuilder.append("\tfile: '" + actual.toAbsolutePath().toString() + "' \n"); + stringBuilder.append("\tdiffs:\n"); + + for (Delta delta: deltas) { + stringBuilder.append(delta.toString() + "\n"); + } + + fail(stringBuilder.toString()); + } + + } catch (IOException e) { + fail(e.getMessage(), e); + } + } } diff --git a/modules/swagger-codegen/src/test/resources/integrationtests/typescript/additional-properties-expected/api/UserApi.ts b/modules/swagger-codegen/src/test/resources/integrationtests/typescript/additional-properties-expected/api/UserApi.ts index 40f94703038..b5dea99577c 100644 --- a/modules/swagger-codegen/src/test/resources/integrationtests/typescript/additional-properties-expected/api/UserApi.ts +++ b/modules/swagger-codegen/src/test/resources/integrationtests/typescript/additional-properties-expected/api/UserApi.ts @@ -61,4 +61,3 @@ export class UserApi { } } - diff --git a/modules/swagger-codegen/src/test/resources/integrationtests/typescript/additional-properties-expected/api/api.ts b/modules/swagger-codegen/src/test/resources/integrationtests/typescript/additional-properties-expected/api/api.ts index b261015b7e3..d3bd8432806 100644 --- a/modules/swagger-codegen/src/test/resources/integrationtests/typescript/additional-properties-expected/api/api.ts +++ b/modules/swagger-codegen/src/test/resources/integrationtests/typescript/additional-properties-expected/api/api.ts @@ -1,3 +1 @@ export * from './UserApi'; - - diff --git a/modules/swagger-codegen/src/test/resources/integrationtests/typescript/additional-properties-expected/index.ts b/modules/swagger-codegen/src/test/resources/integrationtests/typescript/additional-properties-expected/index.ts index d6d02862e3c..cdfea183ad3 100644 --- a/modules/swagger-codegen/src/test/resources/integrationtests/typescript/additional-properties-expected/index.ts +++ b/modules/swagger-codegen/src/test/resources/integrationtests/typescript/additional-properties-expected/index.ts @@ -1,2 +1,2 @@ -export * from 'api/api'; -export * from 'model/models'; \ No newline at end of file +export * from './api/api'; +export * from './model/models'; diff --git a/modules/swagger-codegen/src/test/resources/integrationtests/typescript/additional-properties-expected/model/User.ts b/modules/swagger-codegen/src/test/resources/integrationtests/typescript/additional-properties-expected/model/User.ts index b1ce0a0f144..44842ba89ee 100644 --- a/modules/swagger-codegen/src/test/resources/integrationtests/typescript/additional-properties-expected/model/User.ts +++ b/modules/swagger-codegen/src/test/resources/integrationtests/typescript/additional-properties-expected/model/User.ts @@ -11,4 +11,3 @@ export interface User { */ userStatus?: number; } - diff --git a/modules/swagger-codegen/src/test/resources/integrationtests/typescript/additional-properties-expected/model/models.ts b/modules/swagger-codegen/src/test/resources/integrationtests/typescript/additional-properties-expected/model/models.ts index 115b5f75ce4..f6b9f36c6e1 100644 --- a/modules/swagger-codegen/src/test/resources/integrationtests/typescript/additional-properties-expected/model/models.ts +++ b/modules/swagger-codegen/src/test/resources/integrationtests/typescript/additional-properties-expected/model/models.ts @@ -1,4 +1 @@ export * from './User'; - - -