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.ArrowStyle;
import net.sf.latexdraw.models.interfaces.shape.IPolyline;
import net.sf.latexdraw.models.interfaces.shape.IShape;
import net.sf.latexdraw.view.pst.PSTricksConstants;
import net.sf.latexdraw.parsers.pst.parser.PSTParser;
import org.junit.Test;
public class TestParsingPsline extends TestParsingShape {
@Test
public void testBugTwoSameArrows() throws ParseException {
IPolyline sh = (IPolyline)parser.parsePSTCode("\\psline{<-<}(-0.1,-0.2)(2,5)").get().getShapeAt(0); //$NON-NLS-1$
assertTrue(PSTParser.errorLogs().isEmpty());
assertEquals(sh.getArrowAt(0).getArrowStyle(), ArrowStyle.LEFT_ARROW);
assertEquals(sh.getArrowAt(1).getArrowStyle(), ArrowStyle.LEFT_ARROW);
assertTrue(sh.getArrowAt(0) != sh.getArrowAt(1));
}
@Test
public void testUnit() throws ParseException {
IPolyline sh = (IPolyline)parser.parsePSTCode("\\psset{unit=2}\\psline[linewidth=0.3,linestyle=dashed](2,3)(1cm,2cm)").get().getShapeAt(0); //$NON-NLS-1$
assertTrue(PSTParser.errorLogs().isEmpty());
assertEquals(2. * 2. * IShape.PPC, sh.getPtAt(0).getX(), 0.0001);
assertEquals(-3. * 2. * IShape.PPC, sh.getPtAt(0).getY(), 0.0001);
assertEquals(IShape.PPC, sh.getPtAt(1).getX(), 0.0001);
assertEquals(-2. * IShape.PPC, sh.getPtAt(1).getY(), 0.0001);
}
@Test
public void testcornersizeParsed() throws ParseException {
parser.parsePSTCode("\\" + getCommandName() + "[cornersize=relative](5,10)").get().getShapeAt(0); //$NON-NLS-1$ //$NON-NLS-2$
assertTrue(PSTParser.errorLogs().isEmpty());
}
@Test
public void testLinearcParsed() throws ParseException {
parser.parsePSTCode("\\" + getCommandName() + "[linearc=0.3cm](5,10)").get().getShapeAt(0); //$NON-NLS-1$ //$NON-NLS-2$
assertTrue(PSTParser.errorLogs().isEmpty());
}
@Test
public void testMoreThanTwoPointsCoordinates() throws ParseException {
IPolyline line = (IPolyline)parser.parsePSTCode("\\" + getCommandName() + "(5,10)(6, 7) (1, 2) % foo \n(3, \t4)").get().getShapeAt(0); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(4, line.getNbPoints());
assertEquals(5. * IShape.PPC, line.getPtAt(0).getX(), 0.0001);
assertEquals(-10. * IShape.PPC, line.getPtAt(0).getY(), 0.0001);
assertEquals(6. * IShape.PPC, line.getPtAt(1).getX(), 0.0001);
assertEquals(-7. * IShape.PPC, line.getPtAt(1).getY(), 0.0001);
assertEquals(1. * IShape.PPC, line.getPtAt(2).getX(), 0.0001);
assertEquals(-2. * IShape.PPC, line.getPtAt(2).getY(), 0.0001);
assertEquals(3. * IShape.PPC, line.getPtAt(3).getX(), 0.0001);
assertEquals(-4. * IShape.PPC, line.getPtAt(3).getY(), 0.0001);
assertTrue(PSTParser.errorLogs().isEmpty());
}
@Test
public void test1Coordinates() throws ParseException {
IPolyline line = (IPolyline)parser.parsePSTCode("\\" + getCommandName() + "(5,10)").get().getShapeAt(0); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(2, line.getNbPoints());
assertEquals(0., line.getPtAt(0).getX(), 0.0001);
assertEquals(0., line.getPtAt(0).getY(), 0.0001);
assertEquals(5. * IShape.PPC, line.getPtAt(1).getX(), 0.0001);
assertEquals(-10. * IShape.PPC, line.getPtAt(1).getY(), 0.0001);
assertTrue(PSTParser.errorLogs().isEmpty());
}
@Test
public void testCoordinatesPt() throws ParseException {
IPolyline line = (IPolyline)parser.parsePSTCode("\\" + getCommandName() + "(35pt,20pt)(10pt,5pt)").get().getShapeAt(0); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(2, line.getNbPoints());
assertEquals(35. * IShape.PPC / PSTricksConstants.CM_VAL_PT, line.getPtAt(0).getX(), 0.0001);
assertEquals(-20. * IShape.PPC / PSTricksConstants.CM_VAL_PT, line.getPtAt(0).getY(), 0.0001);
assertEquals(10. * IShape.PPC / PSTricksConstants.CM_VAL_PT, line.getPtAt(1).getX(), 0.0001);
assertEquals(-5. * IShape.PPC / PSTricksConstants.CM_VAL_PT, line.getPtAt(1).getY(), 0.0001);
assertTrue(PSTParser.errorLogs().isEmpty());
}
@Test
public void testCoordinatesMm() throws ParseException {
IPolyline line = (IPolyline)parser.parsePSTCode("\\" + getCommandName() + "(350mm,200mm)(10mm, 30.3mm)").get().getShapeAt(0); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(2, line.getNbPoints());
assertEquals(35. * IShape.PPC, line.getPtAt(0).getX(), 0.0001);
assertEquals(-20. * IShape.PPC, line.getPtAt(0).getY(), 0.0001);
assertEquals(1. * IShape.PPC, line.getPtAt(1).getX(), 0.0001);
assertEquals(-3.03 * IShape.PPC, line.getPtAt(1).getY(), 0.0001);
assertTrue(PSTParser.errorLogs().isEmpty());
}
@Test
public void testCoordinatesInch() throws ParseException {
IPolyline line = (IPolyline)parser.parsePSTCode("\\" + getCommandName() + "(35in,20in)(1.2in,0.2in)").get().getShapeAt(0); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(35. * IShape.PPC / 2.54, line.getPtAt(0).getX(), 0.0001);
assertEquals(-20. * IShape.PPC / 2.54, line.getPtAt(0).getY(), 0.0001);
assertEquals(1.2 * IShape.PPC / 2.54, line.getPtAt(1).getX(), 0.0001);
assertEquals(-0.2 * IShape.PPC / 2.54, line.getPtAt(1).getY(), 0.0001);
assertTrue(PSTParser.errorLogs().isEmpty());
}
@Test
public void testCoordinatesCm() throws ParseException {
IPolyline line = (IPolyline)parser.parsePSTCode("\\" + getCommandName() + "(35cm,20cm)(1.2cm,2cm)").get().getShapeAt(0); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(35. * IShape.PPC, line.getPtAt(0).getX(), 0.0001);
assertEquals(-20. * IShape.PPC, line.getPtAt(0).getY(), 0.0001);
assertEquals(1.2 * IShape.PPC, line.getPtAt(1).getX(), 0.0001);
assertEquals(-2. * IShape.PPC, line.getPtAt(1).getY(), 0.0001);
assertTrue(PSTParser.errorLogs().isEmpty());
}
@Test
public void testFloatSigns() throws ParseException {
IPolyline line = (IPolyline)parser.parsePSTCode("\\" + getCommandName() + "(+++35.5,--50.5)(--+12, -1)").get().getShapeAt(0); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(35.5 * IShape.PPC, line.getPtAt(0).getX(), 0.0001);
assertEquals(-50.5 * IShape.PPC, line.getPtAt(0).getY(), 0.0001);
assertEquals(12. * IShape.PPC, line.getPtAt(1).getX(), 0.0001);
assertEquals(1. * IShape.PPC, line.getPtAt(1).getY(), 0.0001);
assertTrue(PSTParser.errorLogs().isEmpty());
}
@Test
public void testCoordinatesFloat2() throws ParseException {
IPolyline line = (IPolyline)parser.parsePSTCode("\\" + getCommandName() + "(35.5,50.5)(12, 1)").get().getShapeAt(0); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(35.5 * IShape.PPC, line.getPtAt(0).getX(), 0.0001);
assertEquals(-50.5 * IShape.PPC, line.getPtAt(0).getY(), 0.0001);
assertEquals(12. * IShape.PPC, line.getPtAt(1).getX(), 0.0001);
assertEquals(-1. * IShape.PPC, line.getPtAt(1).getY(), 0.0001);
assertTrue(PSTParser.errorLogs().isEmpty());
}
@Test(expected = ParseException.class)
public void testErrorOnNoPoint() throws ParseException {
parser.parsePSTCode("\\" + getCommandName() + "").get().isEmpty(); //$NON-NLS-1$ //$NON-NLS-2$
}
@Override
public String getCommandName() {
return "psline"; //$NON-NLS-1$
}
@Override
public String getBasicCoordinates() {
return "(10,10)(20,20)(30,30)"; //$NON-NLS-1$
}
}