/*
* #%L
* Gravia :: Resource
* %%
* Copyright (C) 2010 - 2014 JBoss by Red Hat
* %%
* Licensed 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.
* #L%
*/
package org.jboss.test.gravia.resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.jar.Manifest;
import org.jboss.gravia.resource.Capability;
import org.jboss.gravia.resource.ManifestBuilder;
import org.jboss.gravia.resource.ManifestResourceBuilder;
import org.jboss.gravia.resource.Resource;
import org.jboss.gravia.resource.ResourceIdentity;
import org.jboss.gravia.resource.Version;
import org.junit.Assert;
import org.junit.Test;
/**
* Test the Manifest parser
*
* @author thomas.diesler@jboss.com
* @since 20-Nov-2012
*/
public class ManifestResourceBuilderTestCase {
@Test
public void testGenericCapabilities() throws Exception {
ManifestBuilder manifestbuilder = new ManifestBuilder();
manifestbuilder.addIdentityCapability("some.name", "1.0.0");
manifestbuilder.addGenericCapabilities("test; effective:=\"resolve\"; test =\"aName\"; version : Version=\"1.0\"; long :Long=\"100\"; double: Double=\"1.001\"; string:String =\"aString\"; version.list:List < Version > = \"1.0, 1.1, 1.2\"; long.list : List <Long >=\"1, 2, 3, 4\"; double.list: List< Double>= \"1.001, 1.002, 1.003\"; string.list :List<String >= \"aString,bString,cString\"; string.list2:List=\"a\\\"quote,a\\,comma, aSpace ,\\start,\\,start,end\\\",end\\,\"; string.list3 :List<String>= \" aString , bString , cString \"");
manifestbuilder.addGenericCapabilities("test.multiple; attr=\"value1\"", "test.multiple; attr=\"value2\"", "test.no.attrs");
Manifest manifest = manifestbuilder.getManifest();
ManifestResourceBuilder builder = new ManifestResourceBuilder();
Resource resource = builder.load(manifest).getResource();
Assert.assertEquals(ResourceIdentity.fromString("some.name:1.0.0"), resource.getIdentity());
List<Capability> caps = resource.getCapabilities("test");
Assert.assertEquals(1, caps.size());
Assert.assertEquals("test", caps.get(0).getNamespace());
Map<String, String> dirs = caps.get(0).getDirectives();
Assert.assertEquals(1, dirs.size());
Assert.assertEquals("resolve", dirs.get("effective"));
Map<String, Object> atts = caps.get(0).getAttributes();
List<String> keys = new ArrayList<String>(atts.keySet());
Assert.assertEquals(11, keys.size());
Assert.assertEquals("test", keys.get(0));
Assert.assertEquals("aName", atts.get(keys.get(0)));
Assert.assertEquals("version", keys.get(1));
Assert.assertEquals(Version.parseVersion("1.0"), atts.get(keys.get(1)));
Assert.assertEquals("long", keys.get(2));
Assert.assertEquals(Long.valueOf("100"), atts.get(keys.get(2)));
Assert.assertEquals("double", keys.get(3));
Assert.assertEquals(Double.valueOf("1.001"), atts.get(keys.get(3)));
Assert.assertEquals("string", keys.get(4));
Assert.assertEquals("aString", atts.get(keys.get(4)));
Assert.assertEquals("version.list", keys.get(5));
List<Version> versions = Arrays.asList(Version.parseVersion("1.0"), Version.parseVersion("1.1"), Version.parseVersion("1.2"));
Assert.assertEquals(versions, atts.get(keys.get(5)));
Assert.assertEquals("long.list", keys.get(6));
List<Long> longs = Arrays.asList(Long.valueOf("1"), Long.valueOf("2"), Long.valueOf("3"), Long.valueOf("4"));
Assert.assertEquals(longs, atts.get(keys.get(6)));
Assert.assertEquals("double.list", keys.get(7));
List<Double> doubles = Arrays.asList(Double.valueOf("1.001"), Double.valueOf("1.002"), Double.valueOf("1.003"));
Assert.assertEquals(doubles, atts.get(keys.get(7)));
Assert.assertEquals("string.list", keys.get(8));
List<String> strings = Arrays.asList("aString", "bString", "cString");
Assert.assertEquals(strings, atts.get(keys.get(8)));
Assert.assertEquals("string.list2", keys.get(9));
strings = Arrays.asList("a\"quote", "a,comma", "aSpace", "\\start", ",start", "end\"", "end,");
Assert.assertEquals(strings, atts.get(keys.get(9)));
Assert.assertEquals("string.list3", keys.get(10));
strings = Arrays.asList("aString", "bString", "cString");
Assert.assertEquals(strings, atts.get(keys.get(10)));
caps = resource.getCapabilities("test.multiple");
Assert.assertEquals(2, caps.size());
Assert.assertEquals("test.multiple", caps.get(0).getNamespace());
atts = caps.get(0).getAttributes();
keys = new ArrayList<String>(atts.keySet());
Assert.assertEquals(1, keys.size());
Assert.assertEquals("attr", keys.get(0));
Assert.assertEquals("value1", atts.get(keys.get(0)));
Assert.assertEquals("test.multiple", caps.get(1).getNamespace());
atts = caps.get(1).getAttributes();
keys = new ArrayList<String>(atts.keySet());
Assert.assertEquals(1, keys.size());
Assert.assertEquals("attr", keys.get(0));
Assert.assertEquals("value2", atts.get(keys.get(0)));
caps = resource.getCapabilities("test.no.attrs");
Assert.assertEquals(1, caps.size());
Assert.assertEquals("test.no.attrs", caps.get(0).getNamespace());
atts = caps.get(0).getAttributes();
Assert.assertEquals(0, atts.size());
}
}