blob: 8f41a5a7e3509598fe9c9b3236d76598f331b778 [file] [log] [blame]
package org.eclipse.aether.internal.test.util;
/*
* 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.
*/
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.Collections;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.junit.Test;
public class NodeDefinitionTest
{
private void assertMatch( String text, String regex, String... groups )
{
Pattern pattern = Pattern.compile( regex );
Matcher matcher = pattern.matcher( text );
assertEquals( true, matcher.matches() );
assertTrue( groups.length + " vs " + matcher.groupCount(), groups.length <= matcher.groupCount() );
for ( int i = 1; i <= groups.length; i++ )
{
assertEquals( "Mismatch for group " + i, groups[i - 1], matcher.group( i ) );
}
}
private void assertNoMatch( String text, String regex )
{
Pattern pattern = Pattern.compile( regex );
Matcher matcher = pattern.matcher( text );
assertEquals( false, matcher.matches() );
}
@Test
public void testPatterns()
{
assertMatch( "(Example-ID_0123456789)", NodeDefinition.ID, "Example-ID_0123456789" );
assertMatch( "^Example-ID_0123456789", NodeDefinition.IDREF, "Example-ID_0123456789" );
assertMatch( "gid:aid:1", NodeDefinition.COORDS, "gid", "aid", null, null, "1" );
assertMatch( "gid:aid:jar:1", NodeDefinition.COORDS, "gid", "aid", "jar", null, "1" );
assertMatch( "gid:aid:jar:cls:1", NodeDefinition.COORDS, "gid", "aid", "jar", "cls", "1" );
assertMatch( "[1]", NodeDefinition.RANGE, "[1]" );
assertMatch( "[1,)", NodeDefinition.RANGE, "[1,)" );
assertMatch( "(1,2)", NodeDefinition.RANGE, "(1,2)" );
assertMatch( "scope = compile", NodeDefinition.SCOPE, "compile", null );
assertMatch( "scope=compile<runtime", NodeDefinition.SCOPE, "compile", "runtime" );
assertMatch( "compile<runtime", NodeDefinition.SCOPE, "compile", "runtime" );
assertNoMatch( "optional", NodeDefinition.SCOPE );
assertNoMatch( "!optional", NodeDefinition.SCOPE );
assertMatch( "optional", NodeDefinition.OPTIONAL, "optional" );
assertMatch( "!optional", NodeDefinition.OPTIONAL, "!optional" );
assertMatch( "relocations = g:a:1", NodeDefinition.RELOCATIONS, "g:a:1" );
assertMatch( "relocations=g:a:1 , g:a:2", NodeDefinition.RELOCATIONS, "g:a:1 , g:a:2" );
assertMatch( "props = Key:Value", NodeDefinition.PROPS, "Key:Value" );
assertMatch( "props=k:1 , k_2:v_2", NodeDefinition.PROPS, "k:1 , k_2:v_2" );
assertMatch( "gid:aid:1", NodeDefinition.COORDSX, "gid:aid:1", null, null );
assertMatch( "gid:aid:1[1,2)", NodeDefinition.COORDSX, "gid:aid:1", "[1,2)", null );
assertMatch( "gid:aid:1<2", NodeDefinition.COORDSX, "gid:aid:1", null, "2" );
assertMatch( "gid:aid:1(, 2)<[1, 3]", NodeDefinition.COORDSX, "gid:aid:1", "(, 2)", "[1, 3]" );
assertMatch( "gid:aid:1(, 2)<[1, 3] props=k:v scope=c<r optional relocations=g:a:v (id)", NodeDefinition.NODE,
"gid:aid:1", "(, 2)", "[1, 3]", "k:v", "c", "r", "optional", "g:a:v", "id" );
assertMatch( "gid:aid:1(, 2)<[1, 3] props=k:v c<r optional relocations=g:a:v (id)", NodeDefinition.LINE, null,
"gid:aid:1", "(, 2)", "[1, 3]", "k:v", "c", "r", "optional", "g:a:v", "id" );
assertMatch( "^id", NodeDefinition.LINE, "id", null, null, null );
}
@Test
public void testParsing_Reference()
{
NodeDefinition desc = new NodeDefinition( "^id" );
assertEquals( "id", desc.reference );
}
@Test
public void testParsing_Node()
{
NodeDefinition desc = new NodeDefinition( "g:a:1" );
assertEquals( null, desc.reference );
assertEquals( "g:a:1", desc.coords );
assertEquals( null, desc.range );
assertEquals( null, desc.premanagedVersion );
assertEquals( null, desc.scope );
assertEquals( null, desc.premanagedScope );
assertEquals( false, desc.optional );
assertEquals( null, desc.properties );
assertEquals( null, desc.relocations );
assertEquals( null, desc.id );
desc = new NodeDefinition( "gid1:aid1:ext1:ver1 scope1 !optional" );
assertEquals( null, desc.reference );
assertEquals( "gid1:aid1:ext1:ver1", desc.coords );
assertEquals( null, desc.range );
assertEquals( null, desc.premanagedVersion );
assertEquals( "scope1", desc.scope );
assertEquals( null, desc.premanagedScope );
assertEquals( false, desc.optional );
assertEquals( null, desc.properties );
assertEquals( null, desc.relocations );
assertEquals( null, desc.id );
desc = new NodeDefinition( "g:a:1 optional" );
assertEquals( null, desc.reference );
assertEquals( "g:a:1", desc.coords );
assertEquals( null, desc.range );
assertEquals( null, desc.premanagedVersion );
assertEquals( null, desc.scope );
assertEquals( null, desc.premanagedScope );
assertEquals( true, desc.optional );
assertEquals( null, desc.properties );
assertEquals( null, desc.relocations );
assertEquals( null, desc.id );
desc =
new NodeDefinition( "gid:aid:1(, 2)<[1, 3]" + " props = k:v" + " scope=c<r" + " optional"
+ " relocations = g:a:v , g:a:1" + " (id)" );
assertEquals( null, desc.reference );
assertEquals( "gid:aid:1", desc.coords );
assertEquals( "(, 2)", desc.range );
assertEquals( "[1, 3]", desc.premanagedVersion );
assertEquals( "c", desc.scope );
assertEquals( "r", desc.premanagedScope );
assertEquals( true, desc.optional );
assertEquals( Collections.singletonMap( "k", "v" ), desc.properties );
assertEquals( Arrays.asList( "g:a:v", "g:a:1" ), desc.relocations );
assertEquals( "id", desc.id );
}
}