blob: 90831696c13e59dbcd9e0eb17b625f6b109bac3c [file] [log] [blame]
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you 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
~
~ http://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.apache.sling.scriptingbundle.maven.plugin;
import java.io.File;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.MojoExecution;
import org.apache.maven.plugin.testing.MojoRule;
import org.apache.maven.project.MavenProject;
import org.junit.After;
import org.junit.Rule;
import org.junit.Test;
import org.osgi.framework.Constants;
import org.osgi.framework.VersionRange;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class MetadataMojoTest {
@Rule
public MojoRule mojoRule = new MojoRule();
@After
public void after() {
System.clearProperty("basedir");
}
@Test
public void testProject1() throws Exception {
MojoProject mojoProject = getMojoProject(getProjectLocation("project-1"));
mojoProject.mojo.execute();
Capabilities capabilities = mojoProject.mojo.getCapabilities();
Set<ProvidedCapability> pExpected = new HashSet<>(Arrays.asList(
// org/apache/sling/bar/1.0.0
ProvidedCapability.builder().withResourceType("org/apache/sling/bar").withScriptEngine("htl").withVersion("1.0.0").build(),
ProvidedCapability.builder().withResourceType("org/apache/sling/bar").withScriptEngine("htl").withVersion("1.0.0").withSelectors(Arrays.asList("depth1"
, "100")).build(),
ProvidedCapability.builder().withResourceType("org/apache/sling/bar").withScriptEngine("htl").withVersion("1.0.0").withSelectors(Arrays.asList("depth1"
, "200")).build(),
ProvidedCapability.builder().withResourceType("org/apache/sling/bar").withScriptEngine("htl").withVersion("1.0.0").withSelectors(Arrays.asList("depth1"
, "depth2", "100")).build(),
// org/apache/sling/foo
ProvidedCapability.builder().withResourceType("org/apache/sling/foo").withScriptEngine("htl").build(),
ProvidedCapability.builder().withResourceType("org/apache/sling/foo").withScriptEngine("htl").withSelectors(Arrays.asList("depth1"
, "100")).build(),
ProvidedCapability.builder().withResourceType("org/apache/sling/foo").withScriptEngine("htl").withSelectors(Arrays.asList("depth1"
, "200")).build(),
ProvidedCapability.builder().withResourceType("org/apache/sling/foo").withScriptEngine("htl").withSelectors(Arrays.asList("depth1"
, "depth2", "100")).build(),
// org.apache.sling.foobar/1.0.0
ProvidedCapability.builder().withResourceType("org.apache.sling.foobar").withScriptEngine("htl").withVersion("1.0.0").build(),
ProvidedCapability.builder().withResourceType("org.apache.sling.foobar").withVersion("1.0.0").withExtendsResourceType("org/apache/sling/bar").build(),
ProvidedCapability.builder().withResourceType("org.apache.sling.foobar").withScriptEngine("htl").withVersion("1.0.0").withSelectors(Arrays.asList("depth1"
, "100")).build(),
ProvidedCapability.builder().withResourceType("org.apache.sling.foobar").withScriptEngine("htl").withVersion("1.0.0").withSelectors(Arrays.asList("depth1"
, "200")).build(),
ProvidedCapability.builder().withResourceType("org.apache.sling.foobar").withScriptEngine("htl").withVersion("1.0.0").withSelectors(Arrays.asList("depth1"
, "depth2", "100")).build(),
// org.apache.sling.foobar
ProvidedCapability.builder().withResourceType("org.apache.sling.foobar").withExtendsResourceType("org/apache/sling/bar").build(),
ProvidedCapability.builder().withResourceType("org.apache.sling.foobar").withScriptEngine("htl").withSelectors(Arrays.asList("depth1"
, "100")).build(),
ProvidedCapability.builder().withResourceType("org.apache.sling.foobar").withScriptEngine("htl").withSelectors(Arrays.asList("depth1"
, "200")).build(),
ProvidedCapability.builder().withResourceType("org.apache.sling.foobar").withScriptEngine("htl").withSelectors(Arrays.asList("depth1"
, "depth2", "100")).build(),
ProvidedCapability.builder().withResourceType("org.apache.sling.foobar").withScriptEngine("htl").withRequestMethod("GET").build(),
ProvidedCapability.builder().withResourceType("org.apache.sling.foobar").withScriptEngine("htl").withRequestMethod("GET").withSelectors(Arrays.asList("test")).build(),
ProvidedCapability.builder().withResourceType("org.apache.sling.foobar").withScriptEngine("htl").withRequestMethod("GET").withRequestExtension("txt").build(),
ProvidedCapability.builder().withResourceType("org.apache.sling.foobar").withScriptEngine("htl").withSelectors(Arrays.asList("test")).withRequestExtension("txt").build(),
// sling
ProvidedCapability.builder().withResourceType("sling").withScriptEngine("htl").build()
));
Set<ProvidedCapability> provided = new HashSet<>(capabilities.getProvidedCapabilities());
assertEquals(pExpected.size(), provided.size());
for (ProvidedCapability capability : pExpected) {
boolean removed = provided.remove(capability);
assertTrue(String.format("Did not find expected provided capability %s.", capability), removed);
}
Set<RequiredCapability> rExpected = new HashSet<>(Arrays.asList(
RequiredCapability.builder().withResourceType("sling/default").withVersionRange(VersionRange.valueOf("[1.0.0,2.0.0)")).build(),
RequiredCapability.builder().withResourceType("org/apache/sling/bar").build(),
RequiredCapability.builder().withResourceType("org/apache/sling/bar").withVersionRange(VersionRange.valueOf("[1.0.0,2.0.0)")).build()
));
Set<RequiredCapability> required = new HashSet<>(capabilities.getRequiredCapabilities());
assertEquals(rExpected.size(), required.size());
for (RequiredCapability capability : rExpected) {
boolean removed = required.remove(capability);
assertTrue(String.format("Did not find expected required capability %s.", capability), removed);
}
assertEquals(
"sling.resourceType;sling.resourceType=\"sling\";scriptEngine=\"htl\"," +
"sling.resourceType;sling.resourceType=\"org/apache/sling/foo\";scriptEngine=\"htl\"," +
"sling.resourceType;sling.resourceType=\"org/apache/sling/foo\";scriptEngine=\"htl\";sling.resourceType.selectors:List<String>=\"depth1,depth2,100\"," +
"sling.resourceType;sling.resourceType=\"org/apache/sling/foo\";scriptEngine=\"htl\";sling.resourceType.selectors:List<String>=\"depth1,100\"," +
"sling.resourceType;sling.resourceType=\"org/apache/sling/foo\";scriptEngine=\"htl\";sling.resourceType.selectors:List<String>=\"depth1,200\"," +
"sling.resourceType;sling.resourceType=\"org/apache/sling/bar\";scriptEngine=\"htl\";version:Version=\"1.0.0\"," +
"sling.resourceType;sling.resourceType=\"org/apache/sling/bar\";scriptEngine=\"htl\";version:Version=\"1.0.0\";sling.resourceType.selectors:List<String>=\"depth1,depth2,100\"," +
"sling.resourceType;sling.resourceType=\"org/apache/sling/bar\";scriptEngine=\"htl\";version:Version=\"1.0.0\";sling.resourceType.selectors:List<String>=\"depth1,100\"," +
"sling.resourceType;sling.resourceType=\"org/apache/sling/bar\";scriptEngine=\"htl\";version:Version=\"1.0.0\";sling.resourceType.selectors:List<String>=\"depth1,200\"," +
"sling.resourceType;sling.resourceType=\"org.apache.sling.foobar\";version:Version=\"1.0.0\";extends=\"org/apache/sling/bar\"," +
"sling.resourceType;sling.resourceType=\"org.apache.sling.foobar\";scriptEngine=\"htl\";version:Version=\"1.0.0\";sling.resourceType.selectors:List<String>=\"depth1,depth2,100\"," +
"sling.resourceType;sling.resourceType=\"org.apache.sling.foobar\";scriptEngine=\"htl\";version:Version=\"1.0.0\";sling.resourceType.selectors:List<String>=\"depth1,100\"," +
"sling.resourceType;sling.resourceType=\"org.apache.sling.foobar\";scriptEngine=\"htl\";version:Version=\"1.0.0\";sling.resourceType.selectors:List<String>=\"depth1,200\"," +
"sling.resourceType;sling.resourceType=\"org.apache.sling.foobar\";scriptEngine=\"htl\";version:Version=\"1.0.0\"," +
"sling.resourceType;sling.resourceType=\"org.apache.sling.foobar\";extends=\"org/apache/sling/bar\"," +
"sling.resourceType;sling.resourceType=\"org.apache.sling.foobar\";scriptEngine=\"htl\";sling.resourceType.extensions:List<String>=\"txt\";sling.resourceType.selectors:List<String>=\"test\"," +
"sling.resourceType;sling.resourceType=\"org.apache.sling.foobar\";scriptEngine=\"htl\";sling.resourceType.selectors:List<String>=\"depth1,depth2,100\"," +
"sling.resourceType;sling.resourceType=\"org.apache.sling.foobar\";scriptEngine=\"htl\";sling.resourceType.selectors:List<String>=\"depth1,100\"," +
"sling.resourceType;sling.resourceType=\"org.apache.sling.foobar\";scriptEngine=\"htl\";sling.resourceType.selectors:List<String>=\"depth1,200\"," +
"sling.resourceType;sling.resourceType=\"org.apache.sling.foobar\";scriptEngine=\"htl\";sling.servlet.methods:List<String>=\"GET\";sling.resourceType.extensions:List<String>=\"txt\"," +
"sling.resourceType;sling.resourceType=\"org.apache.sling.foobar\";scriptEngine=\"htl\";sling.servlet.methods:List<String>=\"GET\"," +
"sling.resourceType;sling.resourceType=\"org.apache.sling.foobar\";scriptEngine=\"htl\";sling.servlet.methods:List<String>=\"GET\";sling.resourceType.selectors:List<String>=\"test\"",
mojoProject.project.getProperties().getProperty(MetadataMojo.class.getPackage().getName() + "." + Constants.PROVIDE_CAPABILITY));
assertEquals(
"sling.resourceType;filter:=\"(&(!(sling.resourceType.selectors=*))(sling.resourceType=org/apache/sling/bar))\"," +
"sling.resourceType;filter:=\"(&(!(sling.resourceType.selectors=*))(&(&(version>=1.0.0)(!(version>=2.0.0)))(sling.resourceType=sling/default)))\"," +
"sling.resourceType;filter:=\"(&(!(sling.resourceType.selectors=*))(&(&(version>=1.0.0)(!(version>=2.0.0)))(sling.resourceType=org/apache/sling/bar)))\"",
mojoProject.project.getProperties().getProperty(MetadataMojo.class.getPackage().getName() + "." + Constants.REQUIRE_CAPABILITY));
}
private MojoProject getMojoProject(File projectDirectory) throws Exception {
MavenProject project = mojoRule.readMavenProject(projectDirectory);
MavenSession session = mojoRule.newMavenSession(project);
MojoExecution execution = mojoRule.newMojoExecution("metadata");
MetadataMojo validateMojo = (MetadataMojo) mojoRule.lookupConfiguredMojo(session, execution);
MojoProject mojoProject = new MojoProject();
mojoProject.mojo = validateMojo;
mojoProject.project = project;
return mojoProject;
}
private static class MojoProject {
MetadataMojo mojo;
MavenProject project;
}
private File getProjectLocation(String projectName) {
return Paths.get("src", "test", "resources", projectName).toFile();
}
}