Skip to content

Commit

Permalink
Unit test for no resources in the target folder
Browse files Browse the repository at this point in the history
  • Loading branch information
BoykoAlex authored and akurtakov committed Oct 3, 2024
1 parent 6e92f59 commit 17b2d4e
Show file tree
Hide file tree
Showing 5 changed files with 159 additions and 0 deletions.
41 changes: 41 additions & 0 deletions org.eclipse.m2e.core.tests/resources/projects/demo/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.8</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.example.demo;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class DemoApplicationTests {

@Test
void contextLoads() {
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
/*******************************************************************************
* Copyright (c) 2023 Alex Boyko and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.m2e.core;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;

import org.apache.commons.io.FileUtils;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.m2e.tests.common.AbstractMavenProjectTestCase;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class AppPropsNotCopiedIntoTargetTest extends AbstractMavenProjectTestCase {

private File projectDirectory;

@Override
@Before
public void setUp() throws Exception {
super.setUp();
setAutoBuilding(true);
projectDirectory = new File(Files.createTempDirectory("m2e-tests").toFile(), "demo");
projectDirectory.mkdirs();
copyDir(new File("resources/projects/demo"), projectDirectory);
}

@Override
@After
public void tearDown() throws Exception {
FileUtils.deleteDirectory(this.projectDirectory.getParentFile());
super.tearDown();
}

@Test
public void test() throws Exception {
IProject project = importProject(new File(projectDirectory, "pom.xml").toString());
waitForJobsToComplete(monitor);

IJavaProject jp = JavaCore.create(project);

assertTrue("Build Automatically is NOT on!", isAutoBuilding());

IPath rootPath = project.getWorkspace().getRoot().getLocation();

// Project imported for the first time and built - everything is properly in the target folder
assertTrue("'application.properties' is NOT in the output folder", rootPath.append(jp.getOutputLocation()).append("/application.properties").toFile()
.exists());
assertTrue("'DemoApplication.class' is NOT in the output folder", rootPath.append(jp.getOutputLocation())
.append("/com/example/demo/DemoApplication.class").makeAbsolute().toFile().exists());

IFile pomXml = project.getFile("pom.xml");
String content = Files.readString(Path.of(pomXml.getLocationURI()));
pomXml.setContents(new ByteArrayInputStream("Nothing".getBytes()), true, false, null);

waitForJobsToComplete(monitor);
Thread.sleep(5000);
// Invalid pom file. JavaBuilder built java sources but MavenBuilder wqs unable to do anything hence no resources in the target folder except for compiled classes
assertFalse("'application.properties' hasn't been removed from the output folder", rootPath.append(jp.getOutputLocation()).append("/application.properties").toFile()
.exists());
assertTrue("'DemoApplication.class' should be created in the output folder by JavaBuilder", rootPath.append(jp.getOutputLocation())
.append("/com/example/demo/DemoApplication.class").toFile().exists());

pomXml.setContents(new ByteArrayInputStream(content.getBytes()), true, false, null);
waitForJobsToComplete(monitor);
Thread.sleep(5000);
// Valid pom file. Compiled classes and resources should reappear in the target folder. However, resources are missing which makes the test fail
assertTrue("'DemoApplication.class' hasn't been created in the output folder", rootPath.append(jp.getOutputLocation())
.append("/com/example/demo/DemoApplication.class").toFile().exists());
assertTrue("'application.properties' hasn't been copied in the output folder", rootPath.append(jp.getOutputLocation()).append("/application.properties").toFile()
.exists());
}

}

0 comments on commit 17b2d4e

Please sign in to comment.