entityjs 0.2.2 → 0.3.0

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.
Files changed (264) hide show
  1. data/.gitignore +7 -6
  2. data/.rspec +2 -0
  3. data/README.md +170 -49
  4. data/Rakefile +9 -0
  5. data/bin/entityjs +24 -14
  6. data/entityjs.gemspec +15 -9
  7. data/lib/entityjs/assets.rb +167 -0
  8. data/lib/entityjs/command.rb +52 -27
  9. data/lib/entityjs/commands/build.rb +128 -0
  10. data/lib/entityjs/commands/comp.rb +74 -0
  11. data/lib/entityjs/commands/font.rb +73 -0
  12. data/lib/entityjs/commands/new.rb +59 -0
  13. data/lib/entityjs/commands/server.rb +54 -0
  14. data/lib/entityjs/commands/templates.rb +28 -0
  15. data/lib/entityjs/commands/test.rb +69 -0
  16. data/lib/entityjs/config.rb +130 -0
  17. data/lib/entityjs/dirc.rb +184 -0
  18. data/lib/entityjs/parsers/parse_tmx.rb +41 -0
  19. data/lib/entityjs/parsers/parse_xml.rb +39 -0
  20. data/lib/entityjs/version.rb +1 -1
  21. data/lib/entityjs.rb +53 -0
  22. data/license.txt +1 -1
  23. data/public/play.html +122 -0
  24. data/public/qunit/qunit.css +226 -0
  25. data/public/qunit/qunit.entity.js +190 -0
  26. data/public/qunit/qunit.input.js +200 -0
  27. data/public/qunit/qunit.js +1598 -0
  28. data/public/qunit/qunit.mock.js +97 -0
  29. data/public/tests.html +45 -0
  30. data/spec/javascripts/helpers/accept.png +0 -0
  31. data/spec/javascripts/helpers/alligator.mp3 +0 -0
  32. data/spec/javascripts/helpers/alligator.ogg +0 -0
  33. data/spec/javascripts/helpers/canvas.js +15 -0
  34. data/spec/javascripts/helpers/entityunit.js +50 -0
  35. data/spec/javascripts/helpers/factories.js +11 -0
  36. data/spec/javascripts/helpers/jquery-1.7.1.min.js +4 -0
  37. data/spec/javascripts/src/core/comp_spec.js +145 -0
  38. data/spec/javascripts/src/core/entity_spec.js +324 -0
  39. data/spec/javascripts/src/core/load_spec.js +71 -0
  40. data/spec/javascripts/src/core/query_spec.js +157 -0
  41. data/spec/javascripts/src/core/re_spec.js +61 -0
  42. data/spec/javascripts/src/core/system_spec.js +41 -0
  43. data/spec/javascripts/src/cycle/draw_spec.js +106 -0
  44. data/spec/javascripts/src/cycle/tick_spec.js +20 -0
  45. data/spec/javascripts/src/cycle/update_spec.js +86 -0
  46. data/spec/javascripts/src/display/align_spec.js +43 -0
  47. data/spec/javascripts/src/display/circle_spec.js +26 -0
  48. data/spec/javascripts/src/display/group_spec.js +7 -0
  49. data/spec/javascripts/src/display/image_spec.js +32 -0
  50. data/spec/javascripts/src/display/imgtext_spec.js +32 -0
  51. data/spec/javascripts/src/display/rect_spec.js +13 -0
  52. data/spec/javascripts/src/display/screen_spec.js +47 -0
  53. data/spec/javascripts/src/display/sprite_spec.js +28 -0
  54. data/spec/javascripts/src/display/text_spec.js +30 -0
  55. data/spec/javascripts/src/input/keyboard_spec.js +67 -0
  56. data/spec/javascripts/src/input/mouse_spec.js +133 -0
  57. data/spec/javascripts/src/input/pressed_spec.js +31 -0
  58. data/spec/javascripts/src/math/bisect_spec.js +59 -0
  59. data/spec/javascripts/src/math/body_spec.js +30 -0
  60. data/spec/javascripts/src/math/drag_spec.js +38 -0
  61. data/spec/javascripts/src/math/force_spec.js +134 -0
  62. data/spec/javascripts/src/math/hit_spec.js +28 -0
  63. data/spec/javascripts/src/math/hitmap_spec.js +52 -0
  64. data/spec/javascripts/src/math/limit_spec.js +35 -0
  65. data/spec/javascripts/src/math/point_spec.js +57 -0
  66. data/spec/javascripts/src/math/tile_spec.js +78 -0
  67. data/spec/javascripts/src/media/sound_spec.js +40 -0
  68. data/spec/javascripts/src/pattern/automap_spec.js +93 -0
  69. data/spec/javascripts/src/pattern/flicker_spec.js +66 -0
  70. data/spec/javascripts/src/pattern/timestep_spec.js +23 -0
  71. data/spec/javascripts/src/save/storage_spec.js +37 -0
  72. data/spec/javascripts/src/util/log_spec.js +9 -0
  73. data/spec/javascripts/src/util/polyfill_spec.js +13 -0
  74. data/spec/javascripts/src/util/random_spec.js +33 -0
  75. data/spec/javascripts/src/util/scene_spec.js +52 -0
  76. data/spec/javascripts/src/util/sheet_spec.js +25 -0
  77. data/spec/javascripts/src/util/support_spec.js +17 -0
  78. data/spec/javascripts/support/jasmine.yml +76 -0
  79. data/spec/javascripts/support/jasmine_config.rb +32 -0
  80. data/spec/javascripts/support/jasmine_runner.rb +32 -0
  81. data/spec/lib/entityjs/assets_spec.rb +216 -0
  82. data/spec/lib/entityjs/command_spec.rb +53 -0
  83. data/spec/lib/entityjs/commands/build_spec.rb +69 -0
  84. data/spec/lib/entityjs/commands/comp_spec.rb +45 -0
  85. data/spec/lib/entityjs/commands/font_spec.rb +7 -0
  86. data/spec/lib/entityjs/commands/new_spec.rb +20 -0
  87. data/spec/lib/entityjs/commands/templates_spec.rb +9 -0
  88. data/spec/lib/entityjs/commands/test_spec.rb +31 -0
  89. data/spec/lib/entityjs/config_spec.rb +19 -0
  90. data/spec/lib/entityjs/dirc_spec.rb +83 -0
  91. data/spec/lib/entityjs/version_spec.rb +9 -0
  92. data/spec/spec_helper.rb +21 -3
  93. data/spec/support/factories.rb +19 -0
  94. data/spec/support/mygame.rb +11 -0
  95. data/src/core/comp.js +318 -0
  96. data/src/core/entity.js +549 -0
  97. data/src/core/load.js +242 -0
  98. data/src/core/query.js +354 -0
  99. data/src/core/re.js +74 -0
  100. data/src/core/system.js +121 -0
  101. data/src/cycle/draw.js +178 -0
  102. data/src/cycle/tick.js +25 -0
  103. data/src/{entityjs/cycle → cycle}/tween.js +60 -60
  104. data/src/{entityjs/cycle → cycle}/update.js +86 -85
  105. data/src/{entityjs/cycle → cycle}/wait.js +22 -21
  106. data/src/{entityjs/cycle → cycle}/worker.js +8 -8
  107. data/src/display/align.js +45 -0
  108. data/src/display/circle.js +33 -0
  109. data/src/{entityjs/display → display}/group.js +62 -62
  110. data/src/display/image.js +35 -0
  111. data/src/display/imgtext.js +102 -0
  112. data/src/{entityjs/display → display}/rect.js +18 -18
  113. data/src/display/screen.js +57 -0
  114. data/src/display/sprite.js +54 -0
  115. data/src/display/text.js +44 -0
  116. data/src/{entityjs/input → input}/keyboard.js +152 -150
  117. data/src/input/mouse.js +111 -0
  118. data/src/input/pressed.js +41 -0
  119. data/src/{entityjs/input → input}/touch.js +24 -28
  120. data/src/math/bisect.js +84 -0
  121. data/src/math/body.js +70 -0
  122. data/src/{entityjs/math → math}/drag.js +44 -38
  123. data/src/math/force.js +143 -0
  124. data/src/math/hit.js +32 -0
  125. data/src/math/hitmap.js +167 -0
  126. data/src/math/limit.js +37 -0
  127. data/src/math/point.js +40 -0
  128. data/src/math/tile.js +109 -0
  129. data/src/media/channel.js +93 -0
  130. data/src/{entityjs/media → media}/playlist.js +4 -4
  131. data/src/media/sound.js +114 -0
  132. data/src/{entityjs/net → net}/socket.js +51 -51
  133. data/src/pattern/automap.js +133 -0
  134. data/src/{entityjs/pattern → pattern}/flicker.js +206 -213
  135. data/src/pattern/timestep.js +31 -0
  136. data/src/{entityjs/save → save}/database.js +6 -6
  137. data/src/{entityjs/save → save}/storage.js +47 -56
  138. data/src/{entityjs/util → util}/log.js +17 -25
  139. data/src/{entityjs/util → util}/polyfill.js +24 -24
  140. data/src/util/random.js +20 -0
  141. data/src/util/scene.js +102 -0
  142. data/src/util/sheet.js +35 -0
  143. data/src/{entityjs/util → util}/support.js +109 -132
  144. data/{examples/keys → templates/arrow_keys/assets/images}/arrow.png +0 -0
  145. data/templates/arrow_keys/config.yml +22 -0
  146. data/templates/arrow_keys/readme.txt +9 -0
  147. data/templates/arrow_keys/scripts/display/arrow.js +69 -0
  148. data/templates/arrow_keys/scripts/init.js +10 -0
  149. data/templates/arrow_keys/scripts/input/controls.js +35 -0
  150. data/templates/arrow_keys/scripts/scenes/home.js +20 -0
  151. data/templates/arrow_keys/scripts/scenes/load.js +57 -0
  152. data/templates/arrow_keys/tests/display/arrow_test.js +29 -0
  153. data/templates/arrow_keys/tests/init_test.js +4 -0
  154. data/templates/arrow_keys/tests/input/controls_test.js +32 -0
  155. data/templates/arrow_keys/tests/scenes/home_test.js +0 -0
  156. data/templates/arrow_keys/tests/scenes/load_test.js +16 -0
  157. data/templates/blank/config.yml +22 -0
  158. data/templates/blank/readme.txt +79 -0
  159. data/templates/platform/assets/images/bit.png +0 -0
  160. data/templates/platform/assets/images/hero.png +0 -0
  161. data/templates/platform/assets/images/items.png +0 -0
  162. data/templates/platform/assets/images/tiles.png +0 -0
  163. data/templates/platform/assets/levels/level1.tmx +44 -0
  164. data/templates/platform/assets/sounds/coin.mp3 +0 -0
  165. data/templates/platform/assets/sounds/coin.ogg +0 -0
  166. data/templates/platform/config.yml +22 -0
  167. data/templates/platform/readme.txt +87 -0
  168. data/templates/platform/scripts/display/bit.js +12 -0
  169. data/templates/platform/scripts/display/hero.js +77 -0
  170. data/templates/platform/scripts/display/tile.js +2 -0
  171. data/templates/platform/scripts/display/tsprite.js +17 -0
  172. data/templates/platform/scripts/init.js +7 -0
  173. data/templates/platform/scripts/items/coin.js +27 -0
  174. data/templates/platform/scripts/items/item.js +41 -0
  175. data/templates/platform/scripts/items/spring.js +25 -0
  176. data/templates/platform/scripts/scenes/home.js +10 -0
  177. data/templates/platform/scripts/scenes/load.js +27 -0
  178. data/templates/platform/scripts/scenes/play.js +31 -0
  179. data/templates/platform/scripts/util/counter.js +34 -0
  180. data/templates/platform/scripts/util/level.js +84 -0
  181. data/templates/platform/tests/display/bit_test.js +7 -0
  182. data/templates/platform/tests/display/hero_test.js +73 -0
  183. data/templates/platform/tests/display/tile_test.js +7 -0
  184. data/templates/platform/tests/display/tsprite_test.js +8 -0
  185. data/templates/platform/tests/factories.js +30 -0
  186. data/templates/platform/tests/items/coin_test.js +28 -0
  187. data/templates/platform/tests/items/item_test.js +36 -0
  188. data/templates/platform/tests/items/spring_test.js +21 -0
  189. data/templates/platform/tests/scenes/home_test.js +9 -0
  190. data/templates/platform/tests/scenes/load_test.js +11 -0
  191. data/templates/platform/tests/scenes/play_test.js +15 -0
  192. data/templates/platform/tests/util/counter_test.js +9 -0
  193. data/templates/platform/tests/util/level_test.js +29 -0
  194. metadata +249 -97
  195. data/build/build_debug.bat +0 -1
  196. data/build/build_min.bat +0 -1
  197. data/build/config.php +0 -64
  198. data/build/debug.php +0 -48
  199. data/build/files.php +0 -74
  200. data/build/jsmin.php +0 -376
  201. data/build/min.php +0 -50
  202. data/changelog.txt +0 -53
  203. data/examples/keys/keys.html +0 -59
  204. data/examples/keys/keys.js +0 -148
  205. data/examples/mouse/mouse.html +0 -58
  206. data/examples/mouse/mouse.js +0 -60
  207. data/examples/scenes/home.png +0 -0
  208. data/examples/scenes/scenes.html +0 -55
  209. data/examples/scenes/scenes.js +0 -134
  210. data/examples/scenes/win.png +0 -0
  211. data/examples/sounds/sound1.mp3 +0 -0
  212. data/examples/sounds/sound1.ogg +0 -0
  213. data/examples/sounds/sounds.html +0 -56
  214. data/examples/sounds/sounds.js +0 -44
  215. data/examples/style/background.png +0 -0
  216. data/examples/style/sheet.css +0 -762
  217. data/examples/tiles/tiles.html +0 -56
  218. data/examples/tiles/tiles.js +0 -85
  219. data/examples/tiles/tiles.png +0 -0
  220. data/lib/blank/config.js +0 -4
  221. data/lib/blank/config.yml +0 -21
  222. data/lib/blank/home.js +0 -11
  223. data/lib/blank/init.js +0 -7
  224. data/lib/blank/load.js +0 -21
  225. data/lib/blank/play.html +0 -29
  226. data/lib/entity.debug.js +0 -52
  227. data/lib/entity.min.js +0 -184
  228. data/lib/entityjs/comp.rb +0 -11
  229. data/lib/entityjs/game.rb +0 -93
  230. data/lib/entityjs/min.rb +0 -11
  231. data/lib/entityjs/refresh.rb +0 -14
  232. data/spec/lib/entityjs/game_spec.rb +0 -11
  233. data/src/entityjs/core/component.js +0 -306
  234. data/src/entityjs/core/entity.js +0 -516
  235. data/src/entityjs/core/load.js +0 -224
  236. data/src/entityjs/core/query.js +0 -410
  237. data/src/entityjs/core/re.js +0 -70
  238. data/src/entityjs/core/system.js +0 -125
  239. data/src/entityjs/cycle/draw.js +0 -185
  240. data/src/entityjs/cycle/ticker.js +0 -27
  241. data/src/entityjs/display/anchor.js +0 -53
  242. data/src/entityjs/display/bitfont.js +0 -93
  243. data/src/entityjs/display/bitmap.js +0 -37
  244. data/src/entityjs/display/circle.js +0 -30
  245. data/src/entityjs/display/font.js +0 -41
  246. data/src/entityjs/display/screen.js +0 -46
  247. data/src/entityjs/display/sprite.js +0 -37
  248. data/src/entityjs/input/mouse.js +0 -123
  249. data/src/entityjs/input/pressed.js +0 -81
  250. data/src/entityjs/math/bind.js +0 -76
  251. data/src/entityjs/math/bisect.js +0 -69
  252. data/src/entityjs/math/body.js +0 -39
  253. data/src/entityjs/math/hitmap.js +0 -165
  254. data/src/entityjs/math/hittest.js +0 -26
  255. data/src/entityjs/math/physics.js +0 -142
  256. data/src/entityjs/math/point.js +0 -57
  257. data/src/entityjs/math/tile.js +0 -91
  258. data/src/entityjs/media/channel.js +0 -93
  259. data/src/entityjs/media/sound.js +0 -110
  260. data/src/entityjs/pattern/arraymap.js +0 -89
  261. data/src/entityjs/pattern/timestep.js +0 -34
  262. data/src/entityjs/util/random.js +0 -38
  263. data/src/entityjs/util/scene.js +0 -101
  264. data/src/entityjs/util/sheet.js +0 -51
@@ -0,0 +1,23 @@
1
+ describe('timestep', function(){
2
+
3
+ var e;
4
+
5
+ beforeEach(function(){
6
+ e = re.e('timestep');
7
+ });
8
+
9
+ it('should call twice', function(){
10
+
11
+ e.stepSize = 100;
12
+
13
+ var calls = 0;
14
+
15
+ e.timestep(200, function(){
16
+ calls++;
17
+ })
18
+
19
+ eq(calls, 2)
20
+
21
+ });
22
+
23
+ });
@@ -0,0 +1,37 @@
1
+ describe('storage', function(){
2
+
3
+ var e;
4
+
5
+ beforeEach(function(){
6
+ e = re.e('storage:session');
7
+
8
+ //make sure this works..
9
+ re.e('storage:local').dispose();
10
+ });
11
+
12
+ it('should define then clear', function(){
13
+
14
+ is(e.item('bob', 10))
15
+
16
+ eq(e.item('bob'), 10)
17
+
18
+ is(e.clear())
19
+ })
20
+
21
+ it('length', function(){
22
+
23
+ is(e.item('b', 10))
24
+
25
+ eq(e.length(), 1)
26
+
27
+ eq(e.key(0), 'b')
28
+
29
+ });
30
+
31
+ it('should remove item', function(){
32
+ is(e.item('d', 10))
33
+
34
+ ok(e.removeItem('d'))
35
+ })
36
+
37
+ });
@@ -0,0 +1,9 @@
1
+ describe('log', function(){
2
+
3
+ it('should log', function(){
4
+
5
+ re.log('test log')
6
+
7
+ });
8
+
9
+ });
@@ -0,0 +1,13 @@
1
+ describe('polyfill', function(){
2
+
3
+ var e;
4
+
5
+ beforeEach(function(){
6
+ //e = re.e('polyfill');
7
+ });
8
+
9
+ it('not needed', function(){
10
+
11
+ });
12
+
13
+ });
@@ -0,0 +1,33 @@
1
+ describe('random', function(){
2
+
3
+ it('random 0-1', function(){
4
+
5
+ for(var i = 100; i--;){
6
+ var n = re.random();
7
+ ok(n >= 0)
8
+ ok(n <= 1)
9
+ }
10
+
11
+ });
12
+
13
+ it('random 0-3', function(){
14
+
15
+ for(var i = 100; i--;){
16
+ var n = re.random(3);
17
+ ok(n >= 0)
18
+ ok(n <= 3)
19
+ }
20
+
21
+ });
22
+
23
+ it('random -10 to 10', function(){
24
+
25
+ for(var i = 100; i--;){
26
+ var n = re.random(-10, 10);
27
+ ok(n >= -10)
28
+ ok(n <= 10)
29
+ }
30
+
31
+ });
32
+
33
+ });
@@ -0,0 +1,52 @@
1
+ describe('test', function(){
2
+
3
+ it('create new game scene', function(){
4
+
5
+ var called = false;
6
+ var val1, val2;
7
+
8
+ re.scene('game')
9
+ .enter(function(t,c){
10
+ called = true;
11
+
12
+ val1 = t;
13
+ val2 = c;
14
+ });
15
+
16
+ ok(re.scene.current == null)
17
+
18
+ re.scene('game').enter(10, 'sd')
19
+
20
+ eq(re.scene.current, 'game')
21
+
22
+ ok(called)
23
+ eq(val1, 10)
24
+ eq(val2, 'sd')
25
+
26
+ });
27
+
28
+ it('should exit properly', function(){
29
+
30
+ var called = false;
31
+ var val1, val2;
32
+
33
+ re.scene('bob')
34
+ .exit(function(cal, s){
35
+ called = true;
36
+ val1 = cal;
37
+ val2 = s
38
+ })
39
+
40
+ //exit current scene
41
+ re.scene('bob').exit(10, 's')
42
+
43
+ ok(called)
44
+ eq(val1, 10)
45
+ eq(val2, 's')
46
+
47
+ //current scene
48
+ eq(re.scene(), null)
49
+
50
+ })
51
+
52
+ });
@@ -0,0 +1,25 @@
1
+ describe('sheet', function(){
2
+
3
+ it('create sheet', function(){
4
+
5
+ is(re.sheet({
6
+ rock:[1, 2],
7
+ water:[0,2]
8
+ }, 'accept.png', 2, 2), 'array')
9
+
10
+ var e = re.e('rock');
11
+
12
+ eq(e.sizeX, 2)
13
+ eq(e.sizeY, 2)
14
+ eq(e.frameX, 1)
15
+ eq(e.frameY, 2)
16
+
17
+ e = re.e('water');
18
+
19
+ eq(e.sizeX, 2)
20
+ eq(e.sizeY, 2)
21
+ eq(e.frameX, 0)
22
+ eq(e.frameY, 2)
23
+ });
24
+
25
+ });
@@ -0,0 +1,17 @@
1
+ describe('support', function(){
2
+
3
+ it('find first support sound', function(){
4
+
5
+ is(re.support('aac', 'ogg', 'mp3', 'wav'), 'string')
6
+
7
+ });
8
+
9
+ it('should support canvas', function(){
10
+ is(re.support('canvas'), 'boolean')
11
+ })
12
+
13
+ it('should support both', function(){
14
+ is(re.support('text canvas'), 'boolean')
15
+ })
16
+
17
+ });
@@ -0,0 +1,76 @@
1
+ # src_files
2
+ #
3
+ # Return an array of filepaths relative to src_dir to include before jasmine specs.
4
+ # Default: []
5
+ #
6
+ # EXAMPLE:
7
+ #
8
+ # src_files:
9
+ # - lib/source1.js
10
+ # - lib/source2.js
11
+ # - dist/**/*.js
12
+ #
13
+ src_files:
14
+ - src/core/re.js
15
+ - src/**/*.js
16
+
17
+ # stylesheets
18
+ #
19
+ # Return an array of stylesheet filepaths relative to src_dir to include before jasmine specs.
20
+ # Default: []
21
+ #
22
+ # EXAMPLE:
23
+ #
24
+ # stylesheets:
25
+ # - css/style.css
26
+ # - stylesheets/*.css
27
+ #
28
+ stylesheets:
29
+
30
+ # helpers
31
+ #
32
+ # Return an array of filepaths relative to spec_dir to include before jasmine specs.
33
+ # Default: ["helpers/**/*.js"]
34
+ #
35
+ # EXAMPLE:
36
+ #
37
+ # helpers:
38
+ # - helpers/**/*.js
39
+ #
40
+ helpers:
41
+ - helpers/jquery-1.7.1.min.js
42
+ - helpers/**/*.js
43
+
44
+ # spec_files
45
+ #
46
+ # Return an array of filepaths relative to spec_dir to include.
47
+ # Default: ["**/*[sS]pec.js"]
48
+ #
49
+ # EXAMPLE:
50
+ #
51
+ # spec_files:
52
+ # - **/*[sS]pec.js
53
+ #
54
+ spec_files:
55
+
56
+ # src_dir
57
+ #
58
+ # Source directory path. Your src_files must be returned relative to this path. Will use root if left blank.
59
+ # Default: project root
60
+ #
61
+ # EXAMPLE:
62
+ #
63
+ # src_dir: public
64
+ #
65
+ src_dir:
66
+
67
+ # spec_dir
68
+ #
69
+ # Spec directory path. Your spec_files must be returned relative to this path.
70
+ # Default: spec/javascripts
71
+ #
72
+ # EXAMPLE:
73
+ #
74
+ # spec_dir: spec/javascripts
75
+ #
76
+ spec_dir:
@@ -0,0 +1,32 @@
1
+ module Jasmine
2
+ class Config
3
+
4
+ # Add your overrides or custom config code here
5
+ def start_server(port = 8888)
6
+
7
+ # Jasmine will pass in 8888, but you can change it to whatever you
8
+
9
+ port = 2999
10
+
11
+ handler = Rack::Handler.default
12
+
13
+ handler.run Jasmine.app(self), :Port => port, :AccessLog => []
14
+ end
15
+ end
16
+ end
17
+
18
+
19
+ # Note - this is necessary for rspec2, which has removed the backtrace
20
+ module Jasmine
21
+ class SpecBuilder
22
+ def declare_spec(parent, spec)
23
+ me = self
24
+ example_name = spec["name"]
25
+ @spec_ids << spec["id"]
26
+ backtrace = @example_locations[parent.description + " " + example_name]
27
+ parent.it example_name, {} do
28
+ me.report_spec(spec["id"])
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,32 @@
1
+ $:.unshift(ENV['JASMINE_GEM_PATH']) if ENV['JASMINE_GEM_PATH'] # for gem testing purposes
2
+
3
+ require 'rubygems'
4
+ require 'jasmine'
5
+ jasmine_config_overrides = File.expand_path(File.join(File.dirname(__FILE__), 'jasmine_config.rb'))
6
+ require jasmine_config_overrides if File.exist?(jasmine_config_overrides)
7
+ if Jasmine::Dependencies.rspec2?
8
+ require 'rspec'
9
+ else
10
+ require 'spec'
11
+ end
12
+
13
+ jasmine_config = Jasmine::Config.new
14
+ spec_builder = Jasmine::SpecBuilder.new(jasmine_config)
15
+
16
+ should_stop = false
17
+
18
+ if Jasmine::Dependencies.rspec2?
19
+ RSpec.configuration.after(:suite) do
20
+ spec_builder.stop if should_stop
21
+ end
22
+ else
23
+ Spec::Runner.configure do |config|
24
+ config.after(:suite) do
25
+ spec_builder.stop if should_stop
26
+ end
27
+ end
28
+ end
29
+
30
+ spec_builder.start
31
+ should_stop = true
32
+ spec_builder.declare_suites
@@ -0,0 +1,216 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Assets' do
4
+
5
+ before(:each) do
6
+ setup_mygame
7
+
8
+ files = factory(:assets)
9
+
10
+ @data_file = Entityjs::Config.assets_folder+'/blag/bob.json'
11
+ files.push @data_file
12
+
13
+ @sounds_file = Entityjs::Config.sounds_folder+'/fold/secret1.mp3'
14
+ files.push @sounds_file
15
+
16
+ Dir.stub(:'[]').and_return(files)
17
+ IO.stub(:read).and_return('{"test":0, "array":[1,2,3]}')
18
+ end
19
+
20
+ after(:all) do
21
+ teardown_mygame
22
+ end
23
+
24
+ it 'should return all images' do
25
+
26
+ r = Entityjs::Assets.search('images')
27
+ r.each do |i|
28
+ i.should match /images/
29
+ i.should_not match /levels|sounds|assets/
30
+ i.should match /^*\.(png|gif|jpg|jpeg)$/i
31
+ end
32
+
33
+ end
34
+
35
+ it 'should return all sounds' do
36
+
37
+ r = Entityjs::Assets.search('sounds')
38
+ r.each do |i|
39
+ i.should match /sounds/
40
+ i.should_not match /levels|images|assets/
41
+ i.should match /^*\.(mp3|aac|wav|ogg)$/i
42
+ end
43
+
44
+ r.should include(@sounds_file.gsub('assets/', ''))
45
+
46
+ end
47
+
48
+ it 'should return all datas' do
49
+
50
+ r = Entityjs::Assets.search('*')
51
+ r.each do |i|
52
+ i.should match /levels|blag/
53
+ i.should_not match /sounds|images|assets/
54
+ i.should match /^*\.(#{Entityjs::Assets.valid_datas.join('|')})$/i
55
+ end
56
+
57
+ r.should include(@data_file.gsub('assets/', ''))
58
+ end
59
+
60
+ it 'should generate sounds to js' do
61
+ r = Entityjs::Assets.sounds_to_js
62
+ r.should match /\[*\]/
63
+
64
+ end
65
+
66
+ it 'should generate images to js' do
67
+ r = Entityjs::Assets.images_to_js
68
+ r.should match /\[*\]/
69
+
70
+ end
71
+
72
+ it 'should generate datas to js' do
73
+ r = Entityjs::Assets.datas_to_js
74
+ r.should match /re\.e\('/
75
+
76
+ end
77
+
78
+ it 'should convert xml to json' do
79
+
80
+ File.stub(:extname).and_return('.xml')
81
+ IO.stub(:read).and_return('<?xml ?><root><alice sid="4"><bob sid="1">charlie</bob><bob sid="2">david</bob></alice></root>')
82
+
83
+ r = Entityjs::Assets.file_to_json('convert.xml')
84
+
85
+ r.should match /alice/
86
+ r.should_not match /root/
87
+ r.should_not match /<\?xml.*\?>/
88
+ end
89
+
90
+ it 'should convert tmx to json' do
91
+ File.stub(:extname).and_return('.tmx')
92
+ IO.stub(:read).and_return(%q(
93
+ <?xml version="1.0" encoding="UTF-8"?>
94
+ <map version="1.0" orientation="orthogonal" width="37" height="15" tilewidth="25" tileheight="25">
95
+ <tileset firstgid="1" name="Sheet" tilewidth="25" tileheight="25">
96
+ <image source="tiles.png" width="200" height="25"/>
97
+ </tileset>
98
+ <tileset firstgid="9" name="Objects" tilewidth="25" tileheight="25">
99
+ <image source="items.png" width="250" height="50"/>
100
+ </tileset>
101
+ <layer name="Back" width="37" height="15" opacity="0.43">
102
+ <data encoding="csv">
103
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
104
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
105
+ 0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
106
+ 0,0,0,0,0,8,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,6,2,2,2,5,0,0,0,0,0,0,8,8,0,
107
+ 0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,6,1,1,1,1,3,0,0,0,0,0,0,0,0,0,
108
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,
109
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,3,0,0,0,8,0,0,0,0,0,
110
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,
111
+ 0,0,0,0,0,0,0,0,6,5,0,0,0,0,0,0,0,0,0,0,4,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,
112
+ 0,0,0,0,0,6,2,2,1,3,0,0,0,0,0,0,0,0,0,0,4,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,
113
+ 0,0,0,6,2,1,1,1,1,3,0,0,0,0,0,0,0,0,0,0,4,1,1,1,1,1,1,3,0,0,0,0,0,0,6,2,5,
114
+ 0,0,6,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,0,4,1,1,1,1,1,1,3,0,0,0,0,0,0,1,1,3,
115
+ 0,6,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,0,4,1,1,1,1,1,1,3,0,0,0,0,0,6,1,1,3,
116
+ 0,4,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,0,4,1,1,1,1,1,1,3,0,0,0,0,6,1,1,1,3,
117
+ 0,4,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,0,4,1,1,1,1,1,1,3,0,0,0,0,4,1,1,1,3
118
+ </data>
119
+ </layer>
120
+ <layer name="Front" width="37" height="15">
121
+ <data encoding="csv">
122
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
123
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
124
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
125
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
126
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
127
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,0,0,0,0,
128
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
129
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
130
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,7,7,0,0,0,0,0,0,0,0,
131
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
132
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
133
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,5,0,0,0,0,0,0,0,0,0,0,0,
134
+ 2,2,2,2,5,0,0,0,0,0,6,2,2,5,0,0,0,0,0,0,0,6,2,2,1,1,2,2,2,5,0,0,0,0,6,2,2,
135
+ 1,1,1,1,3,0,0,0,0,6,1,1,1,1,5,0,0,0,0,0,0,4,1,1,1,1,1,1,1,1,5,0,0,0,4,1,1,
136
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
137
+ </data>
138
+ </layer>
139
+ <layer name="Objects" width="37" height="15">
140
+ <data encoding="csv">
141
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
142
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
143
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
144
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,20,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
145
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,
146
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
147
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,
148
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,
149
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,0,
150
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,0,23,0,0,0,0,0,
151
+ 0,0,0,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,0,
152
+ 0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,23,0,0,0,23,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,0,
153
+ 0,0,0,0,0,16,16,16,16,16,0,0,0,0,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,16,16,16,16,0,0,0,
154
+ 0,0,0,0,0,15,15,15,15,0,0,0,0,0,0,15,15,15,15,15,15,0,0,0,0,0,0,0,0,0,0,15,15,15,0,0,0,
155
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
156
+ </data>
157
+ </layer>
158
+ </map>
159
+ ))
160
+
161
+ r = Entityjs::Assets.file_to_json('map.tmx')
162
+
163
+ r.should_not match /map/
164
+ r.should match /"\$":\[\[0/
165
+ end
166
+
167
+ it 'should tmx should convert to json' do
168
+ File.stub(:extname).and_return('.tmx')
169
+ IO.stub(:read).and_return(%q(<?xml version="1.0" encoding="UTF-8"?>
170
+ <map version="1.0" orientation="orthogonal" width="40" height="20" tilewidth="25" tileheight="25">
171
+ <tileset firstgid="1" name="tiles" tilewidth="25" tileheight="25">
172
+ <image source="../images/tiles.png" width="200" height="25"/>
173
+ </tileset>
174
+ <layer name="Tile Layer 1" width="40" height="20">
175
+ <data encoding="csv">
176
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
177
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
178
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
179
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
180
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
181
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
182
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
183
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
184
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
185
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
186
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
187
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
188
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
189
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
190
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
191
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
192
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
193
+ 2,2,2,2,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
194
+ 1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
195
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
196
+ </data>
197
+ </layer>
198
+ <objectgroup name="Hero" width="40" height="20">
199
+ <object name="hero" x="43" y="356"/>
200
+ </objectgroup>
201
+ </map>))
202
+
203
+
204
+ r = Entityjs::Assets.file_to_json('map.tmx')
205
+
206
+ r.should_not match /map/
207
+ r.should match /"\$":\[\[0/
208
+ end
209
+
210
+ it 'should generate to js' do
211
+ r = Entityjs::Assets.to_js
212
+ r.should match /re\.assets/
213
+
214
+ end
215
+
216
+ end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'command' do
4
+
5
+ before(:all) do
6
+ setup_mygame
7
+ end
8
+
9
+ before(:all) do
10
+ teardown_mygame
11
+ end
12
+
13
+ it 'should run new' do
14
+ Entityjs::New.stub(:generate).and_return('100')
15
+ Entityjs::Command.run('new', ['mygame']).should == '100'
16
+ end
17
+
18
+ it 'should run build' do
19
+ Entityjs::Build.stub(:generate).and_return('build')
20
+ Entityjs::Command.run('build').should == 'build'
21
+ end
22
+
23
+ it 'should run version' do
24
+ Entityjs::Command.run('version').should == 0
25
+ end
26
+
27
+ it 'should run test' do
28
+ Entityjs::Test.stub(:generate).and_return('test')
29
+ Entityjs::Command.run('test', ['yep.js']).should == 'test'
30
+ end
31
+
32
+ it 'should run comp' do
33
+ Entityjs::Comp.stub(:generate).and_return('comp')
34
+ Entityjs::Command.run('comp', ['test.js']).should == 'comp'
35
+ end
36
+
37
+ it 'should run help' do
38
+ Entityjs::Command.run('help').should == 0
39
+ end
40
+
41
+ describe 'outside entityjs dir' do
42
+ before(:all) do
43
+ teardown_mygame
44
+ end
45
+
46
+ ['comp', 'build', 'test'].each do |i|
47
+ it "should #{i} throw error" do
48
+ Entityjs::Command.run(i).should == 2
49
+ end
50
+ end
51
+ end
52
+
53
+ end