/*
* Copyright 2012
* Ubiquitous Knowledge Processing (UKP) Lab
* Technische Universität Darmstadt
*
* 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.
*/
package de.tudarmstadt.ukp.dkpro.core.api.resources;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
import java.net.URL;
import java.util.Map;
import java.util.Properties;
import org.apache.uima.cas.CAS;
import org.apache.uima.resource.metadata.impl.TypeSystemDescription_impl;
import org.apache.uima.util.CasCreationUtils;
import org.junit.Test;
public class MappingProviderTest
{
@Test
public void testLanguageChange() throws Exception
{
MappingProvider mappingProvider = new MappingProvider();
mappingProvider.setDefault(MappingProvider.LOCATION, "src/test/resources/${language}.map");
CAS cas = CasCreationUtils.createCas(new TypeSystemDescription_impl(), null, null);
cas.setDocumentLanguage("en");
mappingProvider.configure(cas);
Map<String, String> enMap = mappingProvider.getResource();
assertEquals("en", enMap.get("value"));
cas.setDocumentLanguage("de");
mappingProvider.configure(cas);
Map<String, String> deMap = mappingProvider.getResource();
assertEquals("de", deMap.get("value"));
}
@Test
public void testDefaultVariantWithLanguageOverride() throws Exception
{
Properties defaultVariants = new Properties();
defaultVariants.setProperty("de", "variant1");
defaultVariants.setProperty("en", "variant2");
MappingProvider mappingProvider = new MappingProvider();
mappingProvider.setDefaultVariants(defaultVariants);
mappingProvider.setDefault(MappingProvider.LOCATION, "${language}-${variant}.map");
CAS cas = CasCreationUtils.createCas(new TypeSystemDescription_impl(), null, null);
// Test default behavior
cas.setDocumentLanguage("en");
mappingProvider.configure(cas);
assertEquals("en-variant2.map", mappingProvider.getModelLocation());
// Test language override affects variant
mappingProvider.setOverride(MappingProvider.LANGUAGE, "de");
mappingProvider.configure(cas);
assertEquals("de-variant1.map", mappingProvider.getModelLocation());
// Test variant can still be overridden after language override
mappingProvider.setOverride(MappingProvider.LANGUAGE, "de");
mappingProvider.setOverride(MappingProvider.VARIANT, "variant3");
mappingProvider.configure(cas);
assertEquals("de-variant3.map", mappingProvider.getModelLocation());
}
@Test
public void testTagsetChange() throws Exception
{
CasConfigurableProviderBase<String> modelProvider = new CasConfigurableProviderBase<String>()
{
{
setDefault(LOCATION, "src/test/resources/${language}.model");
}
@Override
protected String produceResource(URL aUrl)
throws IOException
{
return aUrl.toString();
}
};
MappingProvider mappingProvider = new MappingProvider();
mappingProvider.setDefault(MappingProvider.LOCATION, "src/test/resources/${language}-${tagset}.map");
mappingProvider.addImport("tagset", modelProvider);
CAS cas = CasCreationUtils.createCas(new TypeSystemDescription_impl(), null, null);
cas.setDocumentLanguage("en");
modelProvider.configure(cas);
mappingProvider.configure(cas);
Map<String, String> enMap = mappingProvider.getResource();
assertEquals("en", enMap.get("value"));
assertEquals("mytags1", enMap.get("tagset"));
cas.setDocumentLanguage("de");
modelProvider.configure(cas);
mappingProvider.configure(cas);
Map<String, String> deMap = mappingProvider.getResource();
assertEquals("de", deMap.get("value"));
assertEquals("mytags2", deMap.get("tagset"));
}
@Test
public void testRedirectedModel() throws Exception
{
CasConfigurableProviderBase<String> modelProvider = new CasConfigurableProviderBase<String>()
{
{
setDefault(LOCATION, "src/test/resources/${language}-redirect2.properties");
}
@Override
protected String produceResource(URL aUrl)
throws IOException
{
return aUrl.toString();
}
};
MappingProvider mappingProvider = new MappingProvider();
mappingProvider.setDefault(MappingProvider.LOCATION, "src/test/resources/${language}-${tagset}.map");
mappingProvider.addImport("tagset", modelProvider);
CAS cas = CasCreationUtils.createCas(new TypeSystemDescription_impl(), null, null);
cas.setDocumentLanguage("de");
modelProvider.configure(cas);
mappingProvider.configure(cas);
Map<String, String> deMap = mappingProvider.getResource();
assertEquals("de-override", deMap.get("value"));
Properties meta = modelProvider.getResourceMetaData();
assertEquals("mytags1", meta.getProperty("tagset"));
assertEquals("true", meta.getProperty("redirect"));
assertEquals("true", meta.getProperty("redirect2"));
}
@Test
public void testRedirectedTagset() throws Exception
{
MappingProvider mappingProvider = new MappingProvider();
mappingProvider.setOverride(MappingProvider.LOCATION, "src/test/resources/${language}-${tagset}.map");
mappingProvider.setDefault("tagset", "redirect");
CAS cas = CasCreationUtils.createCas(new TypeSystemDescription_impl(), null, null);
cas.setDocumentLanguage("de");
mappingProvider.configure(cas);
Map<String, String> deMap = mappingProvider.getResource();
assertEquals("de", deMap.get("value"));
Properties meta = mappingProvider.getResourceMetaData();
assertEquals("redirected", meta.getProperty("tagset"));
}
}