entityjs 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +18 -14
- data/entityjs.gemspec +1 -0
- data/lib/entityjs/assets.rb +13 -163
- data/lib/entityjs/command.rb +5 -2
- data/lib/entityjs/commands/build.rb +63 -23
- data/lib/entityjs/commands/eunit.rb +44 -0
- data/lib/entityjs/commands/release.rb +1 -1
- data/lib/entityjs/commands/server.rb +19 -4
- data/lib/entityjs/compile.rb +152 -0
- data/lib/entityjs/config.rb +8 -0
- data/lib/entityjs/dirc.rb +70 -17
- data/lib/entityjs/page.rb +106 -0
- data/lib/entityjs/parsers/parse_coffee.rb +12 -0
- data/lib/entityjs/version.rb +1 -1
- data/lib/entityjs.rb +18 -4
- data/public/qunit/qunit.css +9 -3
- data/public/qunit/qunit.entity.js +113 -31
- data/public/qunit/qunit.js +296 -235
- data/public/qunit/qunit.mock.js +54 -2
- data/public/tests.html +0 -15
- data/spec/javascripts/src/cycle/tween_spec.js +59 -0
- data/spec/javascripts/src/display/screen_spec.js +0 -15
- data/spec/javascripts/src/display/text_spec.js +4 -0
- data/spec/javascripts/src/input/mouse_spec.js +18 -18
- data/spec/javascripts/src/input/preventdefault_spec.js +14 -0
- data/spec/javascripts/src/math/drag_spec.js +2 -2
- data/spec/javascripts/src/math/hit_spec.js +24 -0
- data/spec/javascripts/src/math/point_spec.js +3 -3
- data/spec/javascripts/src/math/tile_spec.js +1 -1
- data/spec/javascripts/src/media/sound_spec.js +1 -1
- data/spec/javascripts/src/pattern/automap_spec.js +3 -3
- data/spec/javascripts/src/pattern/flicker_spec.js +2 -1
- data/spec/javascripts/src/util/random_spec.js +17 -0
- data/spec/javascripts/src/util/scene_spec.js +15 -0
- data/spec/lib/entityjs/assets_spec.rb +2 -201
- data/spec/lib/entityjs/commands/build_spec.rb +18 -5
- data/spec/lib/entityjs/commands/eunit_spec.rb +18 -0
- data/spec/lib/entityjs/commands/release_spec.rb +2 -0
- data/spec/lib/entityjs/compile_spec.rb +204 -0
- data/spec/lib/entityjs/dirc_spec.rb +8 -4
- data/spec/lib/entityjs/page_spec.rb +59 -0
- data/spec/support/factories.rb +0 -2
- data/src/core/entity.js +4 -18
- data/src/core/query.js +1 -1
- data/src/core/re.js +6 -6
- data/src/core/system.js +17 -12
- data/src/cycle/tween.js +93 -31
- data/src/display/align.js +11 -6
- data/src/display/circle.js +5 -4
- data/src/display/imgtext.js +33 -22
- data/src/display/screen.js +0 -8
- data/src/display/text.js +37 -4
- data/src/input/keyboard.js +15 -5
- data/src/input/mouse.js +15 -25
- data/src/input/preventdefault.js +11 -0
- data/src/math/body.js +35 -16
- data/src/math/drag.js +2 -2
- data/src/math/force.js +2 -2
- data/src/math/hit.js +15 -6
- data/src/math/hitmap.js +6 -6
- data/src/math/point.js +1 -1
- data/src/math/tile.js +22 -17
- data/src/media/sound.js +1 -1
- data/src/pattern/automap.js +16 -27
- data/src/pattern/flicker.js +9 -5
- data/src/util/random.js +4 -0
- data/src/util/scene.js +2 -6
- data/templates/arrow_keys/scripts/{display → displays}/arrow.js +0 -0
- data/templates/arrow_keys/scripts/{input → inputs}/controls.js +0 -0
- data/templates/arrow_keys/tests/{display → displays}/arrow_test.js +1 -1
- data/templates/arrow_keys/tests/{input → inputs}/controls_test.js +0 -0
- data/templates/arrow_keys/tests/scenes/load_test.js +2 -0
- data/templates/{blank → circle}/config.yml +0 -0
- data/templates/{blank → circle}/readme.txt +0 -0
- data/templates/circle/scripts/init.js +7 -0
- data/templates/circle/scripts/scenes/home.js +62 -0
- data/templates/circle/scripts/scenes/load.js +11 -0
- data/templates/circle/tests/scenes/home_test.js +29 -0
- data/templates/circle/tests/scenes/load_test.js +15 -0
- data/templates/platform/config.yml +2 -1
- data/templates/platform/readme.txt +15 -16
- data/templates/platform/scripts/{display → displays}/bit.js +0 -0
- data/templates/platform/scripts/{display → displays}/hero.js +0 -0
- data/templates/platform/scripts/{display → displays}/tile.js +0 -0
- data/templates/platform/scripts/{display → displays}/tsprite.js +0 -0
- data/templates/platform/{assets → scripts}/levels/level1.tmx +0 -0
- data/templates/platform/scripts/{util → utils}/counter.js +0 -0
- data/templates/platform/scripts/{util → utils}/level.js +0 -0
- data/templates/platform/tests/{display → displays}/bit_test.js +1 -1
- data/templates/platform/tests/displays/hero_test.js +73 -0
- data/templates/platform/tests/{display → displays}/tile_test.js +1 -1
- data/templates/platform/tests/displays/tsprite_test.js +8 -0
- data/templates/platform/tests/items/coin_test.js +10 -10
- data/templates/platform/tests/items/item_test.js +9 -9
- data/templates/platform/tests/items/spring_test.js +3 -3
- data/templates/platform/tests/scenes/load_test.js +2 -1
- data/templates/platform/tests/{util → utils}/counter_test.js +2 -2
- data/templates/platform/tests/{util → utils}/level_test.js +3 -0
- data/templates/pong/config.yml +22 -0
- data/templates/pong/readme.txt +3 -0
- data/templates/pong/scripts/controls/ai.js +30 -0
- data/templates/pong/scripts/controls/arena.js +33 -0
- data/templates/pong/scripts/controls/hitmap.js +54 -0
- data/templates/pong/scripts/controls/player.js +24 -0
- data/templates/pong/scripts/controls/twoarena.js +14 -0
- data/templates/pong/scripts/displays/ball.js +29 -0
- data/templates/pong/scripts/displays/counter.js +22 -0
- data/templates/pong/scripts/displays/paddle.js +22 -0
- data/templates/pong/scripts/init.js +9 -0
- data/templates/pong/scripts/scenes/game.js +61 -0
- data/templates/pong/scripts/scenes/home.js +55 -0
- data/templates/pong/scripts/scenes/over.js +29 -0
- data/templates/pong/tests/controls/ai_test.js +34 -0
- data/templates/pong/tests/controls/arena_test.js +20 -0
- data/templates/pong/tests/controls/hitmap_test.js +89 -0
- data/templates/pong/tests/controls/player_test.js +25 -0
- data/templates/pong/tests/controls/twoarena_test.js +7 -0
- data/templates/pong/tests/displays/ball_test.js +10 -0
- data/templates/pong/tests/displays/counter_test.js +13 -0
- data/templates/pong/tests/displays/paddle_test.js +17 -0
- data/templates/pong/tests/scenes/game_test.js +16 -0
- data/templates/pong/tests/scenes/home_test.js +30 -0
- data/templates/pong/tests/scenes/over_test.js +16 -0
- data/templates/tiltmaze/config.yml +25 -0
- data/templates/tiltmaze/readme.txt +79 -0
- data/templates/tiltmaze/scripts/displays/ball.js +78 -0
- data/templates/tiltmaze/scripts/displays/target.js +13 -0
- data/templates/tiltmaze/scripts/displays/tile.js +2 -0
- data/templates/tiltmaze/scripts/init.js +7 -0
- data/templates/tiltmaze/scripts/levels/level1.json +14 -0
- data/templates/tiltmaze/scripts/levels/level2.json +14 -0
- data/templates/tiltmaze/scripts/levels/level3.json +14 -0
- data/templates/tiltmaze/scripts/levels/level4.json +15 -0
- data/templates/tiltmaze/scripts/levels/level5.json +18 -0
- data/templates/tiltmaze/scripts/scenes/game.js +56 -0
- data/templates/tiltmaze/scripts/scenes/home.js +24 -0
- data/templates/tiltmaze/scripts/structs/level.js +82 -0
- data/templates/tiltmaze/scripts/tiles/walltile.js +147 -0
- data/templates/tiltmaze/tests/displays/ball_test.js +67 -0
- data/templates/tiltmaze/tests/displays/target_test.js +8 -0
- data/templates/tiltmaze/tests/factories.js +38 -0
- data/templates/tiltmaze/tests/scenes/game_test.js +59 -0
- data/templates/tiltmaze/tests/scenes/home_test.js +7 -0
- data/templates/tiltmaze/tests/structs/level_test.js +44 -0
- data/templates/tiltmaze/tests/tiles/walltile_test.js +36 -0
- metadata +106 -33
- data/templates/platform/tests/display/hero_test.js +0 -73
- data/templates/platform/tests/display/tsprite_test.js +0 -8
data/lib/entityjs/config.rb
CHANGED
data/lib/entityjs/dirc.rb
CHANGED
|
@@ -29,11 +29,12 @@ module Entityjs
|
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def self.find_tests_url(ignore=nil)
|
|
32
|
+
valids = Compile.valid_scripts.join(",")
|
|
32
33
|
ignore ||= []
|
|
33
|
-
tests = Dir["#{Dirc.game_root}/#{Config.tests_folder}/**/*.
|
|
34
|
+
tests = Dir["#{Dirc.game_root}/#{Config.tests_folder}/**/*.{#{valids}}"].sort
|
|
34
35
|
|
|
35
36
|
tests = tests.collect do |i|
|
|
36
|
-
i[i.rindex('
|
|
37
|
+
i[i.rindex(Config.tests_folder+'/')..-1]
|
|
37
38
|
end
|
|
38
39
|
|
|
39
40
|
if ignore.any?
|
|
@@ -43,14 +44,45 @@ module Entityjs
|
|
|
43
44
|
return tests
|
|
44
45
|
end
|
|
45
46
|
|
|
47
|
+
#returns all game scripts with short paths
|
|
48
|
+
def self.find_scripts_short(ignore=nil, order=nil)
|
|
49
|
+
scripts = self.find_scripts_url(ignore, order)
|
|
50
|
+
|
|
51
|
+
scripts.collect do |i|
|
|
52
|
+
|
|
53
|
+
i.sub(Config.scripts_folder+'/', '')
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
46
58
|
def self.find_scripts_url(ignore=nil, order=nil)
|
|
47
|
-
ignore ||= []
|
|
48
|
-
order ||= []
|
|
49
59
|
|
|
50
60
|
scripts = self.find_scripts(ignore, order)
|
|
51
61
|
|
|
52
62
|
#change filenames
|
|
53
|
-
scripts = scripts.collect{|k| k[k.rindex('
|
|
63
|
+
scripts = scripts.collect{|k| k[k.rindex(Config.scripts_folder+'/')..-1] }
|
|
64
|
+
|
|
65
|
+
return scripts
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def self.find_entity_src_url(ignore=nil)
|
|
69
|
+
srcs = self.find_entity_src(ignore)
|
|
70
|
+
|
|
71
|
+
#remove src directory and replace with entityjs
|
|
72
|
+
srcs = srcs.collect{|k| k[k.rindex('src/')..-1].gsub('src', 'entityjs') }
|
|
73
|
+
|
|
74
|
+
return srcs
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def self.find_scripts(ignore=nil, order=nil)
|
|
78
|
+
ignore ||= []
|
|
79
|
+
order ||= []
|
|
80
|
+
valids = Compile.valid_scripts.join(",")
|
|
81
|
+
|
|
82
|
+
scripts = Dir["#{Dirc.game_root}/#{Config.scripts_folder}/**/*.{#{valids}}"].sort
|
|
83
|
+
|
|
84
|
+
#sort again by extension
|
|
85
|
+
scripts.sort! {|x,y| File.extname(x) <=> File.extname(y) }
|
|
54
86
|
|
|
55
87
|
#ignore files
|
|
56
88
|
if ignore.any?
|
|
@@ -74,29 +106,46 @@ module Entityjs
|
|
|
74
106
|
return scripts
|
|
75
107
|
end
|
|
76
108
|
|
|
77
|
-
def self.
|
|
78
|
-
|
|
79
|
-
srcs = self.find_entity_src(ignore)
|
|
109
|
+
def self.find_eunit_src_url(ignore=nil)
|
|
110
|
+
srcs = self.find_eunit_src(ignore)
|
|
80
111
|
|
|
81
112
|
#remove src directory and replace with entityjs
|
|
82
|
-
srcs = srcs.collect{|k| k[k.rindex('
|
|
83
|
-
|
|
84
|
-
if ignore.any?
|
|
85
|
-
srcs.delete_if {|i| !i.match(/#{ignore.join('|')}/).nil? }
|
|
86
|
-
end
|
|
113
|
+
srcs = srcs.collect{|k| k[k.rindex('qunit/')..-1] }
|
|
87
114
|
|
|
88
115
|
return srcs
|
|
116
|
+
|
|
89
117
|
end
|
|
90
118
|
|
|
91
|
-
def self.
|
|
119
|
+
def self.find_eunit_src(ignore=nil)
|
|
120
|
+
ignore ||= []
|
|
121
|
+
ents = Dir[Entityjs::eunit_folder+"/**/*.js"].sort
|
|
122
|
+
|
|
123
|
+
#make sure qunit is at the top
|
|
124
|
+
|
|
125
|
+
i = ents.index{|i| i.match(/qunit\.js$/) }
|
|
126
|
+
|
|
127
|
+
if i.nil?
|
|
128
|
+
puts 'Error cannot find qunit.js!'
|
|
129
|
+
return ents
|
|
130
|
+
end
|
|
92
131
|
|
|
93
|
-
|
|
132
|
+
#remove
|
|
133
|
+
k = ents.delete_at(i)
|
|
94
134
|
|
|
135
|
+
#push at front
|
|
136
|
+
ents.unshift(k)
|
|
137
|
+
|
|
138
|
+
if ignore.any?
|
|
139
|
+
ents.delete_if {|i| !i.match(/#{ignore.join('|')}/).nil? }
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
return ents
|
|
95
143
|
end
|
|
96
144
|
|
|
97
145
|
def self.find_entity_src(ignore=nil)
|
|
146
|
+
ignore ||= []
|
|
98
147
|
|
|
99
|
-
ents = Dir[Entityjs::
|
|
148
|
+
ents = Dir[Entityjs::source_folder+"/**/*.js"]
|
|
100
149
|
|
|
101
150
|
#sort by name
|
|
102
151
|
ents.sort!
|
|
@@ -114,6 +163,10 @@ module Entityjs
|
|
|
114
163
|
|
|
115
164
|
ents.unshift(k)
|
|
116
165
|
|
|
166
|
+
if ignore.any?
|
|
167
|
+
ents.delete_if {|i| !i.match(/#{ignore.join('|')}/).nil? }
|
|
168
|
+
end
|
|
169
|
+
|
|
117
170
|
return ents
|
|
118
171
|
end
|
|
119
172
|
|
|
@@ -133,7 +186,7 @@ module Entityjs
|
|
|
133
186
|
|
|
134
187
|
def self.create_dir(name, move=false)
|
|
135
188
|
|
|
136
|
-
if !
|
|
189
|
+
if !File.directory? name
|
|
137
190
|
Dir.mkdir(name)
|
|
138
191
|
end
|
|
139
192
|
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
#The Page class renders html pages for the server
|
|
2
|
+
module Entityjs
|
|
3
|
+
|
|
4
|
+
class Page
|
|
5
|
+
|
|
6
|
+
def self.processor_ext
|
|
7
|
+
return '.js'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.render_play
|
|
11
|
+
self.set_vars("play.html")
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.render_tests
|
|
15
|
+
self.set_vars('tests.html', true)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.render_entityjs_src(path)
|
|
19
|
+
path = Entityjs::root+'/src/'+path
|
|
20
|
+
|
|
21
|
+
return IO.read(path)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.render_test(path)
|
|
25
|
+
file = path.sub(/#{self.processor_ext}$/i, '');
|
|
26
|
+
|
|
27
|
+
return Compile.test_to_js(file)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def self.render_script(path)
|
|
31
|
+
file = path.sub(/#{self.processor_ext}$/i, '');
|
|
32
|
+
return Compile.script_to_js(file)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.render_eunit(path)
|
|
36
|
+
IO.read(Entityjs::root+"/public/qunit/#{path}")
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
protected
|
|
40
|
+
#defines varaibles on the template htmls for view on webpage
|
|
41
|
+
def self.set_vars(path, tests=false)
|
|
42
|
+
contents = IO.read("#{Entityjs::root}/public/#{path}")
|
|
43
|
+
|
|
44
|
+
#reload config for changes
|
|
45
|
+
Config.instance.reload
|
|
46
|
+
|
|
47
|
+
#set width, height and canvas id
|
|
48
|
+
contents = contents.sub("$WIDTH", Config.instance.width.to_s)
|
|
49
|
+
contents = contents.sub("$HEIGHT", Config.instance.height.to_s)
|
|
50
|
+
contents = contents.sub("$CANVAS_ID", Config.instance.canvas_id)
|
|
51
|
+
|
|
52
|
+
if !Config.instance.canvas_border
|
|
53
|
+
contents = contents.sub('border:1px #333 solid;', '')
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
#set javascript srcs
|
|
57
|
+
contents.sub("$JS", self.compile_js_html(tests))
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
#compiles html js tags for render on webpage
|
|
61
|
+
def self.compile_js_html(tests=false)
|
|
62
|
+
js = %Q(
|
|
63
|
+
<script type=\"text/javascript\">
|
|
64
|
+
window.addEventListener\(\"load\", function(){
|
|
65
|
+
#{Build.js_config}
|
|
66
|
+
re.version = \"#{VERSION}\";
|
|
67
|
+
}\);
|
|
68
|
+
</script>
|
|
69
|
+
)
|
|
70
|
+
ent = Dirc.find_entity_src_url(Config.instance.entity_ignore)
|
|
71
|
+
srcs = Dirc.find_scripts_url(Config.instance.scripts_ignore, Config.instance.scripts_order)
|
|
72
|
+
|
|
73
|
+
if tests
|
|
74
|
+
tests_src = Dirc.find_tests_url(Config.instance.tests_ignore)
|
|
75
|
+
ent += Dirc.find_eunit_src_url
|
|
76
|
+
else
|
|
77
|
+
tests_src = []
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
merg = ent | srcs | tests_src
|
|
81
|
+
|
|
82
|
+
last = ''
|
|
83
|
+
|
|
84
|
+
merg.each do |s|
|
|
85
|
+
|
|
86
|
+
#output a divider for each js root
|
|
87
|
+
first_folder = s.split('/').shift
|
|
88
|
+
if last != first_folder
|
|
89
|
+
js += "\n\n\t<!-- #{first_folder} -->\n"
|
|
90
|
+
last = first_folder
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
#add processor extension to non-js files so the server processes it into js
|
|
94
|
+
if s.match(/\.js$/).nil?
|
|
95
|
+
s += self.processor_ext
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
js += "\t<script src=\"#{s}\" type=\"text/javascript\"></script>\n"
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
return js
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
end
|
data/lib/entityjs/version.rb
CHANGED
data/lib/entityjs.rb
CHANGED
|
@@ -14,6 +14,14 @@ rescue LoadError
|
|
|
14
14
|
exit
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
+
begin
|
|
18
|
+
require "coffee-script"
|
|
19
|
+
rescue LoadError
|
|
20
|
+
puts "Could not load 'coffee-script'"
|
|
21
|
+
puts "run 'gem install coffee-script'"
|
|
22
|
+
exit
|
|
23
|
+
end
|
|
24
|
+
|
|
17
25
|
begin
|
|
18
26
|
require "uglifier"
|
|
19
27
|
rescue LoadError
|
|
@@ -30,16 +38,22 @@ rescue LoadError
|
|
|
30
38
|
exit
|
|
31
39
|
end
|
|
32
40
|
|
|
33
|
-
require "entityjs/version"
|
|
34
|
-
|
|
35
41
|
module Entityjs
|
|
36
42
|
|
|
37
43
|
def self.root
|
|
38
44
|
@root = File.expand_path('../..',__FILE__)
|
|
39
45
|
end
|
|
40
46
|
|
|
47
|
+
def self.source_folder
|
|
48
|
+
Entityjs::root+'/src'
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def self.eunit_folder
|
|
52
|
+
Entityjs::root+'/public/qunit'
|
|
53
|
+
end
|
|
54
|
+
|
|
41
55
|
def self.default_template
|
|
42
|
-
'
|
|
56
|
+
'circle'
|
|
43
57
|
end
|
|
44
58
|
|
|
45
59
|
def self.template_path(name=nil)
|
|
@@ -47,7 +61,7 @@ module Entityjs
|
|
|
47
61
|
name = self.default_template
|
|
48
62
|
end
|
|
49
63
|
path = "#{Entityjs::root}/templates/#{name}"
|
|
50
|
-
if
|
|
64
|
+
if File.directory? path
|
|
51
65
|
return Dir.glob(path+'/*')
|
|
52
66
|
else
|
|
53
67
|
return nil
|
data/public/qunit/qunit.css
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* QUnit v1.
|
|
2
|
+
* QUnit v1.5.0pre - A JavaScript Unit Testing Framework
|
|
3
3
|
*
|
|
4
4
|
* http://docs.jquery.com/QUnit
|
|
5
5
|
*
|
|
6
|
-
* Copyright (c)
|
|
6
|
+
* Copyright (c) 2012 John Resig, Jörn Zaefferer
|
|
7
7
|
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
|
8
8
|
* or GPL (GPL-LICENSE.txt) licenses.
|
|
9
9
|
*/
|
|
@@ -54,6 +54,10 @@
|
|
|
54
54
|
color: #fff;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
#qunit-header label {
|
|
58
|
+
display: inline-block;
|
|
59
|
+
}
|
|
60
|
+
|
|
57
61
|
#qunit-banner {
|
|
58
62
|
height: 5px;
|
|
59
63
|
}
|
|
@@ -223,4 +227,6 @@
|
|
|
223
227
|
position: absolute;
|
|
224
228
|
top: -10000px;
|
|
225
229
|
left: -10000px;
|
|
226
|
-
|
|
230
|
+
width: 1000px;
|
|
231
|
+
height: 1000px;
|
|
232
|
+
}
|
|
@@ -1,44 +1,108 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
push:function(obj){
|
|
13
|
-
this.stack.push(obj);
|
|
14
|
-
|
|
15
|
-
return QUnit.config.queue.unshift(EUnit.runStack);
|
|
1
|
+
ETest = function(){
|
|
2
|
+
};
|
|
3
|
+
|
|
4
|
+
ETest.prototype.push = function(){
|
|
5
|
+
var that = this;
|
|
6
|
+
if(QUnit.config.blocking){
|
|
7
|
+
that.run();
|
|
8
|
+
} else {
|
|
9
|
+
QUnit.config.queue.unshift(function(){
|
|
10
|
+
that.run();
|
|
11
|
+
});
|
|
16
12
|
}
|
|
17
13
|
};
|
|
14
|
+
|
|
15
|
+
ETest.prototype.run = function(){
|
|
16
|
+
ok(this.check(), this.message);
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/*
|
|
20
|
+
Disable re.ready for testing
|
|
21
|
+
*/
|
|
22
|
+
re.ready = function(){};
|
|
23
|
+
|
|
24
|
+
window.addEventListener('load', function(){
|
|
25
|
+
re.sys.init(re.canvas).start();
|
|
26
|
+
}, true);
|
|
27
|
+
|
|
18
28
|
/*
|
|
19
29
|
Expects a trigger call from the given obj.
|
|
20
30
|
|
|
21
31
|
var e = re.e('flicker');
|
|
22
32
|
|
|
23
|
-
expectTrigger(e, 'flicker:
|
|
33
|
+
expectTrigger(e, 'flicker:finish', function(){
|
|
24
34
|
//if triggered this will be called
|
|
25
35
|
});
|
|
26
36
|
|
|
37
|
+
var e = re.e('counter');
|
|
38
|
+
|
|
39
|
+
//expect given arguments
|
|
40
|
+
expectTrigger(e, 'maxed', [10]);
|
|
41
|
+
|
|
27
42
|
*/
|
|
28
43
|
function expectTrigger(obj, trigger, func){
|
|
29
|
-
var trig =
|
|
30
|
-
|
|
31
|
-
|
|
44
|
+
var trig = new ETest();
|
|
45
|
+
trig.called = 0;
|
|
46
|
+
trig.message = "Expected "+trigger+" to be triggered";
|
|
47
|
+
|
|
48
|
+
trig.check = function(){
|
|
49
|
+
return this.called;
|
|
32
50
|
};
|
|
33
51
|
|
|
34
52
|
trig.meth = function(){
|
|
35
53
|
trig.called++;
|
|
36
|
-
|
|
54
|
+
|
|
55
|
+
if(typeof func == 'object'){
|
|
56
|
+
|
|
57
|
+
var args = Array.prototype.slice.call(arguments, 0);
|
|
58
|
+
|
|
59
|
+
ok(!(args>func || args<func), "trigger "+trigger+" should have same arguments");
|
|
60
|
+
|
|
61
|
+
} else if(typeof func == 'function'){
|
|
62
|
+
func.apply(obj, arguments);
|
|
63
|
+
}
|
|
37
64
|
};
|
|
38
65
|
|
|
39
66
|
obj.on(trigger, trig.meth);
|
|
40
67
|
|
|
41
|
-
|
|
68
|
+
trig.push();
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
function expectValueUp(obj, prop){
|
|
72
|
+
var trig = new ETest();
|
|
73
|
+
trig.message = "Expected "+prop+" to value up";
|
|
74
|
+
trig.old = obj[prop];
|
|
75
|
+
|
|
76
|
+
trig.check = function(){
|
|
77
|
+
return this.old < obj[prop];
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
trig.push();
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
function expectValueDown(obj, prop){
|
|
84
|
+
var trig = new ETest();
|
|
85
|
+
trig.message = "Expected "+prop+" to value down";
|
|
86
|
+
trig.old = obj[prop];
|
|
87
|
+
|
|
88
|
+
trig.check = function(){
|
|
89
|
+
return this.old > obj[prop];
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
trig.push();
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
/*
|
|
96
|
+
|
|
97
|
+
re.e('circle')
|
|
98
|
+
.attr('color', '#ff0000');
|
|
99
|
+
|
|
100
|
+
pixelEqual(10, 10, 255, 0, 0, 0);
|
|
101
|
+
|
|
102
|
+
*/
|
|
103
|
+
function pixelEqual(x, y, r, g, b, a, message){
|
|
104
|
+
var actual = Array.prototype.slice.apply(re.sys.context.getImageData(x, y, 1, 1).data), expected = [r, g, b, a];
|
|
105
|
+
QUnit.push(QUnit.equiv(actual, expected), actual, expected, message);
|
|
42
106
|
}
|
|
43
107
|
|
|
44
108
|
/*
|
|
@@ -58,22 +122,22 @@ function expectFlicker(ent, flick){
|
|
|
58
122
|
}
|
|
59
123
|
|
|
60
124
|
/*
|
|
61
|
-
Expects an entity or component to have a current
|
|
125
|
+
Expects an entity or component to have a current event attached.
|
|
62
126
|
|
|
63
127
|
var e = re.e();
|
|
64
128
|
|
|
65
|
-
|
|
129
|
+
expectEvent(e, 'update'); //false
|
|
66
130
|
|
|
67
131
|
e.on('update', function(){
|
|
68
132
|
|
|
69
133
|
});
|
|
70
134
|
|
|
71
|
-
|
|
135
|
+
expectEvent(e, 'update') //true
|
|
72
136
|
|
|
73
137
|
*/
|
|
74
|
-
function
|
|
138
|
+
function expectEvent(ent, trigger, func){
|
|
75
139
|
if(arguments.length == 2){
|
|
76
|
-
ok(ent.has('^'+trigger), "Expected entity to have
|
|
140
|
+
ok(ent.has('^'+trigger), "Expected entity to have event "+trigger);
|
|
77
141
|
} else {
|
|
78
142
|
var fin = false;
|
|
79
143
|
for(var i in ent._re_signals[trigger]){
|
|
@@ -81,7 +145,7 @@ function expectListener(ent, trigger, func){
|
|
|
81
145
|
if(fin) break;
|
|
82
146
|
}
|
|
83
147
|
|
|
84
|
-
ok(fin, "Expected entity to have
|
|
148
|
+
ok(fin, "Expected entity to have event "+trigger+" with function");
|
|
85
149
|
|
|
86
150
|
}
|
|
87
151
|
}
|
|
@@ -127,7 +191,7 @@ var f = factory;
|
|
|
127
191
|
Generates a factory entity for easy use in the module()
|
|
128
192
|
|
|
129
193
|
//light weight
|
|
130
|
-
//a new coin in
|
|
194
|
+
//a new coin in coin will be created for every test()
|
|
131
195
|
module('coin', lazy('coin'));
|
|
132
196
|
|
|
133
197
|
//do something after coin creation
|
|
@@ -146,17 +210,23 @@ teardown:function(e){
|
|
|
146
210
|
}));
|
|
147
211
|
|
|
148
212
|
test('coin should have valid of 10', function(){
|
|
149
|
-
equal(
|
|
213
|
+
equal(coin.value, 10);
|
|
150
214
|
})
|
|
151
215
|
|
|
152
216
|
etc..
|
|
153
217
|
|
|
154
218
|
*/
|
|
155
|
-
var e;
|
|
156
219
|
function lazy(comps, obj){
|
|
220
|
+
var name;
|
|
221
|
+
if(typeof comps == 'string') comps = comps.split(' ');
|
|
222
|
+
name = comps[0];
|
|
223
|
+
var e;
|
|
224
|
+
|
|
157
225
|
return {
|
|
158
226
|
setup:function(){
|
|
159
|
-
|
|
227
|
+
|
|
228
|
+
window[name] = e = f(comps.join(' '));
|
|
229
|
+
|
|
160
230
|
if(typeof obj == 'function') obj(e);
|
|
161
231
|
if(obj && obj.setup) obj.setup(e);
|
|
162
232
|
},
|
|
@@ -167,6 +237,18 @@ function lazy(comps, obj){
|
|
|
167
237
|
}
|
|
168
238
|
}
|
|
169
239
|
|
|
240
|
+
function lazyScene(scene, args){
|
|
241
|
+
return {
|
|
242
|
+
setup:function(){
|
|
243
|
+
var s = window[scene] = re.scene(scene);
|
|
244
|
+
s.enter.apply(s, args);
|
|
245
|
+
},
|
|
246
|
+
teardown:function(){
|
|
247
|
+
re.scene().exit();
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
};
|
|
251
|
+
|
|
170
252
|
/*
|
|
171
253
|
Some super lazy evaluations
|
|
172
254
|
*/
|