package net.sf.openrocket.file.rocksim.importt;
import net.sf.openrocket.aerodynamics.WarningSet;
import net.sf.openrocket.file.rocksim.RocksimCommonConstants;
import net.sf.openrocket.rocketcomponent.BodyTube;
import net.sf.openrocket.rocketcomponent.ExternalComponent;
import net.sf.openrocket.rocketcomponent.TubeFinSet;
import org.junit.Assert;
import java.util.HashMap;
/**
* Test for importing a Rocksim TubeFinSet into OR.
*/
public class TubeFinSetHandlerTest {
/**
* Method: asOpenRocket(WarningSet warnings)
*
* @throws Exception thrown if something goes awry
*/
@org.junit.Test
public void testAsOpenRocket() throws Exception {
WarningSet warnings = new WarningSet();
TubeFinSetHandler handler = new TubeFinSetHandler(null, new BodyTube(), warnings);
HashMap<String, String> attributes = new HashMap<>();
handler.closeElement("Name", attributes, "The name", warnings);
handler.closeElement("TubeCount", attributes, "4", warnings);
handler.closeElement("RadialAngle", attributes, ".123", warnings);
TubeFinSet fins = handler.getComponent();
Assert.assertNotNull(fins);
Assert.assertEquals(0, warnings.size());
Assert.assertEquals("The name", fins.getName());
Assert.assertEquals(4, fins.getFinCount());
Assert.assertEquals(.123d, fins.getBaseRotation(), 0d);
handler.closeElement("OD", attributes, "-1", warnings);
Assert.assertEquals(0d, fins.getOuterRadius(), 0.001);
handler.closeElement("OD", attributes, "0", warnings);
Assert.assertEquals(0d, fins.getOuterRadius(), 0.001);
handler.closeElement("OD", attributes, "75", warnings);
Assert.assertEquals(75d / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_RADIUS, fins.getOuterRadius(), 0.001);
handler.closeElement("OD", attributes, "foo", warnings);
Assert.assertEquals(1, warnings.size());
warnings.clear();
handler.closeElement("ID", attributes, "-1", warnings);
Assert.assertEquals(0d, fins.getInnerRadius(), 0.001);
handler.closeElement("ID", attributes, "0", warnings);
Assert.assertEquals(0d, fins.getInnerRadius(), 0.001);
handler.closeElement("ID", attributes, "75", warnings);
Assert.assertEquals(75d / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_RADIUS, fins.getInnerRadius(), 0.001);
handler.closeElement("ID", attributes, "foo", warnings);
Assert.assertEquals(1, warnings.size());
warnings.clear();
handler.closeElement("Len", attributes, "-1", warnings);
Assert.assertEquals(0d, fins.getLength(), 0.001);
handler.closeElement("Len", attributes, "10", warnings);
Assert.assertEquals(10d / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH, fins.getLength(), 0.001);
handler.closeElement("Len", attributes, "10.0", warnings);
Assert.assertEquals(10d / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH, fins.getLength(), 0.001);
handler.closeElement("Len", attributes, "foo", warnings);
Assert.assertEquals(1, warnings.size());
warnings.clear();
handler.closeElement("FinishCode", attributes, "-1", warnings);
Assert.assertEquals(ExternalComponent.Finish.NORMAL, fins.getFinish());
handler.closeElement("FinishCode", attributes, "100", warnings);
Assert.assertEquals(ExternalComponent.Finish.NORMAL, fins.getFinish());
handler.closeElement("FinishCode", attributes, "foo", warnings);
Assert.assertEquals(1, warnings.size());
warnings.clear();
}
}