package fr.inria.diversify.ut.json.output; import fr.inria.diversify.persistence.PersistenceException; import fr.inria.diversify.persistence.json.output.JsonHeaderOutput; import fr.inria.diversify.persistence.json.output.JsonSectionOutput; import fr.inria.diversify.transformation.Transformation; import fr.inria.diversify.ut.MockInputProgram; import mockit.Mocked; import mockit.Verifications; import org.json.JSONException; import org.json.JSONObject; import org.junit.Test; import java.io.FileWriter; import java.io.IOException; import java.util.List; import static fr.inria.diversify.persistence.json.output.JsonSectionOutput.TRANSFORMATIONS; import static fr.inria.diversify.ut.json.SectionTestUtils.createTransformations; import static org.junit.Assert.*; /** * Created by marodrig on 12/01/2015. */ public class JsonSosieOutputTest { public static class CustomSection1 extends JsonSectionOutput { } public static class CustomSection extends JsonSectionOutput { private final String sectionName; public CustomSection(String sectionName) { this.sectionName = sectionName; } @Override public void write(JSONObject outputObject) { super.write(outputObject); try { outputObject.put(sectionName, new JSONObject()); } catch (JSONException e) { throw new PersistenceException(e); } } } /** * Test that custom sections are called properly * @throws IOException * @throws JSONException */ @Test public void testCustomSections() throws JSONException { List<Transformation> transfs = createTransformations(new MockInputProgram()); JsonSosieOutputForUT out = new JsonSosieOutputForUT(transfs, "/uzr/h0m3/my.jzon", "mySrc/pom.xml", "sosie-generator/pom.xml"); out.setSection(CustomSection.class, new CustomSection("theObjectName")); out.setSection(CustomSection1.class, new CustomSection("theObjectName11")); out.writeToJsonNow(); assertTrue(out.getJSONObject().has("theObjectName")); assertTrue(out.getJSONObject().has("theObjectName11")); } /** * Test the writing of sosies normally * @param anyWriter A mock for the FileWrite class * @throws IOException * @throws JSONException */ @Test public void testSosieOutput(@Mocked final FileWriter anyWriter) throws IOException, JSONException { //Get the transformations List<Transformation> transfs = createTransformations(new MockInputProgram()); //JsonSosieOutputForUT only for Unit TEST!!!!!! //Use JsonSosiesOutput intead JsonSosieOutputForUT out = new JsonSosieOutputForUT( transfs, //Transformations "/uzr/h0m3/my.jzon", //Output path for the JSON "mySrc/pom.xml", //POM file of the source project "1.0-SNAPSHOT" //Version of the generator ); out.write(); assertEquals(3, out.getJSONObject().length()); assertEquals(3, out.getJSONObject().getJSONArray(TRANSFORMATIONS).length()); new Verifications() {{ anyWriter.close(); times = 1; }}; } }