package org.zeropage.devilscamp;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
/*
 * up이나 down은 외부에서 버튼을 누른것이다.()안의 인자는 버튼을 누른 층
 * up과 down을 누른 후에는 goTo를 할 수가 있는데
 * 잘못된 선택을 할 경우에는 다시 goTo할 수 없다.
 */
public class App {
	@Test
	public void testElevator(){
		Elevator e = new Elevator(63, -3);
		//Elevator가 생성되었는지 test한다.
		assertNotNull(e);
		//Elevator가 생성될때에는 항상 1층으로 setting된다.
		assertEquals(1, e.floor());
		//System.out.println(e.floor());
		
		//goTo 전에는 항상 up 혹은 down이 있어야한다.
		e.up(1);
		assertEquals(1, e.floor());
		
		e.goTo(5);
		assertEquals(5, e.floor());
		//System.out.println(e.floor());
		
		e.up(10);
		assertEquals(10, e.floor());
		
		//Can not go
		e.goTo(-5);
		assertEquals(10, e.floor());
		//System.out.println(e.floor());
		
		e.down(10);
		assertEquals(10, e.floor());
		
		//Can not go
		e.goTo(65);
		assertEquals(10, e.floor());
		//System.out.println(e.floor());
		
		//6층에서 up누를경우
		e.up(6);
		assertEquals(6, e.floor());
		//System.out.println(e.floor());
		
		//6층에서 up을 눌렀는데 3층으로 갈 수는 없다.
		//한번 goTo에 실패하면(잘못된 범위 선택:up 누르고 더 아래층으로 goTo) 다시 goTo 할 수 없다.
		e.goTo(3);
		assertEquals(6, e.floor());
		e.up(5);
		assertEquals(5, e.floor());
		
		e.goTo(60);
		assertEquals(60, e.floor());
		
		//8층에서 down누를경우
		e.down(8);
		assertEquals(8, e.floor());
		//System.out.println(e.floor());
		
		//한번 goTo에 실패하면(잘못된 범위 선택:down 누르고 더 위층으로 goTo) 다시 goTo 할 수 없다. 갇혔음 ㅡ_ㅡ;;
		e.goTo(3);
		assertEquals(3, e.floor());
		
	}
}