package fr.inria.diversify.ut.json.output;
import fr.inria.diversify.persistence.PersistenceException;
import fr.inria.diversify.persistence.json.output.JsonAstReplaceOutput;
import fr.inria.diversify.transformation.ast.ASTAdd;
import fr.inria.diversify.transformation.ast.ASTDelete;
import fr.inria.diversify.transformation.ast.ASTReplace;
import fr.inria.diversify.ut.FakeCodeFragment;
import fr.inria.diversify.ut.json.SectionTestUtils;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Test;
import static fr.inria.diversify.ut.json.SectionTestUtils.list;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/**
* Created by marodrig on 08/01/2015.
*/
public class JsonAstReplaceOutputTest {
private static final String TRANSFORMATIONS = "transformations";
/**
* Test that creates a "transformation" inside the global object
*/
@Test(expected = PersistenceException.class)
public void testWriteEmpty() {
SectionTestUtils.doTestWriteEmpty(new JsonAstReplaceOutput(), new ASTReplace());
}
/**
* Write Replace
*
* @throws org.json.JSONException
*/
@Test
public void testWrite() throws JSONException {
ASTReplace r = new ASTReplace();
r.setTransplantationPoint(new FakeCodeFragment("org.class:1", "CtReturn", "return 0"));
r.setTransplant(new FakeCodeFragment("org.class:1", "CtReturn", "return 0"));
JsonAstReplaceOutput d = new JsonAstReplaceOutput();
d.setTransformations(list(r));
d.write(new JSONObject());
SectionTestUtils.writeAssertions(d);
}
/**
* Write Replace transformations only
*
* @throws org.json.JSONException
*/
@Test
public void testWriteReplaceOnly() throws JSONException {
ASTReplace r = new ASTReplace();
r.setTransplantationPoint(new FakeCodeFragment("org.class:1", "CtReturn", "return 0"));
r.setTransplant(new FakeCodeFragment("org.class:1", "CtReturn", "return 0"));
JsonAstReplaceOutput d = new JsonAstReplaceOutput();
d.setTransformations(list(new ASTDelete(), r, new ASTAdd()));
d.write(new JSONObject());
SectionTestUtils.writeOnlyAssertions(d);
}
/**
* Test failure writing
* @throws JSONException
*/
@Test
public void testFailureWrite() throws JSONException {
SectionTestUtils.testFailureWrite(new JsonAstReplaceOutput());
}
}