Add unit tests for material
This commit is contained in:
parent
09d6137ac0
commit
46a941968e
@ -298,6 +298,11 @@ public abstract class Material implements Comparable<Material>, Groupable<Materi
|
|||||||
return newMaterial(type, name, density, group, userDefined, false);
|
return newMaterial(type, name, density, group, userDefined, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Material newMaterial(Type type, String name, double density, boolean userDefined,
|
||||||
|
boolean documentMaterial) {
|
||||||
|
return newMaterial(type, name, density, null, userDefined, documentMaterial);
|
||||||
|
}
|
||||||
|
|
||||||
public static Material newMaterial(Type type, String name, double density, boolean userDefined) {
|
public static Material newMaterial(Type type, String name, double density, boolean userDefined) {
|
||||||
return newMaterial(type, name, density, null, userDefined);
|
return newMaterial(type, name, density, null, userDefined);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,60 @@
|
|||||||
|
package info.openrocket.core.database;
|
||||||
|
|
||||||
|
import info.openrocket.core.material.Material;
|
||||||
|
import info.openrocket.core.material.MaterialGroup;
|
||||||
|
import info.openrocket.core.util.BaseTestCase;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertSame;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
public class MaterialDatabaseTest extends BaseTestCase {
|
||||||
|
@Test
|
||||||
|
void testDatabasesInitialization() {
|
||||||
|
assertNotNull(Databases.BULK_MATERIAL);
|
||||||
|
assertNotNull(Databases.SURFACE_MATERIAL);
|
||||||
|
assertNotNull(Databases.LINE_MATERIAL);
|
||||||
|
|
||||||
|
assertFalse(Databases.BULK_MATERIAL.isEmpty());
|
||||||
|
assertFalse(Databases.SURFACE_MATERIAL.isEmpty());
|
||||||
|
assertFalse(Databases.LINE_MATERIAL.isEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testFindMaterialByTypeAndName() {
|
||||||
|
Material aluminum = Databases.findMaterial(Material.Type.BULK, "Aluminum");
|
||||||
|
assertNotNull(aluminum);
|
||||||
|
assertEquals("[material:Aluminum]", aluminum.getName());
|
||||||
|
assertEquals(Material.Type.BULK, aluminum.getType());
|
||||||
|
assertEquals(2700, aluminum.getDensity(), 0.001);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testFindMaterialByTypeNameAndDensity() {
|
||||||
|
Material customMaterial = Databases.findMaterial(Material.Type.BULK, "CustomMaterial", 1000, MaterialGroup.PLASTICS);
|
||||||
|
assertNotNull(customMaterial);
|
||||||
|
assertEquals("[material:CustomMaterial]", customMaterial.getName());
|
||||||
|
assertEquals(Material.Type.BULK, customMaterial.getType());
|
||||||
|
assertEquals(1000, customMaterial.getDensity(), 0.001);
|
||||||
|
assertEquals(MaterialGroup.PLASTICS, customMaterial.getGroup());
|
||||||
|
assertTrue(customMaterial.isUserDefined());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testGetDatabase() {
|
||||||
|
assertSame(Databases.BULK_MATERIAL, Databases.getDatabase(Material.Type.BULK));
|
||||||
|
assertSame(Databases.SURFACE_MATERIAL, Databases.getDatabase(Material.Type.SURFACE));
|
||||||
|
assertSame(Databases.LINE_MATERIAL, Databases.getDatabase(Material.Type.LINE));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testGetDatabaseInvalidType() {
|
||||||
|
assertThrows(NullPointerException.class, () -> {
|
||||||
|
Databases.getDatabase(null);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,155 @@
|
|||||||
|
package info.openrocket.core.material;
|
||||||
|
|
||||||
|
import info.openrocket.core.database.Database;
|
||||||
|
import info.openrocket.core.document.OpenRocketDocument;
|
||||||
|
import info.openrocket.core.document.OpenRocketDocumentFactory;
|
||||||
|
import info.openrocket.core.motor.Manufacturer;
|
||||||
|
import info.openrocket.core.preset.ComponentPreset;
|
||||||
|
import info.openrocket.core.preset.ComponentPresetFactory;
|
||||||
|
import info.openrocket.core.preset.TypedPropertyMap;
|
||||||
|
import info.openrocket.core.rocketcomponent.AxialStage;
|
||||||
|
import info.openrocket.core.rocketcomponent.BodyTube;
|
||||||
|
import info.openrocket.core.rocketcomponent.Rocket;
|
||||||
|
import info.openrocket.core.util.BaseTestCase;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertSame;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
public class MaterialTest extends BaseTestCase {
|
||||||
|
private final double EPSILON = 1e-6;
|
||||||
|
ComponentPreset preset;
|
||||||
|
Database<Material> BULK_MATERIAL;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public void createPreset() throws Exception {
|
||||||
|
TypedPropertyMap presetspec = new TypedPropertyMap();
|
||||||
|
presetspec.put(ComponentPreset.TYPE, ComponentPreset.Type.BODY_TUBE);
|
||||||
|
presetspec.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer("manufacturer"));
|
||||||
|
presetspec.put(ComponentPreset.PARTNO, "partno");
|
||||||
|
presetspec.put(ComponentPreset.LENGTH, 2.0);
|
||||||
|
presetspec.put(ComponentPreset.OUTER_DIAMETER, 2.0);
|
||||||
|
presetspec.put(ComponentPreset.INNER_DIAMETER, 1.0);
|
||||||
|
presetspec.put(ComponentPreset.MATERIAL, Material.newMaterial(Material.Type.BULK, "Preset Material", 980, true, true));
|
||||||
|
preset = ComponentPresetFactory.create(presetspec);
|
||||||
|
}
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
public void createDatabase() {
|
||||||
|
BULK_MATERIAL = new Database<>();
|
||||||
|
BULK_MATERIAL.add(Material.newMaterial(Material.Type.BULK, "Aluminum", 2700, MaterialGroup.METALS, false, false));
|
||||||
|
BULK_MATERIAL.add(Material.newMaterial(Material.Type.BULK, "Balsa", 170, MaterialGroup.WOODS, false, false));
|
||||||
|
BULK_MATERIAL.add(Material.newMaterial(Material.Type.BULK, "Delrin", 1420, MaterialGroup.PLASTICS, false, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMaterial() {
|
||||||
|
String name = "Test Material";
|
||||||
|
Material.Type type = Material.Type.BULK;
|
||||||
|
double density = 1.0;
|
||||||
|
|
||||||
|
// Test user-defined material
|
||||||
|
Material m = Material.newMaterial(type, name, density, true);
|
||||||
|
assertEquals(name, m.getName());
|
||||||
|
assertEquals(type, m.getType());
|
||||||
|
assertEquals(density, m.getDensity(), EPSILON);
|
||||||
|
assertTrue(m.isUserDefined());
|
||||||
|
assertFalse(m.isDocumentMaterial());
|
||||||
|
assertEquals(MaterialGroup.CUSTOM, m.getGroup());
|
||||||
|
|
||||||
|
// Test non-user-defined material
|
||||||
|
m = Material.newMaterial(type, name, density, false);
|
||||||
|
assertFalse(m.isUserDefined());
|
||||||
|
assertFalse(m.isDocumentMaterial());
|
||||||
|
assertEquals(MaterialGroup.OTHER, m.getGroup());
|
||||||
|
|
||||||
|
// Test defined material group
|
||||||
|
m = Material.newMaterial(type, name, density, MaterialGroup.WOODS, false);
|
||||||
|
assertFalse(m.isUserDefined());
|
||||||
|
assertFalse(m.isDocumentMaterial());
|
||||||
|
assertEquals(MaterialGroup.WOODS, m.getGroup());
|
||||||
|
|
||||||
|
// Test storable string
|
||||||
|
String storable = m.toStorableString();
|
||||||
|
assertEquals("BULK|Test Material|1.0|Woods", storable);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDocumentDatabase() {
|
||||||
|
// Create a document and rocket
|
||||||
|
OpenRocketDocument document = OpenRocketDocumentFactory.createNewRocket();
|
||||||
|
Rocket rocket = document.getRocket();
|
||||||
|
AxialStage stage = rocket.getStage(0);
|
||||||
|
BodyTube bodyTube = new BodyTube();
|
||||||
|
stage.addChild(bodyTube);
|
||||||
|
|
||||||
|
// Check current document material database
|
||||||
|
assertEquals(0, document.getDocumentPreferences().getAllMaterials().size());
|
||||||
|
|
||||||
|
// Create a material
|
||||||
|
String name = "Tube Material";
|
||||||
|
Material.Type type = Material.Type.BULK;
|
||||||
|
double density = 314;
|
||||||
|
Material m = Material.newMaterial(type, name, density, true, true);
|
||||||
|
|
||||||
|
// Check document material database
|
||||||
|
assertEquals(0, document.getDocumentPreferences().getAllMaterials().size());
|
||||||
|
|
||||||
|
// Assign material to body tube
|
||||||
|
bodyTube.setMaterial(m);
|
||||||
|
assertEquals(1, document.getDocumentPreferences().getAllMaterials().size());
|
||||||
|
assertEquals(name, bodyTube.getMaterial().getName());
|
||||||
|
assertEquals(type, bodyTube.getMaterial().getType());
|
||||||
|
assertEquals(density, bodyTube.getMaterial().getDensity(), EPSILON);
|
||||||
|
assertTrue(bodyTube.getMaterial().isUserDefined());
|
||||||
|
assertTrue(bodyTube.getMaterial().isDocumentMaterial());
|
||||||
|
assertEquals(MaterialGroup.CUSTOM, bodyTube.getMaterial().getGroup());
|
||||||
|
|
||||||
|
// Assign a new material
|
||||||
|
name = "New Material";
|
||||||
|
density = 271;
|
||||||
|
Material m2 = Material.newMaterial(type, name, density, true, true);
|
||||||
|
bodyTube.setMaterial(m2);
|
||||||
|
assertEquals(2, document.getDocumentPreferences().getAllMaterials().size());
|
||||||
|
assertEquals(name, bodyTube.getMaterial().getName());
|
||||||
|
assertEquals(type, bodyTube.getMaterial().getType());
|
||||||
|
assertEquals(density, bodyTube.getMaterial().getDensity(), EPSILON);
|
||||||
|
assertTrue(bodyTube.getMaterial().isUserDefined());
|
||||||
|
assertTrue(bodyTube.getMaterial().isDocumentMaterial());
|
||||||
|
assertEquals(MaterialGroup.CUSTOM, bodyTube.getMaterial().getGroup());
|
||||||
|
|
||||||
|
// Remove a material
|
||||||
|
document.getDocumentPreferences().removeMaterial(m);
|
||||||
|
assertEquals(1, document.getDocumentPreferences().getAllMaterials().size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testLoadFromPreset() {
|
||||||
|
// Create a document and rocket
|
||||||
|
OpenRocketDocument document = OpenRocketDocumentFactory.createNewRocket();
|
||||||
|
Rocket rocket = document.getRocket();
|
||||||
|
AxialStage stage = rocket.getStage(0);
|
||||||
|
BodyTube bodyTube = new BodyTube();
|
||||||
|
stage.addChild(bodyTube);
|
||||||
|
|
||||||
|
// Check document material database
|
||||||
|
assertEquals(0, document.getDocumentPreferences().getAllMaterials().size());
|
||||||
|
|
||||||
|
// Load from preset
|
||||||
|
bodyTube.loadPreset(preset);
|
||||||
|
assertSame(preset.get(ComponentPreset.MATERIAL), bodyTube.getMaterial());
|
||||||
|
assertEquals("Preset Material", bodyTube.getMaterial().getName());
|
||||||
|
assertEquals(Material.Type.BULK, bodyTube.getMaterial().getType());
|
||||||
|
assertEquals(980, bodyTube.getMaterial().getDensity(), EPSILON);
|
||||||
|
assertTrue(bodyTube.getMaterial().isUserDefined());
|
||||||
|
assertTrue(bodyTube.getMaterial().isDocumentMaterial());
|
||||||
|
assertEquals(MaterialGroup.CUSTOM, bodyTube.getMaterial().getGroup());
|
||||||
|
|
||||||
|
// Check document material database
|
||||||
|
assertEquals(1, document.getDocumentPreferences().getAllMaterials().size());
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user