test_class.declarator: testOutBaseDir = new File("target/test-out/OpearPackageMojoTest")
test_class.modifier: private final
test_class.original_string: private final File testOutBaseDir = new File("target/test-out/OpearPackageMojoTest");
test_class.type: File
test_class.var_name: testOutBaseDir
test_class.declarator: srcDir = new File("src/test/resources/OpearPackageMojoTest")
test_class.modifier: private final
test_class.original_string: private final File srcDir = new File("src/test/resources/OpearPackageMojoTest");
test_class.type: File
test_class.var_name: srcDir
test_class.file: maven/src/test/java/net/adamcin/oakpal/maven/mojo/OpearPackageMojoTest.java
test_class.identifier: OpearPackageMojoTest
test_case.body: @Test
      public void testExecute_asJar() throws Exception {
          final File preInstallPackage = TestPackageUtil.prepareTestPackage("tmp_foo_bar.zip");
          final File testOutDir = new File(testOutBaseDir, "testExecute_asJar");
          FileUtils.deleteDirectory(testOutDir);
          testOutDir.mkdirs();
          final OpearPackageMojo mojo = newMojo();
          final MavenProject project = mock(MavenProject.class);
          mojo.project = project;
          when(project.getPackaging()).thenReturn("jar");
          final String expectGroupId = "com.example.testAssembleOpear";
          final String expectArtifactId = "assembly1";
          final String expectVersion = "1.0-SNAPSHOT";
          when(project.getGroupId()).thenReturn(expectGroupId);
          when(project.getArtifactId()).thenReturn(expectArtifactId);
          when(project.getVersion()).thenReturn(expectVersion);
          final MavenSession session = mock(MavenSession.class);
          mojo.session = session;
          final MavenExecutionRequest executionRequest = mock(MavenExecutionRequest.class);
          when(session.getRequest()).thenReturn(executionRequest);
          final RepositorySystem repositorySystem = mock(RepositorySystem.class);
          mojo.repositorySystem = repositorySystem;
  
          final ArtifactHandlerManager artifactHandlerManager = mock(ArtifactHandlerManager.class);
          mojo.artifactHandlerManager = artifactHandlerManager;
          final ArtifactHandler opearHandler = mock(ArtifactHandler.class);
          when(artifactHandlerManager.getArtifactHandler(OPEAR)).thenReturn(opearHandler);
  
          final File basedir = new File(testOutDir, "basedir");
          final File projectFile = new File(basedir, "pom.xml");
          FileUtils.touch(projectFile);
          when(project.getFile()).thenReturn(projectFile);
  
          final File target = new File(basedir, "target");
          target.mkdirs();
          mojo.outputDirectory = target;
          final File targetClasses = new File(target, "classes");
          targetClasses.mkdirs();
          final Build build = mock(Build.class);
          when(project.getBuild()).thenReturn(build);
          when(build.getDirectory()).thenReturn(target.getPath());
          when(build.getOutputDirectory()).thenReturn(targetClasses.getPath());
          FileUtils.copyFile(new File(srcDir, "echo.js"), new File(targetClasses, "echo.js"));
  
          final String expectFinalName = expectArtifactId + "-" + expectVersion;
          mojo.finalName = expectFinalName;
          final File fakeJar = new File(target, expectFinalName + ".jar");
          FileUtils.touch(fakeJar);
  
          final Artifact projectArtifact = mock(Artifact.class);
          when(projectArtifact.getType()).thenReturn("jar");
          when(project.getArtifact()).thenReturn(projectArtifact);
          when(projectArtifact.getFile()).thenReturn(fakeJar);
  
          final String expectOakpalVersion = "0.31415926535898";
          final Dependency oakpalCoreDep = new DependencyFilter()
                  .withGroupId(OAKPAL_GROUP_ID)
                  .withArtifactId(OAKPAL_CORE_ARTIFACT_ID)
                  .withVersion(expectOakpalVersion)
                  .toDependency();
          final File oakpalDepFile = new File(testOutDir, "oakpal-core.jar");
          FileUtils.touch(oakpalDepFile);
          final Artifact oakpalArt = mock(Artifact.class);
          when(oakpalArt.getGroupId()).thenReturn(OAKPAL_GROUP_ID);
          when(oakpalArt.getArtifactId()).thenReturn(OAKPAL_CORE_ARTIFACT_ID);
          when(oakpalArt.getVersion()).thenReturn(expectOakpalVersion);
          when(oakpalArt.getScope()).thenReturn("compile");
          when(oakpalArt.getFile()).thenReturn(oakpalDepFile);
  
          final Dependency compileDep = new DependencyFilter().toDependency("compile");
          final File compileDepFile = new File(testOutDir, "compile-scope.jar");
          FileUtils.touch(compileDepFile);
          final Artifact compileArt = mock(Artifact.class);
          when(compileArt.getGroupId()).thenReturn(OAKPAL_GROUP_ID);
          when(compileArt.getArtifactId()).thenReturn("compile-scope");
          when(compileArt.getScope()).thenReturn("compile");
          when(compileArt.getFile()).thenReturn(compileDepFile);
          when(project.getDependencies()).thenReturn(Arrays.asList(oakpalCoreDep, compileDep));
          doAnswer(call -> {
              final Dependency input = call.getArgument(0, Dependency.class);
              if (input == oakpalCoreDep) {
                  return oakpalArt;
              } else if (input == compileDep) {
                  return compileArt;
              } else {
                  return null;
              }
          }).when(repositorySystem).createDependencyArtifact(any(Dependency.class));
  
          doAnswer(call -> {
              final ArtifactResolutionRequest request = call.getArgument(0, ArtifactResolutionRequest.class);
              final ArtifactResolutionResult result = mock(ArtifactResolutionResult.class);
              when(result.getArtifacts()).thenReturn(Collections.singleton(request.getArtifact()));
              return result;
          }).when(repositorySystem).resolve(any(ArtifactResolutionRequest.class));
  
          final String expectFilename = "sample-plan.json";
          final File samplePlanFile = new File(srcDir, expectFilename);
          mojo.planFile = samplePlanFile;
  
          when(project.clone()).thenReturn(project);
          final File expectFinalFile = new File(target, expectFinalName + "." + OPEAR);
  
          final CompletableFuture<Artifact> attachedSlot = new CompletableFuture<>();
          doAnswer(call -> attachedSlot.complete(call.getArgument(0, Artifact.class)))
                  .when(project).addAttachedArtifact(any(Artifact.class));
          mojo.execute();
          final Artifact attached = attachedSlot.getNow(null);
          assertNotNull("attached is present", attached);
          assertEquals("expect opear file", expectFinalFile, attached.getFile());
          try (JarFile jarFile = new JarFile(expectFinalFile)) {
              final Set<String> allEntries = jarFile.stream().map(JarEntry::getName).collect(Collectors.toSet());
              final List<String> expectEntries = Arrays.asList(
                      "lib/" + fakeJar.getName(),
                      "lib/" + compileDepFile.getName(),
                      "tmp_foo_bar.zip",
                      expectFilename
              );
              for (String expectEntry : expectEntries) {
                  assertTrue(String.format("should have entry %s in %s", expectEntry, allEntries),
                          jarFile.stream().anyMatch(entry -> expectEntry.equals(entry.getName())));
              }
              final List<String> expectNoEntries = Arrays.asList(
                      "lib/classes/",
                      "lib/classes/echo.js",
                      "lib/" + oakpalDepFile.getName()
              );
              for (String noExpectEntry : expectNoEntries) {
                  assertTrue(String.format("should not have entry %s in %s", noExpectEntry, allEntries),
                          jarFile.stream().noneMatch(entry -> noExpectEntry.equals(entry.getName())));
              }
              final Manifest manifest = jarFile.getManifest();
              assertEquals("expect bsn", Collections.singletonList(expectArtifactId + "-" + OPEAR),
                      Util.getManifestHeaderValues(manifest, "Bundle-SymbolicName"));
              assertEquals("expect bcp", Arrays.asList("lib/" + fakeJar.getName(), "lib/" + compileDepFile.getName()),
                      Util.getManifestHeaderValues(manifest, "Bundle-ClassPath"));
              assertEquals("expect oakpal version", Collections.singletonList(expectOakpalVersion),
                      Util.getManifestHeaderValues(manifest, "Oakpal-Version"));
              assertEquals("expect oakpal plan", Collections.singletonList(expectFilename),
                      Util.getManifestHeaderValues(manifest, "Oakpal-Plan"));
          }
      }
test_case.class_method_signature: OpearPackageMojoTest.testExecute_asJar()
test_case.full_signature: @Test public void testExecute_asJar()
test_case.identifier: testExecute_asJar
test_case.invocations: prepareTestPackage deleteDirectory mkdirs newMojo mock thenReturn when getPackaging thenReturn when getGroupId thenReturn when getArtifactId thenReturn when getVersion mock mock thenReturn when getRequest mock mock mock thenReturn when getArtifactHandler touch thenReturn when getFile mkdirs mkdirs mock thenReturn when getBuild thenReturn when getDirectory getPath thenReturn when getOutputDirectory getPath copyFile touch mock thenReturn when getType thenReturn when getArtifact thenReturn when getFile toDependency withVersion withArtifactId withGroupId touch mock thenReturn when getGroupId thenReturn when getArtifactId thenReturn when getVersion thenReturn when getScope thenReturn when getFile toDependency touch mock thenReturn when getGroupId thenReturn when getArtifactId thenReturn when getScope thenReturn when getFile thenReturn when getDependencies asList createDependencyArtifact when doAnswer getArgument any resolve when doAnswer getArgument mock thenReturn when getArtifacts singleton getArtifact any thenReturn when clone addAttachedArtifact when doAnswer complete getArgument any execute getNow assertNotNull assertEquals getFile collect map stream toSet asList getName getName assertTrue format anyMatch stream equals getName asList getName assertTrue format noneMatch stream equals getName getManifest assertEquals singletonList getManifestHeaderValues assertEquals asList getName getName getManifestHeaderValues assertEquals singletonList getManifestHeaderValues assertEquals singletonList getManifestHeaderValues
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testExecute_asJar()
focal_class.declarator: OPEAR = "opear"
focal_class.modifier: public static final
focal_class.original_string: public static final String OPEAR = "opear";
focal_class.type: String
focal_class.var_name: OPEAR
focal_class.declarator: OAKPAL_GROUP_ID = "net.adamcin.oakpal"
focal_class.modifier: static final
focal_class.original_string: static final String OAKPAL_GROUP_ID = "net.adamcin.oakpal";
focal_class.type: String
focal_class.var_name: OAKPAL_GROUP_ID
focal_class.declarator: OAKPAL_API_ARTIFACT_ID = "oakpal-api"
focal_class.modifier: static final
focal_class.original_string: static final String OAKPAL_API_ARTIFACT_ID = "oakpal-api";
focal_class.type: String
focal_class.var_name: OAKPAL_API_ARTIFACT_ID
focal_class.declarator: OAKPAL_CORE_ARTIFACT_ID = "oakpal-core"
focal_class.modifier: static final
focal_class.original_string: static final String OAKPAL_CORE_ARTIFACT_ID = "oakpal-core";
focal_class.type: String
focal_class.var_name: OAKPAL_CORE_ARTIFACT_ID
focal_class.declarator: TEST_IS_OAKPAL_API =
              composeTest1(Artifact::getGroupId, OAKPAL_GROUP_ID::equals)
                      .and(composeTest1(Artifact::getArtifactId, OAKPAL_API_ARTIFACT_ID::equals))
focal_class.modifier: private static final
focal_class.original_string: private static final Predicate<Artifact> TEST_IS_OAKPAL_API =
              composeTest1(Artifact::getGroupId, OAKPAL_GROUP_ID::equals)
                      .and(composeTest1(Artifact::getArtifactId, OAKPAL_API_ARTIFACT_ID::equals));
focal_class.type: Predicate<Artifact>
focal_class.var_name: TEST_IS_OAKPAL_API
focal_class.declarator: TEST_IS_OAKPAL_CORE =
              composeTest1(Artifact::getGroupId, OAKPAL_GROUP_ID::equals)
                      .and(composeTest1(Artifact::getArtifactId, OAKPAL_CORE_ARTIFACT_ID::equals))
focal_class.modifier: private static final
focal_class.original_string: private static final Predicate<Artifact> TEST_IS_OAKPAL_CORE =
              composeTest1(Artifact::getGroupId, OAKPAL_GROUP_ID::equals)
                      .and(composeTest1(Artifact::getArtifactId, OAKPAL_CORE_ARTIFACT_ID::equals));
focal_class.type: Predicate<Artifact>
focal_class.var_name: TEST_IS_OAKPAL_CORE
focal_class.declarator: artifactHandlerManager
focal_class.modifier: @Component
focal_class.original_string: @Component
      ArtifactHandlerManager artifactHandlerManager;
focal_class.type: ArtifactHandlerManager
focal_class.var_name: artifactHandlerManager
focal_class.declarator: finalName
focal_class.modifier: @Parameter(defaultValue = "${project.build.finalName}", required = true)
focal_class.original_string: @Parameter(defaultValue = "${project.build.finalName}", required = true)
      String finalName;
focal_class.type: String
focal_class.var_name: finalName
focal_class.declarator: planFile
focal_class.modifier: @Parameter(defaultValue = "${project.build.directory}/oakpal-plugin/opear-plans/plan.json", required = true)
focal_class.original_string: @Parameter(defaultValue = "${project.build.directory}/oakpal-plugin/opear-plans/plan.json", required = true)
      File planFile;
focal_class.type: File
focal_class.var_name: planFile
focal_class.declarator: additionalPlans = new ArrayList<>()
focal_class.modifier: @Parameter
focal_class.original_string: @Parameter
      List<File> additionalPlans = new ArrayList<>();
focal_class.type: List<File>
focal_class.var_name: additionalPlans
focal_class.declarator: outputDirectory
focal_class.modifier: @Parameter(defaultValue = "${project.build.directory}", required = true)
focal_class.original_string: @Parameter(defaultValue = "${project.build.directory}", required = true)
      File outputDirectory;
focal_class.type: File
focal_class.var_name: outputDirectory
focal_class.file: maven/src/main/java/net/adamcin/oakpal/maven/mojo/OpearPackageMojo.java
focal_class.identifier: OpearPackageMojo
focal_class.class_method_signature: OpearPackageMojo.execute()
focal_class.full_signature: @Override public void execute()
focal_class.identifier: execute
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void execute()
focal_class.class_method_signature: OpearPackageMojo.attachArtifact(final @NotNull File finalFile)
focal_class.full_signature:  Artifact attachArtifact(final @NotNull File finalFile)
focal_class.identifier: attachArtifact
focal_class.parameters: (final @NotNull File finalFile)
focal_class.return: Artifact
focal_class.signature: Artifact attachArtifact(final @NotNull File finalFile)
focal_class.class_method_signature: OpearPackageMojo.getOwnVersion()
focal_class.full_signature:  String getOwnVersion()
focal_class.identifier: getOwnVersion
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getOwnVersion()
focal_class.class_method_signature: OpearPackageMojo.getBundleSymbolicName()
focal_class.full_signature:  String getBundleSymbolicName()
focal_class.identifier: getBundleSymbolicName
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getBundleSymbolicName()
focal_class.class_method_signature: OpearPackageMojo.getOakpalCoreVersion()
focal_class.full_signature:  String getOakpalCoreVersion()
focal_class.identifier: getOakpalCoreVersion
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getOakpalCoreVersion()
focal_class.class_method_signature: OpearPackageMojo.getEmbeddedLibraries()
focal_class.full_signature:  List<File> getEmbeddedLibraries()
focal_class.identifier: getEmbeddedLibraries
focal_class.parameters: ()
focal_class.return: List<File>
focal_class.signature: List<File> getEmbeddedLibraries()
focal_class.class_method_signature: OpearPackageMojo.assembleOpear()
focal_class.full_signature:  File assembleOpear()
focal_class.identifier: assembleOpear
focal_class.parameters: ()
focal_class.return: File
focal_class.signature: File assembleOpear()
focal_class.class_method_signature: OpearPackageMojo.mapDestFileNames(final @NotNull Map<String, T> acc,
                                                 final @NotNull List<T> files,
                                                 final @NotNull Function<T, String> namer)
focal_class.full_signature: static Map<String, T> mapDestFileNames(final @NotNull Map<String, T> acc,
                                                 final @NotNull List<T> files,
                                                 final @NotNull Function<T, String> namer)
focal_class.identifier: mapDestFileNames
focal_class.modifiers: static
focal_class.parameters: (final @NotNull Map<String, T> acc,
                                                 final @NotNull List<T> files,
                                                 final @NotNull Function<T, String> namer)
focal_class.return: Map<String, T>
focal_class.signature: Map<String, T> mapDestFileNames(final @NotNull Map<String, T> acc,
                                                 final @NotNull List<T> files,
                                                 final @NotNull Function<T, String> namer)
focal_class.class_method_signature: OpearPackageMojo.shrinkWrapPlans(final @NotNull File toDir)
focal_class.full_signature:  Result<List<String>> shrinkWrapPlans(final @NotNull File toDir)
focal_class.identifier: shrinkWrapPlans
focal_class.parameters: (final @NotNull File toDir)
focal_class.return: Result<List<String>>
focal_class.signature: Result<List<String>> shrinkWrapPlans(final @NotNull File toDir)
focal_class.class_method_signature: OpearPackageMojo.rewritePlan(final @NotNull File toDir,
                                    final @NotNull Map<URL, String> renamed,
                                    final @NotNull OakpalPlan plan,
                                    final @NotNull String filename)
focal_class.full_signature: static OakpalPlan rewritePlan(final @NotNull File toDir,
                                    final @NotNull Map<URL, String> renamed,
                                    final @NotNull OakpalPlan plan,
                                    final @NotNull String filename)
focal_class.identifier: rewritePlan
focal_class.modifiers: static
focal_class.parameters: (final @NotNull File toDir,
                                    final @NotNull Map<URL, String> renamed,
                                    final @NotNull OakpalPlan plan,
                                    final @NotNull String filename)
focal_class.return: OakpalPlan
focal_class.signature: OakpalPlan rewritePlan(final @NotNull File toDir,
                                    final @NotNull Map<URL, String> renamed,
                                    final @NotNull OakpalPlan plan,
                                    final @NotNull String filename)
focal_class.class_method_signature: OpearPackageMojo.copyPlans(final @NotNull File toDir, final @NotNull List<OakpalPlan> plans)
focal_class.full_signature: static Result<Map<String, OakpalPlan>> copyPlans(final @NotNull File toDir, final @NotNull List<OakpalPlan> plans)
focal_class.identifier: copyPlans
focal_class.modifiers: static
focal_class.parameters: (final @NotNull File toDir, final @NotNull List<OakpalPlan> plans)
focal_class.return: Result<Map<String, OakpalPlan>>
focal_class.signature: Result<Map<String, OakpalPlan>> copyPlans(final @NotNull File toDir, final @NotNull List<OakpalPlan> plans)
focal_class.class_method_signature: OpearPackageMojo.copyUrlStreams(final @NotNull File toDir,
                                                     final @NotNull List<URL> urls)
focal_class.full_signature: static Result<Map<URL, String>> copyUrlStreams(final @NotNull File toDir,
                                                     final @NotNull List<URL> urls)
focal_class.identifier: copyUrlStreams
focal_class.modifiers: static
focal_class.parameters: (final @NotNull File toDir,
                                                     final @NotNull List<URL> urls)
focal_class.return: Result<Map<URL, String>>
focal_class.signature: Result<Map<URL, String>> copyUrlStreams(final @NotNull File toDir,
                                                     final @NotNull List<URL> urls)
focal_class.superclass: extends AbstractCommonMojo
focal_method.body: @Override
      public void execute() throws MojoExecutionException, MojoFailureException {
          resolveDependencies(project.getDependencies(), true);
          try {
              final File finalFile = assembleOpear();
              attachArtifact(finalFile);
          } catch (Exception e) {
              throw new MojoExecutionException("Failed to assemble the opear file.", e);
          }
      }
focal_method.class_method_signature: OpearPackageMojo.execute()
focal_method.full_signature: @Override public void execute()
focal_method.identifier: execute
focal_method.invocations: resolveDependencies getDependencies assembleOpear attachArtifact
focal_method.modifiers: @Override public
focal_method.parameters: ()
focal_method.return: void
focal_method.signature: void execute()