/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.test.module.extension.config; import static org.hamcrest.Matchers.allOf; import static org.hamcrest.Matchers.hasKey; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.hasValue; import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; import org.mule.runtime.core.api.Event; import org.mule.runtime.core.api.construct.Flow; import org.mule.test.heisenberg.extension.HeisenbergExtension; import org.mule.test.heisenberg.extension.model.Ricin; import org.mule.test.heisenberg.extension.model.Weapon; import org.mule.test.subtypes.extension.CarDoor; import org.mule.test.subtypes.extension.Door; import org.mule.test.subtypes.extension.FinalPojo; import org.mule.test.subtypes.extension.HouseDoor; import org.mule.test.subtypes.extension.NoGlobalPojo; import org.mule.test.subtypes.extension.NoReferencePojo; import org.mule.test.subtypes.extension.ParentShape; import org.mule.test.subtypes.extension.PojoForList; import org.mule.test.subtypes.extension.Revolver; import org.mule.test.subtypes.extension.Square; import org.mule.test.subtypes.extension.SubTypesConnectorConnection; import org.mule.test.subtypes.extension.SubTypesMappingConnector; import org.mule.test.subtypes.extension.Triangle; import org.mule.test.vegan.extension.VeganCookBook; import org.junit.Test; import java.util.List; import java.util.Map; public class SubTypesMappingParserTestCase extends AbstractConfigParserTestCase { @Override protected String getConfigFile() { return "subtypes-mapping.xml"; } @Override protected boolean isDisposeContextPerClass() { return true; } @Test public void shapeRetriever() throws Exception { Event responseEvent = flowRunner("shapeRetriever").withPayload("").run(); assertThat(responseEvent.getMessage().getPayload().getValue(), instanceOf(ParentShape.class)); ParentShape payload = (ParentShape) responseEvent.getMessage().getPayload().getValue(); assertThat(payload.getArea(), is(16)); } @Test public void doorRetriever() throws Exception { Event responseEvent = flowRunner("doorRetriever").withPayload("").run(); assertThat(responseEvent.getMessage().getPayload().getValue(), instanceOf(CarDoor.class)); CarDoor payload = (CarDoor) responseEvent.getMessage().getPayload().getValue(); assertThat(payload.getColor(), is("blue")); } @Test public void configRetriever() throws Exception { Event responseEvent = flowRunner("configRetriever").withPayload("").run(); assertThat(responseEvent.getMessage().getPayload().getValue(), instanceOf(SubTypesMappingConnector.class)); SubTypesMappingConnector payload = (SubTypesMappingConnector) responseEvent.getMessage().getPayload().getValue(); assertThat(payload.getAbstractShape(), instanceOf(Square.class)); assertThat(payload.getAbstractShape().getArea(), is(1)); assertThat(payload.getExplicitSquare(), instanceOf(Square.class)); assertThat(payload.getExplicitSquare().getArea(), is(4)); assertThat(payload.getDoorInterface(), instanceOf(CarDoor.class)); assertThat(payload.getFinalPojo(), instanceOf(FinalPojo.class)); assertThat(payload.getRicin(), instanceOf(Ricin.class)); assertThat(payload.getTriangle(), instanceOf(Triangle.class)); assertThat(payload.getOnePojos(), is(notNullValue())); assertThat(payload.getOnePojos(), hasSize(1)); assertThat(payload.getOnePojos().get(0), instanceOf(PojoForList.class)); assertThat(payload.getOnePojos().get(0).getId(), is("inner")); assertThat(payload.getWeapons(), is(notNullValue())); assertThat(payload.getWeapons(), hasSize(4)); assertRevolver(payload.getWeapons().get(0), 6); assertRicin(payload.getWeapons().get(1), 10L, "Krazy-8"); assertRicin(payload.getWeapons().get(2), 20L, "Lidia"); assertRevolver(payload.getWeapons().get(3), 0); assertThat(payload.getWeaponMap(), is(notNullValue())); assertThat(payload.getWeaponMap().entrySet(), hasSize(3)); assertRicin(payload.getWeaponMap().get("ricinChild"), 20L, "Lidia"); assertRevolver(payload.getWeaponMap().get("revolverChild"), 1); assertRevolver(payload.getWeaponMap().get("revolverMEL"), 0); } @Test public void connectionRetriever() throws Exception { Event responseEvent = flowRunner("connectionRetriever").withPayload("").run(); assertThat(responseEvent.getMessage().getPayload().getValue(), instanceOf(SubTypesConnectorConnection.class)); SubTypesConnectorConnection payload = (SubTypesConnectorConnection) responseEvent.getMessage().getPayload().getValue(); assertThat(payload.getDoor(), instanceOf(HouseDoor.class)); assertThat(payload.getShape(), instanceOf(Triangle.class)); assertThat(payload.getShape().getArea(), is(1)); } @Test public void subtypedAndConcreteParameters() throws Exception { Event responseEvent = flowRunner("subtypedAndConcreteParameters").withPayload("").run(); assertThat(responseEvent.getMessage().getPayload().getValue(), notNullValue()); List<Object> payload = (List<Object>) responseEvent.getMessage().getPayload().getValue(); assertThat(payload, hasSize(7)); assertThat(payload.get(0), instanceOf(ParentShape.class)); assertThat(((ParentShape) payload.get(0)).getArea(), is(2)); assertThat(payload.get(1), instanceOf(HouseDoor.class)); assertThat(((HouseDoor) payload.get(1)).isLocked(), is(false)); assertThat(payload.get(2), instanceOf(FinalPojo.class)); assertThat(((FinalPojo) payload.get(2)).getSomeString(), is("asChild")); assertThat(payload.get(3), instanceOf(VeganCookBook.class)); assertThat(((VeganCookBook) payload.get(3)).getNumberOfPages(), is(1)); assertThat(payload.get(4), instanceOf(Square.class)); assertThat(((Square) payload.get(4)).getSide(), is(4)); assertThat(((Square) payload.get(4)).getArea(), is(16)); assertThat(payload.get(5), instanceOf(Triangle.class)); assertThat(((Triangle) payload.get(5)).getHeight(), is(4)); assertThat(((Triangle) payload.get(5)).getArea(), is(2)); assertThat(payload.get(6), instanceOf(NoReferencePojo.class)); assertThat(((NoReferencePojo) payload.get(6)).getNumber(), is(1)); assertThat(((NoReferencePojo) payload.get(6)).getString(), is("noRef")); } @Test public void subtypedAndConcreteParametersAsAttributes() throws Exception { Event responseEvent = flowRunner("subtypedAndConcreteParametersAsAttributes").withPayload("").run(); assertThat(responseEvent.getMessage().getPayload().getValue(), notNullValue()); List<Object> payload = (List<Object>) responseEvent.getMessage().getPayload().getValue(); assertThat(payload, hasSize(7)); assertThat(payload.get(1), instanceOf(CarDoor.class)); assertThat(((CarDoor) payload.get(1)).getColor(), is("white")); assertThat(payload.get(5), instanceOf(Triangle.class)); assertThat(((Triangle) payload.get(5)).getHeight(), is(6)); assertThat(((Triangle) payload.get(5)).getArea(), is(3)); } @Test public void subtypeContributionToOtherExtension() throws Exception { HeisenbergExtension heisenberg = lookupHeisenberg("heisenberg"); assertThat(heisenberg, is(notNullValue())); List<? extends Weapon> wildCardWeapons = heisenberg.getWildCardWeapons(); assertThat(wildCardWeapons, is(notNullValue())); assertThat(wildCardWeapons, hasSize(2)); assertThat(wildCardWeapons.get(0), instanceOf(Ricin.class)); assertThat(((Ricin) wildCardWeapons.get(0)).getMicrogramsPerKilo(), is(10L)); assertThat(((Ricin) wildCardWeapons.get(0)).getDestination(), is(notNullValue())); assertThat(((Ricin) wildCardWeapons.get(0)).getDestination().getVictim(), is("Krazy-8")); assertThat(wildCardWeapons.get(1), instanceOf(Revolver.class)); assertThat(((Revolver) wildCardWeapons.get(1)).getBullets(), is(3)); } @Test public void mappedParamSource() throws Exception { try { ((Flow) getFlowConstruct("sourceWithParameterMapping")).start(); } catch (Exception e) { fail(e.getMessage()); } } @Test public void duplicatedOperationParameterAndTypeNames() throws Exception { final Object payload = flowRunner("duplicatedOperationParameterAndTypeNames").run().getMessage().getPayload().getValue(); assertThat(payload, notNullValue()); assertThat(payload, instanceOf(NoGlobalPojo.class)); } @Test public void parseRevolver() throws Exception { Revolver revolver = muleContext.getRegistry().get("sledgeHammer's"); assertThat(revolver, is(notNullValue())); assertThat(revolver.getBullets(), is(1)); } @Test public void doorIsUsedInMapAndAlone() throws Exception { final Map<Door, Map<String, Door>> payload = (Map<Door, Map<String, Door>>) flowRunner("pojoIsUsedInMapAndAlone").run().getMessage().getPayload().getValue(); assertThat(payload, hasKey(instanceOf(HouseDoor.class))); assertThat(payload, hasValue(allOf(hasKey(is("leftDoor")), hasValue(instanceOf(CarDoor.class))))); assertThat(payload, hasValue(allOf(hasKey(is("rightDoor")), hasValue(instanceOf(CarDoor.class))))); } private void assertRicin(Object payload, Long micrograms, String victim) { assertThat(payload, instanceOf(Ricin.class)); assertThat(((Ricin) payload).getMicrogramsPerKilo(), is(micrograms)); assertThat(((Ricin) payload).getDestination(), is(notNullValue())); assertThat(((Ricin) payload).getDestination().getVictim(), is(victim)); } private void assertRevolver(Object payload, int bullets) { assertThat(payload, instanceOf(Revolver.class)); assertThat(((Revolver) payload).getBullets(), is(bullets)); } }