/** * ============================================================================= * * ORCID (R) Open Source * http://orcid.org * * Copyright (c) 2012-2014 ORCID, Inc. * Licensed under an MIT-Style License (MIT) * http://orcid.org/open-source-license * * This copyright and license information (including a link to the full license) * shall be included in its entirety in all copies or substantial portion of * the software. * * ============================================================================= */ package org.orcid.core.version; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.List; import org.junit.Test; import org.orcid.core.BaseTest; import org.orcid.core.version.impl.V2VersionConverterChainImpl; /** * * @author Will Simpson * */ public class V2VersionConverterChainTest extends BaseTest { @Test public void testSimpleChain() { V2VersionConverter converter1 = new Converter1(); V2VersionConverter converter2 = new Converter2(); List<V2VersionConverter> converters = new ArrayList<>(); converters.add(converter1); converters.add(converter2); V2VersionConverterChainImpl chain = new V2VersionConverterChainImpl(); chain.setConverters(converters); // Upgrade from 1 to 3 Version1 version1 = new Version1(); Object upgradeResult = chain.upgrade(new V2Convertible(version1, "1"), "3").getObjectToConvert(); assertNotNull(upgradeResult); assertTrue(upgradeResult instanceof Version3); assertEquals("3", ((Version3) (upgradeResult)).getMyVersion()); // Upgrade from 1 to 2 upgradeResult = chain.upgrade(new V2Convertible(version1, "1"), "2").getObjectToConvert(); assertNotNull(upgradeResult); assertTrue(upgradeResult instanceof Version2); assertEquals("2", ((Version2) (upgradeResult)).getMyVersion()); // Downgrade from 3 to 1 Version3 version3 = new Version3(); Object downgradeResult = chain.downgrade(new V2Convertible(version3, "3"), "1").getObjectToConvert(); assertNotNull(downgradeResult); assertTrue(downgradeResult instanceof Version1); assertEquals("1", ((Version1) (downgradeResult)).getMyVersion()); // Downgrade from 3 to 2 downgradeResult = chain.downgrade(new V2Convertible(version3, "3"), "2").getObjectToConvert(); assertNotNull(downgradeResult); assertTrue(downgradeResult instanceof Version2); assertEquals("2", ((Version2) (downgradeResult)).getMyVersion()); } public class Converter1 implements V2VersionConverter { @Override public String getLowerVersion() { return "1"; } @Override public String getUpperVersion() { return "2"; } @Override public V2Convertible downgrade(V2Convertible objectToDowngrade) { Version1 version1 = new Version1(); version1.setRetainedValue(((Version2) objectToDowngrade.getObjectToConvert()).getRetainedValue()); return new V2Convertible(version1, "1"); } @Override public V2Convertible upgrade(V2Convertible objectToUpgrade) { Version2 version2 = new Version2(); version2.setRetainedValue(((Version1) objectToUpgrade.getObjectToConvert()).getRetainedValue()); return new V2Convertible(version2, "2"); } } public class Converter2 implements V2VersionConverter { @Override public String getLowerVersion() { return "2"; } @Override public String getUpperVersion() { return "3"; } @Override public V2Convertible downgrade(V2Convertible objectToDowngrade) { Version2 version2 = new Version2(); version2.setRetainedValue(((Version3) objectToDowngrade.getObjectToConvert()).getRetainedValue()); return new V2Convertible(version2, "2"); } @Override public V2Convertible upgrade(V2Convertible objectToUpgrade) { Version3 version3 = new Version3(); version3.setRetainedValue(((Version2) objectToUpgrade.getObjectToConvert()).getRetainedValue()); return new V2Convertible(version3, "3"); } } public class Version1 { private String myVersion = "1"; private String retainedValue; public String getMyVersion() { return myVersion; } public String getRetainedValue() { return retainedValue; } public void setRetainedValue(String retainedValue) { this.retainedValue = retainedValue; } } public class Version2 { private String myVersion = "2"; private String retainedValue; public String getMyVersion() { return myVersion; } public String getRetainedValue() { return retainedValue; } public void setRetainedValue(String retainedValue) { this.retainedValue = retainedValue; } } public class Version3 { private String myVersion = "3"; private String retainedValue; public String getMyVersion() { return myVersion; } public String getRetainedValue() { return retainedValue; } public void setRetainedValue(String retainedValue) { this.retainedValue = retainedValue; } } }