package com.svgandroid;
import android.graphics.Path;
import org.junit.Before;
import org.junit.Test;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
/**
* Created by Vlad Medvedev on 19.01.2016.
* vladislav.medvedev@devfactory.com
*/
public class PathParserTest {
private Path path;
@Before
public void setUp(){
path = mock(Path.class);
}
@Test
public void testParseLineNext() throws Exception {
PathParser.parse("l5,5+10,10", path);
//line
verify(path).rLineTo(5.0f, 5.0f);
verify(path).rLineTo(10.0f, 10.0f);
}
@Test
public void testParseCubicPlus() throws Exception {
PathParser.parse("c3,3,3,3,3,3+10,10,10,10,10,10", path);
//cubic bezier
verify(path).cubicTo(3.0f, 3.0f, 3.0f, 3.0f, 3.0f, 3.0f);
verify(path).cubicTo(13.0f, 13.0f, 13.0f, 13.0f, 13.0f, 13.0f);
}
@Test
public void testParseMoveNext() throws Exception {
PathParser.parse("m1,2+10,23", path);
//move
verify(path).rMoveTo(1.0f, 2.0f);
verify(path).rLineTo(10.0f, 23.0f);
}
@Test
public void testParseMove() throws Exception {
PathParser.parse("M10,10m10,10", path);
//move
verify(path).moveTo(10.0f, 10.0f);
verify(path).rMoveTo(10.0f, 10.0f);
}
@Test
public void testParseLine() throws Exception {
PathParser.parse("ML10,10l0,10", path);
//line
verify(path).lineTo(10.0f, 10.0f);
verify(path).rLineTo(0.0f, 10.0f);
}
@Test
public void testParseHLine() throws Exception {
PathParser.parse("H10h5", path);
//horizontal line
verify(path).lineTo(10.0f,0.0f);
verify(path).rLineTo(5.0f,0.0f);
}
@Test
public void testParseVLine() throws Exception {
PathParser.parse("V10v5", path);
//vertical line
verify(path).lineTo(0.0f,10.0f);
verify(path).rLineTo(0.0f,5.0f);
}
@Test
public void testParseSquare() throws Exception {
PathParser.parse("M10,10H90V90H10L10,10", path);
//draw square
verify(path, times(1)).moveTo(10.0f, 10.0f);
verify(path).lineTo(90.0f, 10.0f);
verify(path).lineTo(90.0f, 90.0f);
verify(path).lineTo(10.0f, 90.0f);
verify(path).lineTo(10.0f, 10.0f);
}
@Test
public void testParseTriangle() throws Exception {
PathParser.parse("M250,150L150,350L350,350Z", path);
//draw triangle
verify(path, times(2)).moveTo(250.0f, 150.0f);
verify(path).lineTo(150.0f, 350.0f);
verify(path).lineTo(350.0f, 350.0f);
verify(path).close();
}
@Test
public void testParseCurve() throws Exception {
PathParser.parse("C150,150,180,80,100,120c30,100,40,100,30,90", path);
//draw curve
verify(path).cubicTo(150.0f, 150.0f, 180.0f, 80.0f, 100.0f, 120.0f);
verify(path).cubicTo(130.0f, 220.0f, 140.0f, 220.0f, 130.0f, 210.0f);
}
@Test
public void testParseCurveS() throws Exception {
PathParser.parse("S150,150,180,80s30,10,20,35", path);
//draw curve
verify(path).cubicTo(0.0f, 0.0f, 150.0f, 150.0f, 180.0f, 80.0f);
verify(path).cubicTo(210.0f, 10.0f, 210.0f, 90.0f, 200.0f, 115.0f);
}
@Test
public void testParseArc() throws Exception {
//is not implemented yet. Just call it
PathParser.parse("A5,5,20,20,30,10,10", path);
}
}