From 446e168f4332e4666c29ca094f2e3d73d2b45b40 Mon Sep 17 00:00:00 2001 From: Philzen Date: Wed, 5 Jun 2024 11:10:17 +0200 Subject: [PATCH] Remove deprecated MockDefaultGenerator (#18857) * Make DryRunStatus path field final * Add templateData capture functionality to DryRunTemplateManager * Replace MockDefaultGenerator with DryRunTemplateManager captures * Remove MockDefaultGenerator --- .../openapitools/codegen/DryRunStatus.java | 2 +- .../codegen/DryRunTemplateManager.java | 27 ++++ .../codegen/MockDefaultGenerator.java | 107 --------------- .../org/openapitools/codegen/TestUtils.java | 20 --- .../codegen/java/jaxrs/JavaJaxrsBaseTest.java | 125 +++++++++--------- 5 files changed, 90 insertions(+), 191 deletions(-) delete mode 100644 modules/openapi-generator/src/test/java/org/openapitools/codegen/MockDefaultGenerator.java diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DryRunStatus.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DryRunStatus.java index a28b81a8b980..862d29b4861e 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DryRunStatus.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DryRunStatus.java @@ -16,7 +16,7 @@ import java.util.Locale; * * @return a {@link Path} instance */ - private Path path; + private final Path path; /** * -- GETTER -- * Gets the diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DryRunTemplateManager.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DryRunTemplateManager.java index eb8f05d3dab2..d9de181e2f2d 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DryRunTemplateManager.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DryRunTemplateManager.java @@ -18,6 +18,9 @@ import java.util.Map; public class DryRunTemplateManager implements TemplateProcessor { private final TemplateManagerOptions options; private final Map dryRunStatusMap = new HashMap<>(); + + private final Map> capturedTemplateData = new HashMap<>(); + private boolean recordTemplateData = false; /** * Constructs a new instance of {@link DryRunTemplateManager} for the provided options @@ -47,6 +50,9 @@ public class DryRunTemplateManager implements TemplateProcessor { */ @Override public File write(Map data, String template, File target) throws IOException { + if (recordTemplateData) { + this.capturedTemplateData.put(target.getAbsolutePath(), data); + } return writeToFile(target.getAbsolutePath(), "dummy".getBytes(StandardCharsets.UTF_8)); } @@ -101,4 +107,25 @@ public class DryRunTemplateManager implements TemplateProcessor { public void error(Path path, String context) { dryRunStatusMap.put(path.toString(), new DryRunStatus(path, DryRunStatus.State.Error, context)); } + + /** + * Enable capturing of data being passed to the files as they are being written.
+ * Call this method before calling {@link Generator#generate()}. + */ + public DryRunTemplateManager enableTemplateDataCapturing() { + recordTemplateData = true; + return this; + } + + /** + * Retrieve the captured template data for a specific file. Capturing must have + * been enabled via {@link #enableTemplateDataCapturing()} prior to generation.
+ * Note: Not all files have template data (e.g. Metadata files) – in such case an empty + * map is returned. + * @param generatedFile An absolute path to the generated file + * @return Typically one of the *Map types found in {@link org.openapitools.codegen.model} + */ + public Map getCapturedTemplateData(Path generatedFile) { + return capturedTemplateData.getOrDefault(generatedFile.toString(), Map.of()); + } } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/MockDefaultGenerator.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/MockDefaultGenerator.java deleted file mode 100644 index de0e7c4b2599..000000000000 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/MockDefaultGenerator.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright 2018 OpenAPI-Generator Contributors (https://openapi-generator.tech) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.openapitools.codegen; -import lombok.Getter; -import org.openapitools.codegen.templating.TemplateManagerOptions; - -import java.io.File; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Decorates {@link DefaultCodegen and tracks some internal calls}. - * - * @deprecated Please avoid using this type, as it is not a mock and invokes real generation. Prefer {@link DefaultGenerator#DefaultGenerator(Boolean)} with dryRun=true and/or true mocked spies. - */ -@Getter @Deprecated -public class MockDefaultGenerator extends DefaultGenerator { - - // public static final String INPUT_STREAM_CONTENT = "INPUT STREAM CONTENT"; - private List templateBasedFiles = new ArrayList<>(); - private Map files = new HashMap<>(); - - public MockDefaultGenerator() { - super(true); - } - - public MockDefaultGenerator(boolean dryRun) { - super(dryRun); - } - - @Override - public Generator opts(ClientOptInput opts) { - Generator o = super.opts(opts); - TemplateManagerOptions templateManagerOptions = new TemplateManagerOptions(this.config.isEnableMinimalUpdate(),this.config.isSkipOverwrite()); - this.templateProcessor = new ObservableDryRunTemplateManager(templateManagerOptions); - return o; - } - - @Getter public static class WrittenTemplateBasedFile { - private Map templateData; - private String templateName; - private String outputFilename; - - public WrittenTemplateBasedFile(Map templateData, String templateName, String outputFilename) { - this.templateData = templateData; - this.templateName = templateName; - this.outputFilename = outputFilename; - } - - @Override - public String toString() { - return "WrittenTemplateBasedFile [" + - "outputFilename=" + outputFilename + ", " + - "templateName=" + templateName + ", " + - "templateData=" + templateData + "]"; - } - } - - class ObservableDryRunTemplateManager extends DryRunTemplateManager { - public ObservableDryRunTemplateManager(TemplateManagerOptions options) { - super(options); - } - - private String normalizePath(String filename) { - return filename.replace("\\", "/").replace("//", "/"); - } - - @Override - public File write(Map data, String template, File target) throws IOException { - String filename = normalizePath(target.toPath().normalize().toString()); - templateBasedFiles.add(new WrittenTemplateBasedFile(data, template, filename)); - - File file = super.write(data, template, target); - if (file != null && file.exists()) { - byte[] contents = Files.readAllBytes(file.toPath()); - files.put(normalizePath(filename), new String(contents, StandardCharsets.UTF_8)); - } - - return file; - } - - @Override - public File writeToFile(String filename, byte[] contents) throws IOException { - files.put(normalizePath(filename), new String(contents, StandardCharsets.UTF_8)); - return super.writeToFile(filename, contents); - } - } -} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/TestUtils.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/TestUtils.java index 36c78ab272ff..cbce02b14171 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/TestUtils.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/TestUtils.java @@ -15,12 +15,10 @@ import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.servers.Server; import io.swagger.v3.parser.core.models.ParseOptions; -import org.openapitools.codegen.MockDefaultGenerator.WrittenTemplateBasedFile; import org.openapitools.codegen.java.assertions.JavaFileAssert; import org.openapitools.codegen.model.ModelMap; import org.openapitools.codegen.model.ModelsMap; import org.openapitools.codegen.utils.ModelUtils; -import org.testng.Assert; import java.io.File; import java.io.IOException; @@ -95,24 +93,6 @@ public class TestUtils { return openAPI; } - /** - * Extract file from {@link MockDefaultGenerator} - * - * @param generator Generator - * @param root root path - * @param filename filename under root - * - * @return a {@link WrittenTemplateBasedFile} - * @deprecated Since 5.0. Please avoid this method and usage of {@link MockDefaultGenerator}, prefer {@link DefaultGenerator#DefaultGenerator(Boolean)} with dryRun=true. - */ - @Deprecated - public static WrittenTemplateBasedFile getTemplateBasedFile(MockDefaultGenerator generator, File root, String filename) { - String defaultApiFilename = new File(root, filename).getAbsolutePath().replace("\\", "/"); - Optional optional = generator.getTemplateBasedFiles().stream().filter(f -> defaultApiFilename.equals(f.getOutputFilename())).findFirst(); - Assert.assertTrue(optional.isPresent()); - return optional.get(); - } - public static void ensureContainsFile(List generatedFiles, File root, String filename) { Path path = root.toPath().resolve(filename); assertTrue(generatedFiles.contains(path.toFile()), "File '" + path.toAbsolutePath() + "' was not found in the list of generated files"); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/jaxrs/JavaJaxrsBaseTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/jaxrs/JavaJaxrsBaseTest.java index 0c7445d82cc5..b76b8378039f 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/jaxrs/JavaJaxrsBaseTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/jaxrs/JavaJaxrsBaseTest.java @@ -4,12 +4,7 @@ import io.swagger.parser.OpenAPIParser; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.media.StringSchema; import io.swagger.v3.parser.core.models.ParseOptions; -import org.openapitools.codegen.ClientOptInput; -import org.openapitools.codegen.CodegenOperation; -import org.openapitools.codegen.CodegenConstants; -import org.openapitools.codegen.DefaultGenerator; -import org.openapitools.codegen.MockDefaultGenerator; -import org.openapitools.codegen.TestUtils; +import org.openapitools.codegen.*; import org.openapitools.codegen.java.assertions.JavaFileAssert; import org.openapitools.codegen.languages.AbstractJavaJAXRSServerCodegen; import org.openapitools.codegen.languages.features.CXFServerFeatures; @@ -147,51 +142,53 @@ public abstract class JavaJaxrsBaseTest { codegen.setUseTags(true); codegen.setOutputDir(output.getAbsolutePath()); - MockDefaultGenerator generator = new MockDefaultGenerator(); - generator.opts(new ClientOptInput().openAPI(openAPI).config(codegen)).generate(); + DefaultGenerator generator = new DefaultGenerator(true); + generator.opts(new ClientOptInput().openAPI(openAPI).config(codegen)); + var dryRunTMan = ((DryRunTemplateManager) generator.getTemplateProcessor()).enableTemplateDataCapturing(); + generator.generate(); - MockDefaultGenerator.WrittenTemplateBasedFile tag0File = TestUtils.getTemplateBasedFile(generator, output, "src/gen/java/org/openapitools/api/Tag0Api.java"); - Assert.assertEquals(tag0File.getTemplateData().get("baseName"), "Tag0"); - Assert.assertEquals(tag0File.getTemplateData().get("commonPath"), ""); - List tag0 = getOperationsList(tag0File.getTemplateData()); + final var tag0ApiTemplateData = dryRunTMan.getCapturedTemplateData(output.toPath().resolve("src/gen/java/org/openapitools/api/Tag0Api.java")); + Assert.assertEquals(tag0ApiTemplateData.get("baseName"), "Tag0"); + Assert.assertEquals(tag0ApiTemplateData.get("commonPath"), ""); + List tag0 = getOperationsList(tag0ApiTemplateData); Assert.assertEquals(tag0.size(), 2); assertOperation(tag0.get(0), "Tag0", "/", false); assertOperation(tag0.get(1), "Tag0", "/{id}", true); - MockDefaultGenerator.WrittenTemplateBasedFile tag1File = TestUtils.getTemplateBasedFile(generator, output, "src/gen/java/org/openapitools/api/Tag1Api.java"); - Assert.assertEquals(tag1File.getTemplateData().get("baseName"), "Tag1"); - Assert.assertEquals(tag1File.getTemplateData().get("commonPath"), "/group1/op1"); - List tag1 = getOperationsList(tag1File.getTemplateData()); + final var tag1ApiTemplateData = dryRunTMan.getCapturedTemplateData(output.toPath().resolve("src/gen/java/org/openapitools/api/Tag1Api.java")); + Assert.assertEquals(tag1ApiTemplateData.get("baseName"), "Tag1"); + Assert.assertEquals(tag1ApiTemplateData.get("commonPath"), "/group1/op1"); + List tag1 = getOperationsList(tag1ApiTemplateData); Assert.assertEquals(tag1.size(), 1); assertOperation(tag1.get(0), "Tag1", "", false); - MockDefaultGenerator.WrittenTemplateBasedFile tag2File = TestUtils.getTemplateBasedFile(generator, output, "src/gen/java/org/openapitools/api/Tag2Api.java"); - Assert.assertEquals(tag2File.getTemplateData().get("baseName"), "Tag2"); - Assert.assertEquals(tag2File.getTemplateData().get("commonPath"), ""); - List tag2 = getOperationsList(tag2File.getTemplateData()); + final var tag2ApiTemplateData = dryRunTMan.getCapturedTemplateData(output.toPath().resolve("src/gen/java/org/openapitools/api/Tag2Api.java")); + Assert.assertEquals(tag2ApiTemplateData.get("baseName"), "Tag2"); + Assert.assertEquals(tag2ApiTemplateData.get("commonPath"), ""); + List tag2 = getOperationsList(tag2ApiTemplateData); Assert.assertEquals(tag2.size(), 2); assertOperation(tag2.get(0), "Tag2", "/group1/op2", true); assertOperation(tag2.get(1), "Tag2", "/group2/op3", true); - MockDefaultGenerator.WrittenTemplateBasedFile defaultFile = TestUtils.getTemplateBasedFile(generator, output, "src/gen/java/org/openapitools/api/DefaultApi.java"); - Assert.assertEquals(defaultFile.getTemplateData().get("baseName"), "Default"); - Assert.assertEquals(defaultFile.getTemplateData().get("commonPath"), "/group3/op4"); - List noTag = getOperationsList(defaultFile.getTemplateData()); + final var defaultApiTemplateData = dryRunTMan.getCapturedTemplateData(output.toPath().resolve("src/gen/java/org/openapitools/api/DefaultApi.java")); + Assert.assertEquals(defaultApiTemplateData.get("baseName"), "Default"); + Assert.assertEquals(defaultApiTemplateData.get("commonPath"), "/group3/op4"); + List noTag = getOperationsList(defaultApiTemplateData); Assert.assertEquals(noTag.size(), 1); assertOperation(noTag.get(0), "Default", "", false); - MockDefaultGenerator.WrittenTemplateBasedFile group4File = TestUtils.getTemplateBasedFile(generator, output, "src/gen/java/org/openapitools/api/Group4Api.java"); - Assert.assertEquals(group4File.getTemplateData().get("baseName"), "Group4"); - Assert.assertEquals(group4File.getTemplateData().get("commonPath"), "/group4"); - List group4 = getOperationsList(group4File.getTemplateData()); + final var group4ApiTemplateData = dryRunTMan.getCapturedTemplateData(output.toPath().resolve("src/gen/java/org/openapitools/api/Group4Api.java")); + Assert.assertEquals(group4ApiTemplateData.get("baseName"), "Group4"); + Assert.assertEquals(group4ApiTemplateData.get("commonPath"), "/group4"); + List group4 = getOperationsList(group4ApiTemplateData); Assert.assertEquals(group4.size(), 2); assertOperation(group4.get(0), "Group4", "/op5", true); assertOperation(group4.get(1), "Group4", "/op6", true); - MockDefaultGenerator.WrittenTemplateBasedFile group5File = TestUtils.getTemplateBasedFile(generator, output, "src/gen/java/org/openapitools/api/Group5Api.java"); - Assert.assertEquals(group5File.getTemplateData().get("baseName"), "Group5"); - Assert.assertEquals(group5File.getTemplateData().get("commonPath"), ""); - List group5 = getOperationsList(group5File.getTemplateData()); + final var group5ApiTemplateData = dryRunTMan.getCapturedTemplateData(output.toPath().resolve("src/gen/java/org/openapitools/api/Group5Api.java")); + Assert.assertEquals(group5ApiTemplateData.get("baseName"), "Group5"); + Assert.assertEquals(group5ApiTemplateData.get("commonPath"), ""); + List group5 = getOperationsList(group5ApiTemplateData); Assert.assertEquals(group5.size(), 2); assertOperation(group5.get(0), "Group5", "/group5/op7", true); assertOperation(group5.get(1), "Group5", "/group6/op8", true); @@ -206,58 +203,60 @@ public abstract class JavaJaxrsBaseTest { codegen.setUseTags(false); codegen.setOutputDir(output.getAbsolutePath()); - MockDefaultGenerator generator = new MockDefaultGenerator(); - generator.opts(new ClientOptInput().openAPI(openAPI).config(codegen)).generate(); + DefaultGenerator generator = new DefaultGenerator(true); + generator.opts(new ClientOptInput().openAPI(openAPI).config(codegen)); + var dryRunTMan = ((DryRunTemplateManager) generator.getTemplateProcessor()).enableTemplateDataCapturing(); + generator.generate(); - MockDefaultGenerator.WrittenTemplateBasedFile tag0File = TestUtils.getTemplateBasedFile(generator, output, "src/gen/java/org/openapitools/api/DefaultApi.java"); - Assert.assertEquals(tag0File.getTemplateData().get("baseName"), "default"); - Assert.assertEquals(tag0File.getTemplateData().get("commonPath"), ""); - List tag0 = getOperationsList(tag0File.getTemplateData()); + final var defaultApiTemplateData = dryRunTMan.getCapturedTemplateData(output.toPath().resolve("src/gen/java/org/openapitools/api/DefaultApi.java")); + Assert.assertEquals(defaultApiTemplateData.get("baseName"), "default"); + Assert.assertEquals(defaultApiTemplateData.get("commonPath"), ""); + List tag0 = getOperationsList(defaultApiTemplateData); Assert.assertEquals(tag0.size(), 2); assertOperation(tag0.get(0), "default", "/", false); assertOperation(tag0.get(1), "default", "/{id}", true); - - MockDefaultGenerator.WrittenTemplateBasedFile group1File = TestUtils.getTemplateBasedFile(generator, output, "src/gen/java/org/openapitools/api/Group1Api.java"); - Assert.assertEquals(group1File.getTemplateData().get("baseName"), "group1"); - Assert.assertEquals(group1File.getTemplateData().get("commonPath"), "/group1"); - List group1 = getOperationsList(group1File.getTemplateData()); + + final var group1ApiTemplateData = dryRunTMan.getCapturedTemplateData(output.toPath().resolve("src/gen/java/org/openapitools/api/Group1Api.java")); + Assert.assertEquals(group1ApiTemplateData.get("baseName"), "group1"); + Assert.assertEquals(group1ApiTemplateData.get("commonPath"), "/group1"); + List group1 = getOperationsList(group1ApiTemplateData); Assert.assertEquals(group1.size(), 2); assertOperation(group1.get(0), "group1", "/op1", true); assertOperation(group1.get(1), "group1", "/op2", true); - MockDefaultGenerator.WrittenTemplateBasedFile group2File = TestUtils.getTemplateBasedFile(generator, output, "src/gen/java/org/openapitools/api/Group2Api.java"); - Assert.assertEquals(group2File.getTemplateData().get("baseName"), "group2"); - Assert.assertEquals(group2File.getTemplateData().get("commonPath"), "/group2/op3"); - List group2 = getOperationsList(group2File.getTemplateData()); + final var group2ApiTemplateData = dryRunTMan.getCapturedTemplateData(output.toPath().resolve("src/gen/java/org/openapitools/api/Group2Api.java")); + Assert.assertEquals(group2ApiTemplateData.get("baseName"), "group2"); + Assert.assertEquals(group2ApiTemplateData.get("commonPath"), "/group2/op3"); + List group2 = getOperationsList(group2ApiTemplateData); Assert.assertEquals(group2.size(), 1); assertOperation(group2.get(0), "group2", "", false); - MockDefaultGenerator.WrittenTemplateBasedFile group3File = TestUtils.getTemplateBasedFile(generator, output, "src/gen/java/org/openapitools/api/Group3Api.java"); - Assert.assertEquals(group3File.getTemplateData().get("baseName"), "group3"); - Assert.assertEquals(group3File.getTemplateData().get("commonPath"), "/group3/op4"); - List group3 = getOperationsList(group3File.getTemplateData()); + final var group3ApiTemplateData = dryRunTMan.getCapturedTemplateData(output.toPath().resolve("src/gen/java/org/openapitools/api/Group3Api.java")); + Assert.assertEquals(group3ApiTemplateData.get("baseName"), "group3"); + Assert.assertEquals(group3ApiTemplateData.get("commonPath"), "/group3/op4"); + List group3 = getOperationsList(group3ApiTemplateData); Assert.assertEquals(group3.size(), 1); assertOperation(group3.get(0), "group3", "", false); - MockDefaultGenerator.WrittenTemplateBasedFile group4File = TestUtils.getTemplateBasedFile(generator, output, "src/gen/java/org/openapitools/api/Group4Api.java"); - Assert.assertEquals(group4File.getTemplateData().get("baseName"), "group4"); - Assert.assertEquals(group4File.getTemplateData().get("commonPath"), "/group4"); - List group4 = getOperationsList(group4File.getTemplateData()); + final var group4ApiTemplateData = dryRunTMan.getCapturedTemplateData(output.toPath().resolve("src/gen/java/org/openapitools/api/Group4Api.java")); + Assert.assertEquals(group4ApiTemplateData.get("baseName"), "group4"); + Assert.assertEquals(group4ApiTemplateData.get("commonPath"), "/group4"); + List group4 = getOperationsList(group4ApiTemplateData); Assert.assertEquals(group4.size(), 2); assertOperation(group4.get(0), "group4", "/op5", true); assertOperation(group4.get(1), "group4", "/op6", true); - MockDefaultGenerator.WrittenTemplateBasedFile group5File = TestUtils.getTemplateBasedFile(generator, output, "src/gen/java/org/openapitools/api/Group5Api.java"); - Assert.assertEquals(group5File.getTemplateData().get("baseName"), "group5"); - Assert.assertEquals(group5File.getTemplateData().get("commonPath"), "/group5/op7"); - List group5 = getOperationsList(group5File.getTemplateData()); + final var group5ApiTemplateData = dryRunTMan.getCapturedTemplateData(output.toPath().resolve("src/gen/java/org/openapitools/api/Group5Api.java")); + Assert.assertEquals(group5ApiTemplateData.get("baseName"), "group5"); + Assert.assertEquals(group5ApiTemplateData.get("commonPath"), "/group5/op7"); + List group5 = getOperationsList(group5ApiTemplateData); Assert.assertEquals(group5.size(), 1); assertOperation(group5.get(0), "group5", "", false); - MockDefaultGenerator.WrittenTemplateBasedFile group6File = TestUtils.getTemplateBasedFile(generator, output, "src/gen/java/org/openapitools/api/Group6Api.java"); - Assert.assertEquals(group6File.getTemplateData().get("baseName"), "group6"); - Assert.assertEquals(group6File.getTemplateData().get("commonPath"), "/group6/op8"); - List group6 = getOperationsList(group6File.getTemplateData()); + final var group6ApiTemplateData = dryRunTMan.getCapturedTemplateData(output.toPath().resolve("src/gen/java/org/openapitools/api/Group6Api.java")); + Assert.assertEquals(group6ApiTemplateData.get("baseName"), "group6"); + Assert.assertEquals(group6ApiTemplateData.get("commonPath"), "/group6/op8"); + List group6 = getOperationsList(group6ApiTemplateData); Assert.assertEquals(group6.size(), 1); assertOperation(group6.get(0), "group6", "", false); }