summaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorTom Black <[email protected]>2016-12-24 22:17:34 -0600
committerTom Black <[email protected]>2016-12-24 22:17:34 -0600
commite81d32b470cdead1c114b6d1b5b6bda958d6b1ad (patch)
tree3d61e376c8f460b2ff932cb9f9104f2e0cf5b72e /test
parent326b74d485ce81c0a4e1da0e5158a2c83e028915 (diff)
downloadruby2d-e81d32b470cdead1c114b6d1b5b6bda958d6b1ad.tar.gz
ruby2d-e81d32b470cdead1c114b6d1b5b6bda958d6b1ad.zip
Merge all tests into `test/` directory
Diffstat (limited to 'test')
-rw-r--r--test/color_spec.rb37
-rw-r--r--test/controller.rb47
-rw-r--r--test/dsl_spec.rb29
-rw-r--r--test/input.rb49
-rw-r--r--test/spec_helper.rb23
-rw-r--r--test/sprite_spec.rb11
-rw-r--r--test/testcard.rb188
7 files changed, 384 insertions, 0 deletions
diff --git a/test/color_spec.rb b/test/color_spec.rb
new file mode 100644
index 0000000..ed23712
--- /dev/null
+++ b/test/color_spec.rb
@@ -0,0 +1,37 @@
+require 'ruby2d'
+
+RSpec.describe Ruby2D::Color do
+
+ describe '#is_valid?' do
+ it 'determines if a color string is valid' do
+ expect(Ruby2D::Color.is_valid? 'red').to eq true
+ expect(Ruby2D::Color.is_valid? 'balloons').to eq false
+ end
+
+ it 'determines if a color string is valid hex value: # follow by 6 letters/numbers' do
+ expect(Ruby2D::Color.is_valid? '#c0c0c0').to eq true
+ expect(Ruby2D::Color.is_valid? '#00000').to eq false
+ expect(Ruby2D::Color.is_valid? '123456').to eq false
+ end
+
+ it 'determines if an array is a valid color' do
+ expect(Ruby2D::Color.is_valid? [1.0, 0, 0, 1.0]).to eq true
+ expect(Ruby2D::Color.is_valid? [1.0, 0, 0]).to eq false
+ end
+
+ it 'prevents allow color values out of range' do
+ expect(Ruby2D::Color.is_valid? [1.0, 0, 0.0, 255]).to eq true
+ expect(Ruby2D::Color.is_valid? [1.2, 0, 0, 0]).to eq false
+ expect(Ruby2D::Color.is_valid? [-0.1, 0, 0, 0]).to eq false
+ expect(Ruby2D::Color.is_valid? [255, 255, 256, 255]).to eq false
+ expect(Ruby2D::Color.is_valid? [-1, 0, 127, 255]).to eq false
+ end
+ end
+
+ describe '#new' do
+ it 'raises error on bad color' do
+ expect { Ruby2D::Color.new 42 }.to raise_error Ruby2D::Error
+ end
+ end
+
+end
diff --git a/test/controller.rb b/test/controller.rb
new file mode 100644
index 0000000..0007ddd
--- /dev/null
+++ b/test/controller.rb
@@ -0,0 +1,47 @@
+require 'ruby2d'
+
+set width: 200, height: 100, title: "Ruby 2D – Controller"
+
+on controller: 'left' do
+ puts "conroller left"
+end
+
+on controller: 'right' do
+ puts "conroller right"
+end
+
+on controller: 'up' do
+ puts "conroller up"
+end
+
+on controller: 'down' do
+ puts "conroller down"
+end
+
+on controller: 0 do
+ puts "conroller btn 0"
+end
+
+on controller: 1 do
+ puts "conroller btn 1"
+end
+
+on controller: 2 do
+ puts "conroller btn 2"
+end
+
+on controller: 3 do
+ puts "conroller btn 3"
+end
+
+on_controller do |which, is_axis, axis, val, is_btn, btn|
+ puts "=== Controller Pressed ===",
+ "which: which",
+ "is_axis: #{is_axis}",
+ "axis: #{axis}",
+ "val: #{val}",
+ "is_btn: #{is_btn}",
+ "btn: #{btn}"
+end
+
+show
diff --git a/test/dsl_spec.rb b/test/dsl_spec.rb
new file mode 100644
index 0000000..6d3d8b4
--- /dev/null
+++ b/test/dsl_spec.rb
@@ -0,0 +1,29 @@
+require 'ruby2d'
+
+RSpec.describe Ruby2D::DSL do
+
+ describe '#get' do
+ it 'gets the default window attributes' do
+ expect(get :width).to eq 640
+ expect(get :height).to eq 480
+ expect(get :title).to eq "Ruby 2D"
+ end
+ end
+
+ describe '#set' do
+ it 'sets a single window attribute' do
+ set width: 300
+ expect(get :width).to eq 300
+ expect(get :height).to eq 480
+ expect(get :title).to eq "Ruby 2D"
+ end
+
+ it 'sets multiple window attributes at a time' do
+ set width: 800, height: 600, title: "Hello tests!"
+ expect(get :width).to eq 800
+ expect(get :height).to eq 600
+ expect(get :title).to eq "Hello tests!"
+ end
+ end
+
+end
diff --git a/test/input.rb b/test/input.rb
new file mode 100644
index 0000000..9c8d7b2
--- /dev/null
+++ b/test/input.rb
@@ -0,0 +1,49 @@
+require 'ruby2d'
+
+set width: 200, height: 100, title: "Ruby 2D – Input"
+
+on key_down: 'a' do
+ puts "Key 'a' pressed"
+end
+
+on key: 'a' do
+ puts "Key 'a' held down"
+end
+
+on key_up: 'a' do
+ puts "Key 'a' released"
+end
+
+on key_down: 'any' do
+ puts "A key was pressed"
+end
+
+on_key do |key|
+ puts "on_key: #{key}"
+end
+
+on mouse: 'left' do
+ puts "mouse left"
+end
+
+on mouse: 'right' do
+ puts "mouse right"
+end
+
+on mouse: 'down' do
+ puts "mouse down"
+end
+
+on mouse: 'up' do
+ puts "mouse up"
+end
+
+on mouse: 'any' do
+ puts "mouse any"
+end
+
+on key: 'escape' do
+ close
+end
+
+show
diff --git a/test/spec_helper.rb b/test/spec_helper.rb
new file mode 100644
index 0000000..d93bff8
--- /dev/null
+++ b/test/spec_helper.rb
@@ -0,0 +1,23 @@
+RSpec.configure do |config|
+ config.expect_with :rspec do |expectations|
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
+ end
+
+ config.mock_with :rspec do |mocks|
+ mocks.verify_partial_doubles = true
+ end
+
+ # Silence output when running tests
+ original_stderr = $stderr
+ original_stdout = $stdout
+ config.before(:all) do
+ # Redirect stderr and stdout
+ $stderr = File.open(File::NULL, "w")
+ $stdout = File.open(File::NULL, "w")
+ end
+ config.after(:all) do
+ # Restore
+ $stderr = original_stderr
+ $stdout = original_stdout
+ end
+end
diff --git a/test/sprite_spec.rb b/test/sprite_spec.rb
new file mode 100644
index 0000000..42268be
--- /dev/null
+++ b/test/sprite_spec.rb
@@ -0,0 +1,11 @@
+require 'ruby2d'
+
+RSpec.describe Ruby2D::Sprite do
+
+ describe '#new' do
+ it 'creates a new sprite' do
+ Ruby2D::Sprite.new(0, 0, "tests/media/sprite_sheet.png")
+ end
+ end
+
+end
diff --git a/test/testcard.rb b/test/testcard.rb
new file mode 100644
index 0000000..dfe049b
--- /dev/null
+++ b/test/testcard.rb
@@ -0,0 +1,188 @@
+unless RUBY_ENGINE == 'opal'
+ require 'ruby2d'
+end
+
+if RUBY_ENGINE == 'opal'
+ media = "../tests/media"
+else
+ media = "media"
+end
+
+set diagnostics: true
+
+set width: 700, height: 500, title: "Ruby 2D – Test Card"
+
+# Read window attributes
+puts "=== Window Attributes ===
+Title: #{get :title}
+Width: #{get :width}
+Height: #{get :height}
+FPS: #{get :fps}
+Self: #{get :window}\n\n"
+
+# Primary colors
+Rectangle.new(0, 0, 50, 100, [1, 0, 0, 1])
+Rectangle.new(50, 0, 50, 100, [0, 1, 0, 1])
+Rectangle.new(100, 0, 50, 100, [0, 0, 1, 1])
+
+# Color strings
+Square.new( 150, 0, 50, 'black')
+Square.new( 200, 0, 50, 'gray')
+Square.new( 250, 0, 50, 'silver')
+Square.new( 300, 0, 50, 'white')
+Rectangle.new(350, 0, 50, 50, 'navy')
+Rectangle.new(400, 0, 50, 50, 'blue')
+Rectangle.new(450, 0, 50, 50, 'aqua')
+Rectangle.new(500, 0, 50, 50, 'teal')
+Rectangle.new(550, 0, 50, 50, 'olive')
+
+Rectangle.new(150, 50, 50, 50, 'green')
+Rectangle.new(200, 50, 50, 50, 'lime')
+Rectangle.new(250, 50, 50, 50, 'yellow')
+Rectangle.new(300, 50, 50, 50, 'orange')
+Rectangle.new(350, 50, 50, 50, 'red')
+Rectangle.new(400, 50, 50, 50, 'maroon')
+Rectangle.new(450, 50, 50, 50, 'fuchsia')
+Rectangle.new(500, 50, 50, 50, 'purple')
+Rectangle.new(550, 50, 50, 50, 'brown')
+
+# Mix of named colors and numbers
+Rectangle.new(600, 0, 50, 50,
+[
+ 'red',
+ 'green',
+ 'blue',
+ 'yellow'
+])
+Rectangle.new(650, 0, 50, 50,
+[
+ [1.0, 0, 0, 1],
+ 'green',
+ [0.0, 0, 1, 1.0],
+ 'yellow'
+])
+Rectangle.new(600, 50, 50, 50, 'random')
+Rectangle.new(650, 50, 50, 50, 'random')
+
+# White to black gradient
+Rectangle.new(0, 100, 700, 25,
+[
+ [1.0, 1.0, 1.0, 1.0],
+ [0.0, 0.0, 0.0, 0.0],
+ [0.0, 0.0, 0.0, 0.0],
+ [1.0, 1.0, 1.0, 1.0]
+])
+
+# Color gradient
+Rectangle.new(0, 125, 700, 50,
+[
+ [1.0, 0.0, 0.0, 1.0],
+ [0.0, 1.0, 0.0, 1.0],
+ [0.0, 0.0, 1.0, 1.0],
+ [1.0, 1.0, 0.0, 1.0]
+])
+
+# Transparancy
+Rectangle.new(0, 165, 700, 35,
+[
+ [1.0, 1.0, 1.0, 0.0],
+ [1.0, 1.0, 1.0, 1.0],
+ [1.0, 1.0, 1.0, 1.0],
+ [1.0, 1.0, 1.0, 0.0]
+])
+
+# Triangles
+Triangle.new(25, 200, 50, 250, 0, 250, [1.0, 0, 0, 1.0])
+Triangle.new(75, 200, 100, 250, 50, 250, [ 0, 1.0, 0, 1.0])
+Triangle.new(125, 200, 150, 250, 100, 250, [ 0, 0, 1.0, 1.0])
+Triangle.new(175, 200, 200, 250, 150, 250,
+[
+ [1.0, 0, 0, 1.0],
+ [0, 1.0, 0, 1.0],
+ [0, 0, 1.0, 1.0]
+])
+Rectangle.new(200, 200, 50, 50, [0.5, 0.5, 0.5, 1.0]) # add background for transparancy
+Triangle.new(225, 200, 250, 250, 200, 250,
+[
+ [1.0, 1.0, 1.0, 1.0],
+ [0.0, 0.0, 0.0, 1.0],
+ [1.0, 1.0, 1.0, 0.0]
+])
+
+# Quadrilaterals
+Quad.new(
+ 300, 200,
+ 350, 200,
+ 300, 250,
+ 250, 250,
+ [
+ [1.0, 0.0, 0.0, 1.0],
+ [0.0, 1.0, 0.0, 1.0],
+ [0.0, 0.0, 1.0, 1.0],
+ [1.0, 1.0, 0.0, 1.0]
+ ]
+)
+
+Quad.new(
+ 250, 200,
+ 300, 200,
+ 350, 250,
+ 300, 250,
+ [
+ [1.0, 1.0, 1.0, 0.0],
+ [1.0, 1.0, 1.0, 0.0],
+ [1.0, 1.0, 1.0, 1.0],
+ [1.0, 1.0, 1.0, 0.0]
+ ]
+)
+
+# Images
+Image.new(590, 180, "#{media}/image.png")
+Image.new(590, 290, "#{media}/image.jpg")
+Image.new(590, 400, "#{media}/image.bmp")
+img_r = Image.new(350, 200, "#{media}/colors.png")
+img_r.width, img_r.height = 50, 50
+# img_r.color = [1.0, 0.3, 0.3, 1.0]
+img_g = Image.new(400, 200, "#{media}/colors.png")
+img_g.width, img_g.height = 50, 50
+# img_g.color = [0.3, 1.0, 0.3, 1.0]
+img_b = Image.new(450, 200, "#{media}/colors.png")
+img_b.width, img_b.height = 50, 50
+# img_b.color = [0.3, 0.3, 1.0, 1.0]
+
+# Text
+txt_r = Text.new( 44, 202, 20, "R", "#{media}/bitstream_vera/vera.ttf")
+# txt_r.color = [1.0, 0.0, 0.0, 1.0]
+txt_g = Text.new( 92, 202, 20, "G", "#{media}/bitstream_vera/vera.ttf")
+# txt_g.color = [0.0, 1.0, 0.0, 1.0]
+txt_b = Text.new(144, 202, 20, "B", "#{media}/bitstream_vera/vera.ttf")
+# txt_b.color = [0.0, 0.0, 1.0, 1.0]
+
+# Frames per second
+fps = Text.new(10, 470, 20, "", "#{media}/bitstream_vera/vera.ttf")
+
+# Sprites
+s1 = Sprite.new(500, 200, "#{media}/sprite_sheet.png")
+s1.add(forwards: [
+ [ 0, 0, 50, 50, 30],
+ [ 50, 0, 50, 50, 40],
+ [100, 0, 50, 50, 50],
+ [150, 0, 50, 50, 60]
+])
+
+# Pointer for mouse
+pointer = Square.new(0, 0, 10, 'white')
+
+on key: 'escape' do
+ close
+end
+
+update do
+ pointer.x = (get :mouse_x) - 5
+ pointer.y = (get :mouse_y) - 7
+ s1.animate(:forwards)
+ # puts get :fps
+ fps.text = "FPS: #{(get :fps).round(3)}"
+end
+
+show