blob: 4f293319a47dced78bfa8202b6981b58731207b9 [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.maven.reporting;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.List;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
/**
* Test case for some public method in AbstractMavenReportRenderer.
*/
public class AbstractMavenReportRendererTest {
private static List<String> applyPattern(String pattern) throws Throwable {
try {
Method method = AbstractMavenReportRenderer.class.getDeclaredMethod("applyPattern", String.class);
method.setAccessible(true);
return (List<String>) method.invoke(null, pattern);
} catch (InvocationTargetException ite) {
throw ite.getTargetException();
}
}
private static void checkPattern(String pattern, String[] expectedResult) throws Throwable {
List<String> result = applyPattern(pattern);
assertEquals(expectedResult.length, result.size(), "result size");
int i = 0;
for (Iterator<String> it = result.iterator(); it.hasNext(); ) {
String name = it.next();
String href = it.next();
assertEquals(expectedResult[i], name);
assertEquals(expectedResult[i + 1], href);
i += 2;
}
}
private static void checkPatternIllegalArgument(String cause, String pattern) throws Throwable {
try {
applyPattern(pattern);
fail(cause + " should throw an IllegalArgumentException");
} catch (IllegalArgumentException iae) {
// ok
}
}
/**
* @throws Throwable if any
*/
@Test
public void testApplyPattern() throws Throwable {
// the most simple test
checkPattern("test {text,url}", new String[] {"test ", null, "text", "url"});
// check that link content is trimmed, and no problem if 2 text values are the same
checkPattern("test{ text , url }test", new String[] {"test", null, "text", "url", "test", null});
// check brace stacking
checkPattern("test{ {text} , url }", new String[] {"test", null, "{text}", "url"});
// check quoting
checkPatternIllegalArgument("unmatched brace", "{");
checkPattern("'{'", new String[] {"'{'", null});
checkPattern(" ' { '.", new String[] {" ' { '.", null});
// unmatched quote: the actual behavior is to ignore that they are unmatched
checkPattern(" '", new String[] {" '", null});
// but shouldn't it be different and throw an IllegalArgumentException?
// checkPatternIllegalArgument( "unmatched quote", " ' " );
// checkPatternIllegalArgument( "unmatched quote", " '" );
// impact is too important to make the change for the moment
// check double quoting
checkPattern(" ''", new String[] {" '", null});
checkPattern(" '' ", new String[] {" '", null});
checkPattern(" '' ", new String[] {" '", null});
// real world cases with quote
checkPattern("project''s info", new String[] {"project'", null, "s info", null});
checkPattern(
"it''s a question of {chance, http://en.wikipedia.org/wiki/Chance}",
new String[] {"it'", null, "s a question of ", null, "chance", "http://en.wikipedia.org/wiki/Chance"});
checkPattern("{s'inscrire,mail@mail.com}", new String[] {"s'inscrire", "mail@mail.com"});
// throwing an IllegalArgumentException in case of unmatched quote would avoid the following:
checkPattern(
"it's a question of {chance, http://en.wikipedia.org/wiki/Chance}",
new String[] {"it's a question of {chance, http://en.wikipedia.org/wiki/Chance}", null});
checkPattern("{}test,", new String[] {"", null, "test,", null});
checkPattern("Hi ${name}. How is it going, sir?", new String[] {"Hi ${name}. How is it going, sir?", null});
// MSHARED-392 multiple links
checkPattern(
"{Indiana University Extreme! Lab Software License, vesion 1.1.1,"
+ "http://www.extreme.indiana.edu/viewcvs/~checkout~/XPP3/java/LICENSE.txt}"
+ "{Public Domain,http://creativecommons.org/licenses/publicdomain}"
+ "{Apache Software License, version 1.1,http://www.apache.org/licenses/LICENSE-1.1}",
new String[] {
"Indiana University Extreme! Lab Software License, vesion 1.1.1",
"http://www.extreme.indiana.edu/viewcvs/~checkout~/XPP3/java/LICENSE.txt",
"Public Domain",
"http://creativecommons.org/licenses/publicdomain",
"Apache Software License, version 1.1",
"http://www.apache.org/licenses/LICENSE-1.1"
});
}
}