/*
* Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Nuxeo - initial API and implementation
*
*/
package org.eclipse.ecr.convert.tests;
import java.util.List;
import org.eclipse.ecr.core.api.Blob;
import org.eclipse.ecr.core.api.blobholder.BlobHolder;
import org.eclipse.ecr.core.api.blobholder.SimpleBlobHolder;
import org.eclipse.ecr.core.api.impl.blob.StringBlob;
import org.eclipse.ecr.convert.api.ConversionService;
import org.eclipse.ecr.convert.api.ConverterCheckResult;
import org.eclipse.ecr.convert.api.ConverterNotAvailable;
import org.eclipse.ecr.convert.api.ConverterNotRegistered;
import org.eclipse.ecr.convert.extension.ChainedConverter;
import org.eclipse.ecr.convert.extension.Converter;
import org.eclipse.ecr.convert.extension.ConverterDescriptor;
import org.eclipse.ecr.convert.service.ConversionServiceImpl;
import org.eclipse.ecr.runtime.api.Framework;
import org.eclipse.ecr.testlib.NXRuntimeTestCase;
public class TestService extends NXRuntimeTestCase {
public static final String TEST_BUNDLE = "org.eclipse.ecr.convert.test";
public static final String ANY2TEXT = "any2text";
@Override
public void setUp() throws Exception {
super.setUp();
deployBundle("org.eclipse.ecr.core.api");
deployBundle("org.eclipse.ecr.convert.api");
deployBundle("org.eclipse.ecr.convert");
}
public void testServiceRegistration() {
ConversionService cs = Framework.getLocalService(ConversionService.class);
assertNotNull(cs);
}
public void testServiceContrib() throws Exception {
deployContrib(TEST_BUNDLE, "OSGI-INF/converters-test-contrib1.xml");
ConversionService cs = Framework.getLocalService(ConversionService.class);
Converter cv1 = ConversionServiceImpl.getConverter("dummy1");
assertNotNull(cv1);
ConverterDescriptor desc1 = ConversionServiceImpl.getConverterDescriptor("dummy1");
assertNotNull(desc1);
assertEquals("test/me", desc1.getDestinationMimeType());
assertSame(2, desc1.getSourceMimeTypes().size());
assertTrue(desc1.getSourceMimeTypes().contains("text/plain"));
assertTrue(desc1.getSourceMimeTypes().contains("text/xml"));
}
public void testConverterLookup() throws Exception {
deployContrib(TEST_BUNDLE, "OSGI-INF/converters-test-contrib1.xml");
ConversionService cs = Framework.getLocalService(ConversionService.class);
String converterName = cs.getConverterName("text/plain", "test/me");
assertEquals("dummy1", converterName);
converterName = cs.getConverterName("text/plain2", "test/me");
assertNull(converterName);
deployContrib(TEST_BUNDLE, "OSGI-INF/converters-test-contrib2.xml");
if (true) {
return;
}
converterName = cs.getConverterName("test/me", "foo/bar");
assertEquals("dummy2", converterName);
converterName = cs.getConverterName("text/plain", "foo/bar");
assertEquals("dummyChain", converterName);
Converter cv = ConversionServiceImpl.getConverter("dummyChain");
assertNotNull(cv);
boolean isChain = false;
if (cv instanceof ChainedConverter) {
ChainedConverter ccv = (ChainedConverter) cv;
List<String> steps = ccv.getSteps();
assertNotNull(steps);
assertSame(2, steps.size());
assertTrue(steps.contains("test/me"));
assertTrue(steps.contains("foo/bar"));
isChain = true;
}
assertTrue(isChain);
converterName = cs.getConverterName("something", "somethingelse");
assertEquals("custom", converterName);
converterName = cs.getConverterName("any", "somethingelse");
assertEquals("wildcard", converterName);
converterName = cs.getConverterName("text/plain", "jacky/chan");
assertEquals("dummyChain2", converterName);
Converter cv2 = ConversionServiceImpl.getConverter("dummyChain2");
assertNotNull(cv2);
isChain = false;
if (cv2 instanceof ChainedConverter) {
ChainedConverter ccv = (ChainedConverter) cv2;
List<String> steps = ccv.getSteps();
assertNull(steps);
isChain = true;
}
assertTrue(isChain);
}
public void testAvailability() throws Exception {
deployContrib(TEST_BUNDLE, "OSGI-INF/converters-test-contrib2.xml");
deployContrib(TEST_BUNDLE, "OSGI-INF/converters-test-contrib4.xml");
ConversionService cs = Framework.getLocalService(ConversionService.class);
ConverterCheckResult result = null;
// ** not existing converter
// check registration check
boolean notRegistred = false;
try {
result = cs.isConverterAvailable("toto");
} catch (ConverterNotRegistered e) {
notRegistred = true;
}
assertTrue(notRegistred);
// check call
notRegistred = false;
try {
cs.convert("toto", new SimpleBlobHolder(new StringBlob("")), null);
} catch (ConverterNotRegistered e) {
notRegistred = true;
}
assertTrue(notRegistred);
// not available converter
notRegistred = false;
try {
result = cs.isConverterAvailable("NotAvailableConverter");
} catch (ConverterNotRegistered e) {
notRegistred = true;
}
assertFalse(notRegistred);
assertFalse(result.isAvailable());
assertNotNull(result.getErrorMessage());
assertNotNull(result.getInstallationMessage());
notRegistred = false;
boolean notAvailable = false;
try {
cs.convert("NotAvailableConverter", new SimpleBlobHolder(
new StringBlob("")), null);
} catch (ConverterNotRegistered e) {
notRegistred = true;
} catch (ConverterNotAvailable e) {
notAvailable = true;
}
assertFalse(notRegistred);
assertTrue(notAvailable);
// ** available converter
notRegistred = false;
notAvailable = false;
try {
result = cs.isConverterAvailable("dummy2");
} catch (ConverterNotRegistered e) {
notRegistred = true;
}
assertFalse(notRegistred);
assertTrue(result.isAvailable());
assertNull(result.getErrorMessage());
assertNull(result.getInstallationMessage());
assertSame(2, result.getSupportedInputMimeTypes().size());
notRegistred = false;
try {
cs.convert("dummy2", new SimpleBlobHolder(new StringBlob("")), null);
} catch (ConverterNotRegistered e) {
notRegistred = true;
} catch (ConverterNotAvailable e) {
notAvailable = true;
}
assertFalse(notRegistred);
assertFalse(notAvailable);
}
public void testServiceConfig() throws Exception {
deployContrib(TEST_BUNDLE, "OSGI-INF/convert-service-config-test.xml");
ConversionService cs = Framework.getLocalService(ConversionService.class);
assertEquals(12, ConversionServiceImpl.getGCIntervalInMinutes());
assertEquals(132, ConversionServiceImpl.getMaxCacheSizeInKB());
assertFalse(ConversionServiceImpl.isCacheEnabled());
}
public void testAny2TextConverter() throws Exception {
ConversionService cs = Framework.getLocalService(ConversionService.class);
String expected = "abc def";
BlobHolder bh = new SimpleBlobHolder(new StringBlob(expected, "text/plain", "UTF-8"));
BlobHolder res = cs.convert(ANY2TEXT, bh, null);
Blob blob = res.getBlob();
String string = new String(blob.getByteArray(), "UTF-8");
assertEquals(expected, string);
}
}