You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
1.9 KiB

defmodule BrickTest do
use ExUnit.Case
import Tetris.Brick
alias Tetris.Points
def new_brick(attributes \\[]), do: new(attributes)
test "Creates a new brick" do
assert new_brick().name == :i
end
test "Create a new random brick" do
actual = new_random()
assert actual.name in [:i, :l, :z, :t, :o]
assert actual.rotation in [0, 90, 180, 270]
assert actual.reflection in [true, false]
end
test "should manipulate brick" do
actual =
new_brick()
|> left
|> right
|> right
|> down
|> spin_90
|> spin_90
assert actual.location == {x_centre() + 1,1}
assert actual.rotation == 180
end
test "should return points for o shape" do
points =
new_brick(name: :o)
|> shape()
assert {3,3} in points
end
test "should translate a list of points" do
actual_points =
new_brick()
|> shape
|> Points.move_to_location({1,1})
|> Points.move_to_location({0,1})
assert actual_points == [{3, 3}, {3, 4}, {3, 5}, {3, 6}]
end
test "should mirror flip rotate and rotate" do
[{1,1}]
|> Points.mirror
|> assert_point({4,1})
|> Points. flip
|> assert_point({4,4})
|> Points.rotate_90
|> assert_point({1,4})
|> Points.rotate_90
|> assert_point({1,1})
end
def assert_point([actual],expected) do
assert actual == expected
[actual]
end
test "should convert brick to string" do
actual = new_brick() |> Tetris.Brick.to_string
expected = "⬜🟥⬜⬜\n⬜🟥⬜⬜\n⬜🟥⬜⬜\n⬜🟥⬜⬜"
assert actual == expected
end
test "should inspect bricks" do
actual = new_brick() |> inspect
expected =
"""
🟥
🟥
🟥
🟥
location : {#{x_centre()}, 0}
reflection: false
rotation : 0
"""
assert "#{actual}\n" == expected
end
end