package com.newsinternational.exercise.utility;

import org.junit.Test;

import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;

/**
 * Created with IntelliJ IDEA.
 * User: pradeepcheers
 * Tests for Direction Enum
 */
public class DirectionTest {

    @Test
    public void testDirectionInitialisationNorthToRight()
    {
        assertThat(Direction.N.getToTheRight(), is(Direction.E));
    }

    @Test
    public void testDirectionInitialisationEastToRight()
    {
        assertThat(Direction.E.getToTheRight(), is(Direction.S));
    }

    @Test
    public void testDirectionInitialisationSouthToRight()
    {
        assertThat(Direction.S.getToTheRight(), is(Direction.W));
    }

    @Test
    public void testDirectionInitialisationWestToRight()
    {
        assertThat(Direction.W.getToTheRight(), is(Direction.N));
    }

    @Test
    public void testDirectionInitialisationNorthToLeft()
    {
        assertThat(Direction.N.getToTheLeft(), is(Direction.W));
    }

    @Test
    public void testDirectionInitialisationEastToLeft()
    {
        assertThat(Direction.E.getToTheLeft(), is(Direction.N));
    }

    @Test
    public void testDirectionInitialisationSouthToLeft()
    {
        assertThat(Direction.S.getToTheLeft(), is(Direction.E));
    }

    @Test
    public void testDirectionInitialisationWestToLeft()
    {
        assertThat(Direction.W.getToTheLeft(), is(Direction.S));
    }

    @Test
    public void testGetNextDirectionOne()
    {
        assertThat(Direction.getNextDirection(Direction.N,"L"), is(Direction.W));
    }

    @Test
    public void testGetNextDirectionTwo()
    {
        assertThat(Direction.getNextDirection(Direction.E,"L"), is(Direction.N));
    }

    @Test
    public void testGetNextDirectionThree()
    {
        assertThat(Direction.getNextDirection(Direction.W,"L"), is(Direction.S));
    }

    @Test
    public void testGetNextDirectionFour()
    {
        assertThat(Direction.getNextDirection(Direction.S,"L"), is(Direction.E));
    }

    @Test
    public void checkDirectionRight(){
        assertThat(Direction.getNextDirection(Direction.S,"R"), is(Direction.W));
    }

    @Test
    public void checkDirectionRightOne(){
        assertThat(Direction.getNextDirection(Direction.W,"R"), is(Direction.N));
    }

    @Test
    public void checkDirectionRightTwo(){
        assertThat(Direction.getNextDirection(Direction.S,"R"), is(Direction.W));
    }

    @Test
    public void checkDirectionRightThree(){
        assertThat(Direction.getNextDirection(Direction.W,"R"), is(Direction.N));
    }

    @Test
    public void checkDirectionRightFour(){
        assertThat(Direction.getNextDirection(Direction.N,"R"), is(Direction.E));
    }
    @Test
    public void checkDirectionRightFive(){
        assertThat(Direction.getNextDirection(Direction.E,"R"), is(Direction.S));
    }
}