summaryrefslogtreecommitdiffhomepage
path: root/test/quad_spec.rb
diff options
context:
space:
mode:
authorTom Black <[email protected]>2019-01-06 02:22:14 -0800
committerTom Black <[email protected]>2019-01-06 02:22:14 -0800
commit9994b770686428ebbde636081156abb5a50dc6c2 (patch)
tree745d89e4d017b4b6dda4056d98c6a8fbcc956a72 /test/quad_spec.rb
parent742bb574dc506fbb7a8d1774c44736ad0e228c54 (diff)
downloadruby2d-9994b770686428ebbde636081156abb5a50dc6c2.tar.gz
ruby2d-9994b770686428ebbde636081156abb5a50dc6c2.zip
Tests and fixes to the public API
Namely to ensure attribute getters/setters are consistent
Diffstat (limited to 'test/quad_spec.rb')
-rw-r--r--test/quad_spec.rb112
1 files changed, 100 insertions, 12 deletions
diff --git a/test/quad_spec.rb b/test/quad_spec.rb
index 8cace25..b3b862a 100644
--- a/test/quad_spec.rb
+++ b/test/quad_spec.rb
@@ -3,7 +3,7 @@ require 'ruby2d'
RSpec.describe Ruby2D::Quad do
describe "#new" do
- it "creates a quad with white color by default" do
+ it "creates a white quad by default" do
quad = Quad.new
expect(quad.color).to be_a(Ruby2D::Color)
expect(quad.color.r).to eq(1)
@@ -12,12 +12,35 @@ RSpec.describe Ruby2D::Quad do
expect(quad.color.a).to eq(1)
end
+ it "creates a quad with options" do
+ quad = Quad.new(
+ x1: 10, y1: 20,
+ x2: 30, y2: 40,
+ x3: 50, y3: 60,
+ x4: 70, y4: 80,
+ z: 90,
+ color: 'gray', opacity: 0.5
+ )
+
+ expect(quad.x1).to eq(10)
+ expect(quad.y1).to eq(20)
+ expect(quad.x2).to eq(30)
+ expect(quad.y2).to eq(40)
+ expect(quad.x3).to eq(50)
+ expect(quad.y3).to eq(60)
+ expect(quad.x4).to eq(70)
+ expect(quad.y4).to eq(80)
+ expect(quad.z).to eq(90)
+ expect(quad.color.r).to eq(2/3.0)
+ expect(quad.opacity).to eq(0.5)
+ end
+
it "creates a new quad with one color via string" do
quad = Quad.new(color: 'red')
expect(quad.color).to be_a(Ruby2D::Color)
end
- it "creates a new triangle with one color via array of numbers" do
+ it "creates a new quad with one color via array of numbers" do
quad = Quad.new(color: [0.1, 0.3, 0.5, 0.7])
expect(quad.color).to be_a(Ruby2D::Color)
end
@@ -42,32 +65,97 @@ RSpec.describe Ruby2D::Quad do
it "throws an error when array of 3 strings is passed" do
expect do
Quad.new(color: ['red', 'green', 'blue'])
- end.to raise_error("Quads require 4 colors, one for each vertex. 3 were given.")
+ end.to raise_error("`Ruby2D::Quad` requires 4 colors, one for each vertex. 3 were given.")
end
it "throws an error when array of 5 strings is passed" do
expect do
Quad.new(color: ['red', 'green', 'blue', 'black', 'fuchsia'])
- end.to raise_error("Quads require 4 colors, one for each vertex. 5 were given.")
+ end.to raise_error("`Ruby2D::Quad` requires 4 colors, one for each vertex. 5 were given.")
end
end
+ describe "attributes" do
+ it "can be set and read" do
+ quad = Quad.new
+ quad.x1 = 10
+ quad.y1 = 20
+ quad.x2 = 30
+ quad.y2 = 40
+ quad.x3 = 50
+ quad.y3 = 60
+ quad.x4 = 70
+ quad.y4 = 80
+ quad.z = 90
+ quad.color = 'gray'
+ quad.opacity = 0.5
+
+ expect(quad.x1).to eq(10)
+ expect(quad.y1).to eq(20)
+ expect(quad.x2).to eq(30)
+ expect(quad.y2).to eq(40)
+ expect(quad.x3).to eq(50)
+ expect(quad.y3).to eq(60)
+ expect(quad.x4).to eq(70)
+ expect(quad.y4).to eq(80)
+ expect(quad.z).to eq(90)
+ expect(quad.color.r).to eq(2/3.0)
+ expect(quad.opacity).to eq(0.5)
+ end
+ end
+
+ # Quads define their own `contains?` method
describe "#contains?" do
quad = Quad.new(
- x1: -25, y1: 0,
- x2: 0, y2: -25,
- x3: 25, y3: 0,
- x4: 0, y4: 25
+ x1: 1, y1: 1,
+ x2: 3, y2: 1,
+ x3: 3, y3: 3,
+ x4: 1, y4: 3
)
+ # Grid looks like this, 2x2 quad at point (1, 1):
+ #
+ # 0 1 2 3 4
+ # 0 +--+--+--+--+
+ # | | | | |
+ # 1 +--+--+--+--+
+ # | |XX|XX| |
+ # 2 +--+--+--+--+
+ # | |XX|XX| |
+ # 3 +--+--+--+--+
+ # | | | | |
+ # 4 +--+--+--+--+
+
it "returns true if point is inside the quad" do
- expect(quad.contains?(0 , 0)).to be true
- expect(quad.contains?(25, 0)).to be true
+ expect(quad.contains?(1, 1)).to be true
+ expect(quad.contains?(2, 1)).to be true
+ expect(quad.contains?(3, 1)).to be true
+ expect(quad.contains?(1, 2)).to be true
+ expect(quad.contains?(2, 2)).to be true
+ expect(quad.contains?(3, 2)).to be true
+ expect(quad.contains?(1, 3)).to be true
+ expect(quad.contains?(2, 3)).to be true
+ expect(quad.contains?(3, 3)).to be true
end
it "returns false if point is outside the quad" do
- expect(quad.contains?(-26, 0)).to be false
- expect(quad.contains?( 0, 26)).to be false
+ # Clockwise around the quad
+ expect(quad.contains?(0, 0)).to be false
+ expect(quad.contains?(1, 0)).to be false
+ expect(quad.contains?(2, 0)).to be false
+ expect(quad.contains?(3, 0)).to be false
+ expect(quad.contains?(4, 0)).to be false
+ expect(quad.contains?(4, 1)).to be false
+ expect(quad.contains?(4, 2)).to be false
+ expect(quad.contains?(4, 3)).to be false
+ expect(quad.contains?(4, 4)).to be false
+ expect(quad.contains?(3, 4)).to be false
+ expect(quad.contains?(2, 4)).to be false
+ expect(quad.contains?(1, 4)).to be false
+ expect(quad.contains?(0, 4)).to be false
+ expect(quad.contains?(0, 3)).to be false
+ expect(quad.contains?(0, 2)).to be false
+ expect(quad.contains?(0, 1)).to be false
end
end