/*******************************************************************************
* Copyright (c) 2008 Olivier Moises
*
* 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:
* Olivier Moises- initial API and implementation
*******************************************************************************/
package org.eclipse.wazaabi.engine.core.tests.nonosgi;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertNotNull;
import java.lang.reflect.Field;
import junit.framework.Assert;
import org.eclipse.wazaabi.engine.edp.adapters.ConverterAdapter;
import org.eclipse.wazaabi.engine.edp.bundled.converters.TestBundledBasicConverter;
import org.eclipse.wazaabi.engine.edp.coderesolution.AbstractCodeDescriptor;
import org.eclipse.wazaabi.engine.edp.converters.BundledConverter;
import org.eclipse.wazaabi.engine.edp.exceptions.OperationAborted;
import org.eclipse.wazaabi.engine.edp.tests.ReflectionUtils;
import org.eclipse.wazaabi.locator.platform.plugin.codedescriptors.PluginCodeDescriptor;
import org.eclipse.wazaabi.locator.urn.java.codedescriptors.JavaCodeDescriptor;
import org.eclipse.wazaabi.mm.edp.handlers.Converter;
import org.eclipse.wazaabi.mm.edp.handlers.EDPHandlersFactory;
import org.junit.Test;
public class TestConverterAdapter extends AbstractTestOperationAdapter {
public static final String BASIC_CONVERTER_HANDLER = "urn:java:org.eclipse.wazaabi.engine.edp.tests.handlers.BasicConverterHandler"; //$NON-NLS-1$
public static final String BAD_CONVERTER_HANDLER = "urn:java:org.eclipse.wazaabi.engine.edp.tests.handlers.BadConverterHandler"; //$NON-NLS-1$
public static final String BASIC_CONVERTER_HANDLER_ID = "TestBasicConverter";
@Test
public void testAddAdapterToModel() {
Converter converter = EDPHandlersFactory.eINSTANCE.createConverter();
converter.setUri(BASIC_CONVERTER_HANDLER);
ConverterAdapter converterAdapter = new ConverterAdapter();
converter.eAdapters().add(converterAdapter);
AbstractCodeDescriptor codeDescriptor = converterAdapter
.getCodeDescriptor();
assertTrue(codeDescriptor instanceof JavaCodeDescriptor);
assertFalse(codeDescriptor instanceof PluginCodeDescriptor);
assertTrue(BASIC_CONVERTER_HANDLER.equals(codeDescriptor.getUri()));
// test <code>public int execute(int a, int b)</code>
Object result = ReflectionUtils.invokeMethod(
converterAdapter.getCodeDescriptor(), "convert",
new Class[] { int.class }, int.class, new Object[] { 2 });
assertTrue(result instanceof Integer);
assertTrue(((Integer) result) == 7);
// at this time, the secondHandler must not have been disposed
assertTrue(Boolean.FALSE.equals(ReflectionUtils.invokeMethod(
codeDescriptor, "isDisposed", null, boolean.class, null)));
converter.setUri(null);
// now, the secondHandler must have been disposed
assertTrue(Boolean.TRUE.equals(ReflectionUtils.invokeMethod(
codeDescriptor, "isDisposed", null, boolean.class, null)));
}
@Test
public void testAddAdapterToModelWithException() {
Converter converter = EDPHandlersFactory.eINSTANCE.createConverter();
converter.setUri(BAD_CONVERTER_HANDLER);
ConverterAdapter converterAdapter = new ConverterAdapter();
converter.eAdapters().add(converterAdapter);
AbstractCodeDescriptor codeDescriptor = converterAdapter
.getCodeDescriptor();
assertTrue(codeDescriptor instanceof JavaCodeDescriptor);
assertFalse(codeDescriptor instanceof PluginCodeDescriptor);
assertTrue(BAD_CONVERTER_HANDLER.equals(codeDescriptor.getUri()));
// test <code>public int execute(int a, int b)</code>
Object result = null;
try {
result = ReflectionUtils.invokeMethod(
converterAdapter.getCodeDescriptor(), "convert",
new Class[] { int.class }, int.class, new Object[] { 2 });
} catch (RuntimeException e) {
Assert.assertTrue(e.getCause() instanceof OperationAborted);
}
Assert.assertNull(result);
// at this time, the secondHandler must not have been disposed
assertTrue(Boolean.FALSE.equals(ReflectionUtils.invokeMethod(
codeDescriptor, "isDisposed", null, boolean.class, null)));
converter.setUri(null);
// now, the secondHandler must have been disposed
assertTrue(Boolean.TRUE.equals(ReflectionUtils.invokeMethod(
codeDescriptor, "isDisposed", null, boolean.class, null)));
}
@Test
public void testIsAdapterForTypeObject() {
ConverterAdapter converterAdapter = new ConverterAdapter();
assertTrue(converterAdapter
.isAdapterForType(EDPHandlersFactory.eINSTANCE
.createConverter()));
}
@Test
public void testRemoveAdapterFromModel() {
Converter model = EDPHandlersFactory.eINSTANCE.createConverter();
model.setUri(BASIC_CONVERTER_HANDLER);
ConverterAdapter converterAdapter = new ConverterAdapter();
model.eAdapters().add(converterAdapter);
AbstractCodeDescriptor codeDescriptor = converterAdapter
.getCodeDescriptor();
assertTrue(codeDescriptor instanceof JavaCodeDescriptor);
assertFalse(codeDescriptor instanceof PluginCodeDescriptor);
assertTrue(BASIC_CONVERTER_HANDLER.equals(codeDescriptor.getUri()));
// test <code>public int execute(int a, int b)</code>
Object result = ReflectionUtils.invokeMethod(
converterAdapter.getCodeDescriptor(), "convert",
new Class[] { int.class }, int.class, new Object[] { 2 });
assertTrue(result instanceof Integer);
assertTrue((Integer) result == 7);
// at this time, the secondHandler must not have been disposed
assertTrue(Boolean.FALSE.equals(ReflectionUtils.invokeMethod(
codeDescriptor, "isDisposed", null, boolean.class, null)));
model.eAdapters().remove(converterAdapter);
// now, the secondHandler must have been disposed
assertTrue(Boolean.TRUE.equals(ReflectionUtils.invokeMethod(
codeDescriptor, "isDisposed", null, boolean.class, null)));
}
@Test
public void testAddAdapterToModelbyOSGiDS() {
Converter converter = EDPHandlersFactory.eINSTANCE.createConverter();
converter.setId(BASIC_CONVERTER_HANDLER_ID);
ConverterAdapter converterAdapter = new ConverterAdapter();
converter.eAdapters().add(converterAdapter);
BundledConverter bundledConverter = getBundledConverter(converterAdapter);
assertNotNull(bundledConverter);
assertTrue(bundledConverter instanceof BundledConverter);
assertTrue(bundledConverter instanceof TestBundledBasicConverter);
Object result = bundledConverter.convert(2);
assertTrue(result instanceof Integer);
assertTrue(((Integer) result) == 8);
// // at this time, the secondHandler must not have been disposed
// assertTrue(Boolean.FALSE.equals(bundledConverter.isDisposed()));
// converter.setId(null);
// // now, the secondHandler must have been disposed
// assertTrue(Boolean.TRUE.equals(bundledConverter.isDisposed()));
}
@Test
public void testMixOSGiDSAndDeferred() {
Converter converter = EDPHandlersFactory.eINSTANCE.createConverter();
converter.setId(BASIC_CONVERTER_HANDLER_ID);
converter.setUri(BASIC_CONVERTER_HANDLER);
ConverterAdapter converterAdapter = new ConverterAdapter();
converter.eAdapters().add(converterAdapter);
BundledConverter bundledConverter = getBundledConverter(converterAdapter);
assertNotNull(bundledConverter);
assertTrue(bundledConverter instanceof BundledConverter);
assertTrue(bundledConverter instanceof TestBundledBasicConverter);
Object result = bundledConverter.convert(2);
assertTrue(result instanceof Integer);
assertTrue(((Integer) result) == 8);
// // at this time, the secondHandler must not have been disposed
// assertTrue(Boolean.FALSE.equals(bundledConverter.isDisposed()));
converter.setId(null);
// now, the secondHandler must have been disposed
// assertTrue(Boolean.TRUE.equals(bundledConverter.isDisposed()));
AbstractCodeDescriptor codeDescriptor = converterAdapter
.getCodeDescriptor();
assertTrue(codeDescriptor instanceof JavaCodeDescriptor);
assertFalse(codeDescriptor instanceof PluginCodeDescriptor);
assertTrue(BASIC_CONVERTER_HANDLER.equals(codeDescriptor.getUri()));
// test <code>public int execute(int a, int b)</code>
result = ReflectionUtils.invokeMethod(
converterAdapter.getCodeDescriptor(), "convert",
new Class[] { int.class }, int.class, new Object[] { 2 });
assertTrue(result instanceof Integer);
assertTrue(((Integer) result) == 7);
}
protected BundledConverter getBundledConverter(
ConverterAdapter converterAdapter) {
try {
Field privateStringField = ConverterAdapter.class
.getDeclaredField("bundledConverter"); //$NON-NLS-1$
privateStringField.setAccessible(true);
return (BundledConverter) privateStringField.get(converterAdapter);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
}