|
/*
|
|
* Copyright © 2014 TAKAHASHI,Toru
|
|
*/
|
|
package analogclocksvg;
|
|
|
|
import java.time.LocalTime;
|
|
import java.util.stream.IntStream;
|
|
import static java.util.stream.Collectors.joining;
|
|
import javafx.geometry.Point2D;
|
|
import javafx.scene.shape.Line;
|
|
import javafx.scene.transform.Rotate;
|
|
import static org.hamcrest.CoreMatchers.is;
|
|
import org.junit.Test;
|
|
import static org.junit.Assert.*;
|
|
import org.junit.Before;
|
|
|
|
/**
|
|
*
|
|
* @author TAKAHASHI,Toru
|
|
*/
|
|
public class AnalogClockControllerTest {
|
|
|
|
AnalogClockController sut;
|
|
|
|
public AnalogClockControllerTest() {
|
|
}
|
|
|
|
@Before
|
|
public void setUp() {
|
|
sut = new AnalogClockController();
|
|
}
|
|
|
|
@Test
|
|
public void getMinuteAngleのテスト() {
|
|
LocalTime time = LocalTime.of(0, 0, 30);
|
|
assertThat(sut.getMinuteAgnel(time), is(3));
|
|
}
|
|
|
|
@Test
|
|
public void 文字盤の分刻みSVGデータ生成() {
|
|
String pathData = IntStream.range(0, 60)
|
|
.mapToObj(this::createLine)
|
|
.map(line -> String.format("M %.1f,%.1f L %.1f,%.1f", line.getStartX(), line.getStartY(), line.getEndX(), line.getEndY()))
|
|
.collect(joining(" "));
|
|
System.out.println(pathData);
|
|
}
|
|
|
|
/**
|
|
* 文字盤の分個別のラインを生成する。
|
|
*
|
|
* 5分置きに長い線を、それ以外の分は短い線を作成し、分に応じて回転させる。
|
|
*
|
|
* @param minute 生成する対象の分
|
|
* @return 指定した分に対応するライン
|
|
*/
|
|
private Line createLine(int minute) {
|
|
Rotate rot = new Rotate(minute * 6, 100, 100);
|
|
Point2D p0 = rot.transform(100, minute % 5 == 0 ? 12 : 16);
|
|
Point2D p1 = rot.transform(100, minute % 5 == 0 ? 32 : 18);
|
|
Line line = new Line(p0.getX(), p0.getY(), p1.getX(), p1.getY());
|
|
return line;
|
|
}
|
|
}
|