package test.parser.pst;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.text.ParseException;
import net.sf.latexdraw.models.interfaces.shape.FreeHandStyle;
import net.sf.latexdraw.models.interfaces.shape.IDot;
import net.sf.latexdraw.models.interfaces.shape.IFreehand;
import net.sf.latexdraw.models.interfaces.shape.IGroup;
import net.sf.latexdraw.models.interfaces.shape.IPolyline;
import net.sf.latexdraw.models.interfaces.shape.IRectangle;
import net.sf.latexdraw.models.interfaces.shape.IShape;
import net.sf.latexdraw.parsers.pst.parser.PSTParser;
import org.junit.Test;
public class TestParsingPscustom extends TestPSTParser {
@Test
public void testPsCustomRlineto() throws ParseException {
parser.parsePSTCode("\\" + getCommandName() + "{\\rlineto(2,3)}"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(1, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomMovepath() throws ParseException {
parser.parsePSTCode("\\" + getCommandName() + "{\\movepath(2,3)}"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(1, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomClosedshadow() throws ParseException {
parser.parsePSTCode("\\" + getCommandName() + "{\\closedshadow[linewidth=2cm]}"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(1, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomOpenshadow() throws ParseException {
parser.parsePSTCode("\\" + getCommandName() + "{\\openshadow[linewidth=2cm]}"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(1, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomMrestore() throws ParseException {
parser.parsePSTCode("\\" + getCommandName() + "{\\mrestore}"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(1, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomMsave() throws ParseException {
parser.parsePSTCode("\\" + getCommandName() + "{\\msave}"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(1, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomSwapaxes() throws ParseException {
parser.parsePSTCode("\\" + getCommandName() + "{\\swapaxes}"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(1, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomRotate() throws ParseException {
parser.parsePSTCode("\\" + getCommandName() + "{\\rotate{10}}"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(1, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomScale1() throws ParseException {
parser.parsePSTCode("\\" + getCommandName() + "{\\scale{10}}"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(1, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomScale2() throws ParseException {
parser.parsePSTCode("\\" + getCommandName() + "{\\scale{10 20}}"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(1, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomTranslate() throws ParseException {
parser.parsePSTCode("\\" + getCommandName() + "{\\translate(1,2cm)}"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(1, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomFill() throws ParseException {
parser.parsePSTCode("\\" + getCommandName() + "{\\fill[linewidth=0.2cm]}"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(1, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomStroke() throws ParseException {
parser.parsePSTCode("\\" + getCommandName() + "{\\stroke[linewidth=0.2cm]}"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(1, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomGrestore() throws ParseException {
parser.parsePSTCode("\\" + getCommandName() + "{\\grestore}"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(1, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomGsave() throws ParseException {
parser.parsePSTCode("\\" + getCommandName() + "{\\gsave}"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(1, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomRcurveto() throws ParseException {
parser.parsePSTCode("\\" + getCommandName() + "{\\rcurveto(3.1,4.1)(3.2,4.3)(3,4)}"); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(1, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomFreeHandClose() throws ParseException {
IGroup group = parser.parsePSTCode("\\pscustom{\\moveto(0.0,2.64)\\lineto(0.19,2.82)\\curveto(0.285,2.91)(1.49,3.16)(2.6,3.32)" + //$NON-NLS-1$
"\\curveto(3.71,3.48)(5.625,3.205)(6.43,2.77)\\curveto(7.235,2.335)(8.07,1.135)(8.1,0.37)" + //$NON-NLS-1$
"\\curveto(8.13,-0.395)(7.64,-1.63)(7.12,-2.1)\\curveto(6.6,-2.57)(5.45,-3.18)(4.82,-3.32)\\closepath}").get(); //$NON-NLS-1$
assertEquals(1, group.size());
IFreehand fh = (IFreehand)group.getShapeAt(0);
assertEquals(7, fh.getNbPoints());
assertEquals(0., fh.getPtAt(0).getX(), 0.001);
assertEquals(-2.64 * IShape.PPC, fh.getPtAt(0).getY(), 0.001);
assertEquals(0.19 * IShape.PPC, fh.getPtAt(1).getX(), 0.001);
assertEquals(-2.82 * IShape.PPC, fh.getPtAt(1).getY(), 0.001);
assertEquals(2.6 * IShape.PPC, fh.getPtAt(2).getX(), 0.001);
assertEquals(-3.32 * IShape.PPC, fh.getPtAt(2).getY(), 0.001);
assertEquals(6.43 * IShape.PPC, fh.getPtAt(3).getX(), 0.001);
assertEquals(-2.77 * IShape.PPC, fh.getPtAt(3).getY(), 0.001);
assertEquals(8.1 * IShape.PPC, fh.getPtAt(4).getX(), 0.001);
assertEquals(-0.37 * IShape.PPC, fh.getPtAt(4).getY(), 0.001);
assertEquals(FreeHandStyle.CURVES, fh.getType());
assertEquals(0, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomFreeHandOpen() throws ParseException {
IGroup group = parser.parsePSTCode("\\pscustom{\\moveto(0.0,2.64)\\lineto(0.19,2.82)\\curveto(0.285,2.91)(1.49,3.16)(2.6,3.32)" + //$NON-NLS-1$
"\\curveto(3.71,3.48)(5.625,3.205)(6.43,2.77)\\curveto(7.235,2.335)(8.07,1.135)(8.1,0.37)" + //$NON-NLS-1$
"\\curveto(8.13,-0.395)(7.64,-1.63)(7.12,-2.1)\\curveto(6.6,-2.57)(5.45,-3.18)(4.82,-3.32)}").get(); //$NON-NLS-1$
assertEquals(1, group.size());
IFreehand fh = (IFreehand)group.getShapeAt(0);
assertEquals(7, fh.getNbPoints());
assertEquals(0., fh.getPtAt(0).getX(), 0.001);
assertEquals(-2.64 * IShape.PPC, fh.getPtAt(0).getY(), 0.001);
assertEquals(0.19 * IShape.PPC, fh.getPtAt(1).getX(), 0.001);
assertEquals(-2.82 * IShape.PPC, fh.getPtAt(1).getY(), 0.001);
assertEquals(2.6 * IShape.PPC, fh.getPtAt(2).getX(), 0.001);
assertEquals(-3.32 * IShape.PPC, fh.getPtAt(2).getY(), 0.001);
assertEquals(6.43 * IShape.PPC, fh.getPtAt(3).getX(), 0.001);
assertEquals(-2.77 * IShape.PPC, fh.getPtAt(3).getY(), 0.001);
assertEquals(8.1 * IShape.PPC, fh.getPtAt(4).getX(), 0.001);
assertEquals(-0.37 * IShape.PPC, fh.getPtAt(4).getY(), 0.001);
assertTrue(fh.isOpen());
assertEquals(FreeHandStyle.CURVES, fh.getType());
assertEquals(0, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomMovetoCurvetoLineTo() throws ParseException {
IGroup group = parser.parsePSTCode("\\" + getCommandName() + "{%\n\\moveto(1,2)\\curveto(3.1,4.1)(3.2,4.3)(3,4)\\lineto(5,6)}").get(); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(1, group.size());
IFreehand fh = (IFreehand)group.getShapeAt(0);
assertEquals(3, fh.getNbPoints());
assertEquals(1. * IShape.PPC, fh.getPtAt(0).getX(), 0.001);
assertEquals(-2. * IShape.PPC, fh.getPtAt(0).getY(), 0.001);
assertEquals(3. * IShape.PPC, fh.getPtAt(1).getX(), 0.001);
assertEquals(-4. * IShape.PPC, fh.getPtAt(1).getY(), 0.001);
assertEquals(5. * IShape.PPC, fh.getPtAt(2).getX(), 0.001);
assertEquals(-6. * IShape.PPC, fh.getPtAt(2).getY(), 0.001);
assertEquals(FreeHandStyle.LINES, fh.getType());
assertEquals(0, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomMovetoCurveto() throws ParseException {
IFreehand fh = (IFreehand)parser.parsePSTCode("\\" + getCommandName() + "[linewidth=10cm]{%\n\\moveto(1,2)\\curveto(3.1,4.1)(3.2,4.3)(3,4)}").get().getShapeAt(0); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(2, fh.getNbPoints());
assertEquals(1. * IShape.PPC, fh.getPtAt(0).getX(), 0.001);
assertEquals(-2. * IShape.PPC, fh.getPtAt(0).getY(), 0.001);
assertEquals(3. * IShape.PPC, fh.getPtAt(1).getX(), 0.001);
assertEquals(-4. * IShape.PPC, fh.getPtAt(1).getY(), 0.001);
assertEquals(FreeHandStyle.CURVES, fh.getType());
assertEquals(0, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomMovetoLineto() throws ParseException {
IFreehand fh = (IFreehand)parser.parsePSTCode("\\" + getCommandName() + "[linewidth=10cm]{%\n\\moveto(1,2)\\lineto(3,4)}").get().getShapeAt(0); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(2, fh.getNbPoints());
assertEquals(1. * IShape.PPC, fh.getPtAt(0).getX(), 0.001);
assertEquals(-2. * IShape.PPC, fh.getPtAt(0).getY(), 0.001);
assertEquals(3. * IShape.PPC, fh.getPtAt(1).getX(), 0.001);
assertEquals(-4. * IShape.PPC, fh.getPtAt(1).getY(), 0.001);
assertEquals(FreeHandStyle.LINES, fh.getType());
assertEquals(0, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomNothingWithNewpathCommand() throws ParseException {
assertTrue(parser.parsePSTCode("\\" + getCommandName() + "{\\newpath\n}").get().isEmpty()); //$NON-NLS-1$ //$NON-NLS-2$
}
@Test
public void testPsCustomMustConsiderParametersCommand() throws ParseException {
IPolyline line = (IPolyline)parser.parsePSTCode("\\" + getCommandName() + "[linewidth=10cm]{%\n\\psline(4,3)}").get().getShapeAt(0); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(10. * IShape.PPC, line.getThickness(), 0.001);
assertEquals(0, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomStarCommand() throws ParseException {
IRectangle rec = (IRectangle)parser.parsePSTCode("\\" + getCommandName() + "*{%\n\\psframe(2,2)\n}").get().getShapeAt(0); //$NON-NLS-1$ //$NON-NLS-2$
assertTrue(rec.isFilled());
assertEquals(0, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomNotEmptyCommand() throws ParseException {
IGroup group = parser.parsePSTCode("\\" + getCommandName() + "{%\n\\psdots(1,1)\n\\psframe(2,2)\n}").get(); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(2, group.size());
assertTrue(group.getShapeAt(0) instanceof IDot);
assertTrue(group.getShapeAt(1) instanceof IRectangle);
assertEquals(0, PSTParser.errorLogs().size());
}
@Test
public void testPsCustomEmptyCommand() throws ParseException {
assertTrue(parser.parsePSTCode("\\" + getCommandName() + "{}").get().isEmpty()); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(0, PSTParser.errorLogs().size());
}
@Override
public String getCommandName() {
return "pscustom"; //$NON-NLS-1$
}
@Override
public String getBasicCoordinates() {
return ""; //$NON-NLS-1$
}
}