entityjs 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
*/
|