epall-limelight 0.5.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (282) hide show
  1. data/bin/icons/icon.ico +0 -0
  2. data/bin/icons/icon_48.gif +0 -0
  3. data/bin/icons/limelight.icns +0 -0
  4. data/bin/limelight +5 -0
  5. data/bin/ll +10 -0
  6. data/bin/ll.bat +5 -0
  7. data/lib/init.rb +16 -0
  8. data/lib/limelight.jar +0 -0
  9. data/lib/limelight/animation.rb +41 -0
  10. data/lib/limelight/builtin/players.rb +16 -0
  11. data/lib/limelight/builtin/players/button.rb +39 -0
  12. data/lib/limelight/builtin/players/check_box.rb +50 -0
  13. data/lib/limelight/builtin/players/combo_box.rb +89 -0
  14. data/lib/limelight/builtin/players/combo_box_popup_list.rb +19 -0
  15. data/lib/limelight/builtin/players/combo_box_popup_list_item.rb +21 -0
  16. data/lib/limelight/builtin/players/curtains.rb +23 -0
  17. data/lib/limelight/builtin/players/image.rb +54 -0
  18. data/lib/limelight/builtin/players/password_box.rb +34 -0
  19. data/lib/limelight/builtin/players/radio_button.rb +65 -0
  20. data/lib/limelight/builtin/players/stage_mover.rb +31 -0
  21. data/lib/limelight/builtin/players/stage_sizer.rb +34 -0
  22. data/lib/limelight/builtin/players/text_area.rb +34 -0
  23. data/lib/limelight/builtin/players/text_box.rb +34 -0
  24. data/lib/limelight/builtin/styles.rb +35 -0
  25. data/lib/limelight/builtin/utilities_production/alert/players/alert.rb +11 -0
  26. data/lib/limelight/builtin/utilities_production/alert/props.rb +8 -0
  27. data/lib/limelight/builtin/utilities_production/alert/styles.rb +14 -0
  28. data/lib/limelight/builtin/utilities_production/incompatible_version/props.rb +20 -0
  29. data/lib/limelight/builtin/utilities_production/incompatible_version/styles.rb +12 -0
  30. data/lib/limelight/builtin/utilities_production/production.rb +62 -0
  31. data/lib/limelight/builtin/utilities_production/stages.rb +12 -0
  32. data/lib/limelight/builtin/utilities_production/styles.rb +53 -0
  33. data/lib/limelight/button_group_cache.rb +11 -0
  34. data/lib/limelight/casting_director.rb +112 -0
  35. data/lib/limelight/client/playbills.rb +86 -0
  36. data/lib/limelight/commands/command.rb +168 -0
  37. data/lib/limelight/commands/create_command.rb +98 -0
  38. data/lib/limelight/commands/freeze_command.rb +131 -0
  39. data/lib/limelight/commands/help_command.rb +61 -0
  40. data/lib/limelight/commands/open_command.rb +60 -0
  41. data/lib/limelight/commands/pack_command.rb +45 -0
  42. data/lib/limelight/commands/unpack_command.rb +44 -0
  43. data/lib/limelight/commands/version_command.rb +31 -0
  44. data/lib/limelight/data.rb +37 -0
  45. data/lib/limelight/dsl/build_exception.rb +55 -0
  46. data/lib/limelight/dsl/menu_bar.rb +71 -0
  47. data/lib/limelight/dsl/prop_builder.rb +155 -0
  48. data/lib/limelight/dsl/stage_builder.rb +105 -0
  49. data/lib/limelight/dsl/styles_builder.rb +157 -0
  50. data/lib/limelight/file_chooser.rb +68 -0
  51. data/lib/limelight/file_filter.rb +33 -0
  52. data/lib/limelight/file_loader.rb +46 -0
  53. data/lib/limelight/gems.rb +51 -0
  54. data/lib/limelight/java_couplings.rb +66 -0
  55. data/lib/limelight/java_util.rb +49 -0
  56. data/lib/limelight/limelight_exception.rb +24 -0
  57. data/lib/limelight/main.rb +108 -0
  58. data/lib/limelight/paint_action.rb +27 -0
  59. data/lib/limelight/pen.rb +83 -0
  60. data/lib/limelight/producer.rb +179 -0
  61. data/lib/limelight/production.rb +169 -0
  62. data/lib/limelight/prop.rb +367 -0
  63. data/lib/limelight/scene.rb +151 -0
  64. data/lib/limelight/specs/spec_helper.rb +87 -0
  65. data/lib/limelight/specs/test_scene_opener.rb +60 -0
  66. data/lib/limelight/stage.rb +292 -0
  67. data/lib/limelight/string.rb +38 -0
  68. data/lib/limelight/studio.rb +185 -0
  69. data/lib/limelight/styles.rb +347 -0
  70. data/lib/limelight/templates/production_templater.rb +49 -0
  71. data/lib/limelight/templates/scene_templater.rb +47 -0
  72. data/lib/limelight/templates/sources/freezing/limelight_init.rb.template +5 -0
  73. data/lib/limelight/templates/sources/production/init.rb.template +15 -0
  74. data/lib/limelight/templates/sources/production/production.rb.template +49 -0
  75. data/lib/limelight/templates/sources/production/spec/spec_helper.rb.template +12 -0
  76. data/lib/limelight/templates/sources/production/stages.rb.template +17 -0
  77. data/lib/limelight/templates/sources/production/styles.rb.template +12 -0
  78. data/lib/limelight/templates/sources/scene/props.rb.template +6 -0
  79. data/lib/limelight/templates/sources/scene/styles.rb.template +18 -0
  80. data/lib/limelight/templates/sources/scene_spec/scene_spec.rb.template +13 -0
  81. data/lib/limelight/templates/templater.rb +131 -0
  82. data/lib/limelight/templates/templater_logger.rb +39 -0
  83. data/lib/limelight/theater.rb +77 -0
  84. data/lib/limelight/util.rb +65 -0
  85. data/lib/limelight/util/downloader.rb +115 -0
  86. data/lib/limelight/version.rb +20 -0
  87. data/productions/examples/8thlight.com/about/about.txt +24 -0
  88. data/productions/examples/8thlight.com/about/props.rb +11 -0
  89. data/productions/examples/8thlight.com/about/styles.rb +2 -0
  90. data/productions/examples/8thlight.com/footer.rb +6 -0
  91. data/productions/examples/8thlight.com/home/props.rb +28 -0
  92. data/productions/examples/8thlight.com/home/styles.rb +2 -0
  93. data/productions/examples/8thlight.com/images/anvil.jpg +0 -0
  94. data/productions/examples/8thlight.com/images/bg.jpg +0 -0
  95. data/productions/examples/8thlight.com/images/botticelli.jpg +0 -0
  96. data/productions/examples/8thlight.com/images/button_bg.jpg +0 -0
  97. data/productions/examples/8thlight.com/images/canvas_bg.jpg +0 -0
  98. data/productions/examples/8thlight.com/images/footer_bg.jpg +0 -0
  99. data/productions/examples/8thlight.com/images/header.jpg +0 -0
  100. data/productions/examples/8thlight.com/images/moses.jpg +0 -0
  101. data/productions/examples/8thlight.com/images/statemachine_thumbnail.png +0 -0
  102. data/productions/examples/8thlight.com/images/thumbnail_book.jpg +0 -0
  103. data/productions/examples/8thlight.com/menu.rb +11 -0
  104. data/productions/examples/8thlight.com/services/props.rb +11 -0
  105. data/productions/examples/8thlight.com/services/services.txt +8 -0
  106. data/productions/examples/8thlight.com/services/styles.rb +2 -0
  107. data/productions/examples/8thlight.com/stages.rb +8 -0
  108. data/productions/examples/8thlight.com/styles.rb +210 -0
  109. data/productions/examples/calculator/players/button.rb +24 -0
  110. data/productions/examples/calculator/players/calculator.rb +15 -0
  111. data/productions/examples/calculator/players/calculator_model.rb +13 -0
  112. data/productions/examples/calculator/props.rb +23 -0
  113. data/productions/examples/calculator/styles.rb +36 -0
  114. data/productions/examples/langstons_ant/html_javascript/ant.css +39 -0
  115. data/productions/examples/langstons_ant/html_javascript/ant.html +22 -0
  116. data/productions/examples/langstons_ant/html_javascript/ant.js +23 -0
  117. data/productions/examples/langstons_ant/init.rb +4 -0
  118. data/productions/examples/langstons_ant/players/ant.rb +103 -0
  119. data/productions/examples/langstons_ant/players/log.rb +29 -0
  120. data/productions/examples/langstons_ant/players/start_stop_button.rb +37 -0
  121. data/productions/examples/langstons_ant/players/world.rb +35 -0
  122. data/productions/examples/langstons_ant/props.rb +22 -0
  123. data/productions/examples/langstons_ant/styles.rb +104 -0
  124. data/productions/examples/sandbox/alerts/incompatible_production/default_scene/props.rb +10 -0
  125. data/productions/examples/sandbox/alerts/incompatible_production/default_scene/styles.rb +32 -0
  126. data/productions/examples/sandbox/alerts/incompatible_production/production.rb +52 -0
  127. data/productions/examples/sandbox/alerts/incompatible_production/spec/default_scene/default_scene_spec.rb +16 -0
  128. data/productions/examples/sandbox/alerts/incompatible_production/spec/spec_helper.rb +8 -0
  129. data/productions/examples/sandbox/alerts/incompatible_production/stages.rb +20 -0
  130. data/productions/examples/sandbox/alerts/incompatible_production/styles.rb +15 -0
  131. data/productions/examples/sandbox/alerts/players/alerts.rb +17 -0
  132. data/productions/examples/sandbox/alerts/props.rb +10 -0
  133. data/productions/examples/sandbox/alerts/styles.rb +46 -0
  134. data/productions/examples/sandbox/background_images/props.rb +22 -0
  135. data/productions/examples/sandbox/background_images/styles.rb +40 -0
  136. data/productions/examples/sandbox/click_me/players/chromaton.rb +52 -0
  137. data/productions/examples/sandbox/click_me/props.rb +8 -0
  138. data/productions/examples/sandbox/click_me/styles.rb +11 -0
  139. data/productions/examples/sandbox/floaters/players/floater.rb +108 -0
  140. data/productions/examples/sandbox/floaters/players/surface.rb +21 -0
  141. data/productions/examples/sandbox/floaters/props.rb +10 -0
  142. data/productions/examples/sandbox/floaters/styles.rb +24 -0
  143. data/productions/examples/sandbox/frameing/players/sandbox.rb +17 -0
  144. data/productions/examples/sandbox/frameing/props.rb +35 -0
  145. data/productions/examples/sandbox/frameing/styles.rb +45 -0
  146. data/productions/examples/sandbox/gradients/players/spinner.rb +20 -0
  147. data/productions/examples/sandbox/gradients/players/teaser.rb +19 -0
  148. data/productions/examples/sandbox/gradients/players/wave.rb +19 -0
  149. data/productions/examples/sandbox/gradients/players/waves.rb +19 -0
  150. data/productions/examples/sandbox/gradients/props.rb +13 -0
  151. data/productions/examples/sandbox/gradients/styles.rb +47 -0
  152. data/productions/examples/sandbox/header.rb +22 -0
  153. data/productions/examples/sandbox/homer/players/homer.rb +24 -0
  154. data/productions/examples/sandbox/homer/props.rb +10 -0
  155. data/productions/examples/sandbox/homer/styles.rb +16 -0
  156. data/productions/examples/sandbox/images/arch.jpg +0 -0
  157. data/productions/examples/sandbox/images/beach.jpg +0 -0
  158. data/productions/examples/sandbox/images/homer.jpg +0 -0
  159. data/productions/examples/sandbox/images/limelight_spotlight.jpg +0 -0
  160. data/productions/examples/sandbox/images/logo.png +0 -0
  161. data/productions/examples/sandbox/images/marilyn.jpg +0 -0
  162. data/productions/examples/sandbox/images/space.png +0 -0
  163. data/productions/examples/sandbox/images_scene/props.rb +36 -0
  164. data/productions/examples/sandbox/images_scene/styles.rb +34 -0
  165. data/productions/examples/sandbox/inputs/players/button_input.rb +48 -0
  166. data/productions/examples/sandbox/inputs/players/check_box_input.rb +40 -0
  167. data/productions/examples/sandbox/inputs/players/combo_box_input.rb +41 -0
  168. data/productions/examples/sandbox/inputs/players/radio_button_input.rb +43 -0
  169. data/productions/examples/sandbox/inputs/players/text_area_input.rb +36 -0
  170. data/productions/examples/sandbox/inputs/players/text_box_input.rb +36 -0
  171. data/productions/examples/sandbox/inputs/props.rb +40 -0
  172. data/productions/examples/sandbox/inputs/styles.rb +39 -0
  173. data/productions/examples/sandbox/kiosk/players/kiosk.rb +39 -0
  174. data/productions/examples/sandbox/kiosk/props.rb +9 -0
  175. data/productions/examples/sandbox/kiosk/styles.rb +37 -0
  176. data/productions/examples/sandbox/players/sandbox.rb +11 -0
  177. data/productions/examples/sandbox/rounded_corners/players/box.rb +11 -0
  178. data/productions/examples/sandbox/rounded_corners/props.rb +22 -0
  179. data/productions/examples/sandbox/rounded_corners/styles.rb +17 -0
  180. data/productions/examples/sandbox/scrolling/players/add_button.rb +19 -0
  181. data/productions/examples/sandbox/scrolling/players/cell.rb +15 -0
  182. data/productions/examples/sandbox/scrolling/props.rb +45 -0
  183. data/productions/examples/sandbox/scrolling/styles.rb +33 -0
  184. data/productions/examples/sandbox/sketching/players/sketchpad.rb +46 -0
  185. data/productions/examples/sandbox/sketching/props.rb +25 -0
  186. data/productions/examples/sandbox/sketching/styles.rb +35 -0
  187. data/productions/examples/sandbox/sounds/bird.au +0 -0
  188. data/productions/examples/sandbox/sounds/cat.au +0 -0
  189. data/productions/examples/sandbox/sounds/cow.au +0 -0
  190. data/productions/examples/sandbox/sounds/dog.au +0 -0
  191. data/productions/examples/sandbox/sounds/donkey.au +0 -0
  192. data/productions/examples/sandbox/sounds/duck.au +0 -0
  193. data/productions/examples/sandbox/sounds/players/clip.rb +10 -0
  194. data/productions/examples/sandbox/sounds/props.rb +10 -0
  195. data/productions/examples/sandbox/sounds/styles.rb +17 -0
  196. data/productions/examples/sandbox/spec/alerts/alerts_spec.rb +16 -0
  197. data/productions/examples/sandbox/stage_handles/players/sizer.rb +35 -0
  198. data/productions/examples/sandbox/stage_handles/props.rb +17 -0
  199. data/productions/examples/sandbox/stage_handles/styles.rb +58 -0
  200. data/productions/examples/sandbox/stages.rb +8 -0
  201. data/productions/examples/sandbox/styles.rb +35 -0
  202. data/productions/examples/sandbox/teaser/players/fader.rb +58 -0
  203. data/productions/examples/sandbox/teaser/props.rb +14 -0
  204. data/productions/examples/sandbox/teaser/styles.rb +21 -0
  205. data/productions/examples/tutorials/tutorial_1/players/sample.rb +11 -0
  206. data/productions/examples/tutorials/tutorial_1/props.rb +9 -0
  207. data/productions/examples/tutorials/tutorial_1/styles.rb +25 -0
  208. data/productions/playbills.lll +1 -0
  209. data/productions/stage_composer/init.rb +10 -0
  210. data/productions/stage_composer/inspector/players/inspector.rb +80 -0
  211. data/productions/stage_composer/inspector/players/prop_row.rb +12 -0
  212. data/productions/stage_composer/inspector/players/prop_tree.rb +33 -0
  213. data/productions/stage_composer/inspector/players/style_table.rb +12 -0
  214. data/productions/stage_composer/inspector/players/style_value.rb +16 -0
  215. data/productions/stage_composer/inspector/props.rb +19 -0
  216. data/productions/stage_composer/inspector/styles.rb +71 -0
  217. data/productions/stage_composer/lib/init.rb +5 -0
  218. data/productions/stage_composer/lib/limelight/composer/controller.rb +51 -0
  219. data/productions/stage_composer/lib/limelight/composer/lethargy.rb +24 -0
  220. data/productions/stage_composer/production.rb +6 -0
  221. data/productions/stage_composer/stages.rb +15 -0
  222. data/productions/startup/images/logo.png +0 -0
  223. data/productions/startup/images/splash.png +0 -0
  224. data/productions/startup/production.rb +52 -0
  225. data/productions/startup/spec/default_scene/default_scene_spec.rb +16 -0
  226. data/productions/startup/spec/spec_helper.rb +8 -0
  227. data/productions/startup/stages.rb +9 -0
  228. data/productions/startup/styles.rb +15 -0
  229. data/productions/startup/welcome/players/browse_button.rb +10 -0
  230. data/productions/startup/welcome/players/download_button.rb +17 -0
  231. data/productions/startup/welcome/players/sandbox_button.rb +11 -0
  232. data/productions/startup/welcome/props.rb +23 -0
  233. data/productions/startup/welcome/styles.rb +103 -0
  234. data/spec/limelight/builtin/players/button_spec.rb +20 -0
  235. data/spec/limelight/builtin/players/check_box_spec.rb +29 -0
  236. data/spec/limelight/builtin/players/combo_box_spec.rb +29 -0
  237. data/spec/limelight/builtin/players/image_spec.rb +43 -0
  238. data/spec/limelight/builtin/players/password_box_spec.rb +27 -0
  239. data/spec/limelight/builtin/players/radio_button_spec.rb +64 -0
  240. data/spec/limelight/builtin/players/stage_mover_spec.rb +36 -0
  241. data/spec/limelight/builtin/players/stage_sizer_spec.rb +40 -0
  242. data/spec/limelight/builtin/players/text_area_spec.rb +27 -0
  243. data/spec/limelight/builtin/players/text_box_spec.rb +27 -0
  244. data/spec/limelight/builtin/utilities_production/spec_helper.rb +7 -0
  245. data/spec/limelight/builtin/utilities_production/utilities_production_spec.rb +146 -0
  246. data/spec/limelight/casting_director_spec.rb +164 -0
  247. data/spec/limelight/client/playbills_spec.rb +79 -0
  248. data/spec/limelight/commands/command_spec.rb +26 -0
  249. data/spec/limelight/commands/create_command_spec.rb +108 -0
  250. data/spec/limelight/commands/freeze_command_spec.rb +143 -0
  251. data/spec/limelight/commands/help_command_spec.rb +42 -0
  252. data/spec/limelight/commands/open_command_spec.rb +52 -0
  253. data/spec/limelight/commands/pack_command_spec.rb +26 -0
  254. data/spec/limelight/commands/unpack_command_spec.rb +47 -0
  255. data/spec/limelight/data_spec.rb +36 -0
  256. data/spec/limelight/dsl/prop_builder_spec.rb +245 -0
  257. data/spec/limelight/dsl/stage_builder_spec.rb +90 -0
  258. data/spec/limelight/dsl/styles_builder_spec.rb +194 -0
  259. data/spec/limelight/file_chooser_spec.rb +64 -0
  260. data/spec/limelight/file_filter_spec.rb +29 -0
  261. data/spec/limelight/file_loader_spec.rb +28 -0
  262. data/spec/limelight/gems_spec.rb +92 -0
  263. data/spec/limelight/java_util_spec.rb +37 -0
  264. data/spec/limelight/main_spec.rb +40 -0
  265. data/spec/limelight/paint_action_spec.rb +30 -0
  266. data/spec/limelight/pen_spec.rb +62 -0
  267. data/spec/limelight/producer_spec.rb +210 -0
  268. data/spec/limelight/production_spec.rb +100 -0
  269. data/spec/limelight/prop_spec.rb +431 -0
  270. data/spec/limelight/scene_spec.rb +173 -0
  271. data/spec/limelight/stage_spec.rb +202 -0
  272. data/spec/limelight/string_spec.rb +38 -0
  273. data/spec/limelight/studio_spec.rb +157 -0
  274. data/spec/limelight/styles_spec.rb +53 -0
  275. data/spec/limelight/templates/production_templater_spec.rb +66 -0
  276. data/spec/limelight/templates/scene_templater_spec.rb +51 -0
  277. data/spec/limelight/templates/templater_logger_spec.rb +41 -0
  278. data/spec/limelight/templates/templater_spec.rb +107 -0
  279. data/spec/limelight/theater_spec.rb +72 -0
  280. data/spec/limelight/util/downloader_spec.rb +92 -0
  281. data/spec/spec_helper.rb +70 -0
  282. metadata +335 -0
@@ -0,0 +1,173 @@
1
+ #- Copyright � 2008-2009 8th Light, Inc. All Rights Reserved.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
5
+ require 'limelight/scene'
6
+ require 'limelight/dsl/styles_builder'
7
+
8
+ describe Limelight::Scene do
9
+
10
+ before(:each) do
11
+ @casting_director = make_mock("casting_director", :fill_cast => nil)
12
+ @scene = Limelight::Scene.new(:casting_director => @casting_director)
13
+ end
14
+
15
+ it "should have a styles hash" do
16
+ @scene.illuminate
17
+ @scene.styles.should_not == nil
18
+ @scene.styles.size.should == 0
19
+ end
20
+
21
+ it "should have a button group cache" do
22
+ @scene.button_groups.should_not == nil
23
+ @scene.button_groups.class.should == Limelight::UI::ButtonGroupCache
24
+ end
25
+
26
+ it "should pullout sytles and casting_director from options" do
27
+ scene = Limelight::Scene.new(:styles_hash => "styles", :casting_director => @casting_director)
28
+ scene.illuminate
29
+
30
+ scene.styles.should == "styles"
31
+ scene.casting_director.should == @casting_director
32
+ end
33
+
34
+ it "should have opened event" do
35
+ @scene.should respond_to(:scene_opened)
36
+ end
37
+
38
+ it "should have a cast" do
39
+ @scene.cast.should_not == nil
40
+ @scene.cast.is_a?(Module).should == true
41
+ end
42
+
43
+ it "should have a cast" do
44
+ @scene.cast.should_not == nil
45
+ @scene.cast.is_a?(Module).should == true
46
+ end
47
+
48
+ it "should have an acceptible path when none is provided" do
49
+ Limelight::Scene.new().path.should == File.expand_path("")
50
+ end
51
+
52
+ it "should inherit styles in options" do
53
+ @scene.styles = Limelight.build_styles do
54
+ foo { width 100; height 200 }
55
+ bar { x 11; y 22 }
56
+ end
57
+ @scene.add_options :styles => "foo", :name => "bar"
58
+
59
+ @scene.illuminate
60
+
61
+ @scene.style.width.should == "100"
62
+ @scene.style.height.should == "200"
63
+ @scene.style.x.should == "11"
64
+ @scene.style.y.should == "22"
65
+ end
66
+
67
+ # it "should set the production during illumination before casting" do
68
+ # production = mock("production")
69
+ # scene = Limelight::Scene.new(:styles_hash => "styles", :casting_director => @casting_director, :production => production)
70
+ # @casting_director.should_receive(:fill_cast).with(scene) do |scene|
71
+ # scene.production.should_not == nil
72
+ # end
73
+ #
74
+ # scene.illuminate
75
+ # end
76
+
77
+ describe Limelight::Scene, "paths" do
78
+
79
+ before(:each) do
80
+ @scene = Limelight::Scene.new(:path => "/tmp")
81
+ end
82
+
83
+ it "should know it's props file" do
84
+ @scene.props_file.should == "/tmp/props.rb"
85
+ end
86
+
87
+ it "should know it's styles file" do
88
+ @scene.styles_file.should == "/tmp/styles.rb"
89
+ end
90
+
91
+ end
92
+
93
+ describe Limelight::Scene, "Prop Indexing" do
94
+
95
+ before(:each) do
96
+ @scene.illuminate
97
+ end
98
+
99
+ it "should index props" do
100
+ prop = Limelight::Prop.new(:id => "some_id")
101
+ @scene << prop
102
+
103
+ @scene.find("some_id").should == prop
104
+ end
105
+
106
+ it "should raise error if indexing prop with duplicate id" do
107
+ prop1 = Limelight::Prop.new(:id => "some_id")
108
+ prop2 = Limelight::Prop.new(:id => "some_id")
109
+ @scene << prop1
110
+
111
+ lambda { @scene << prop2 }.should raise_error(Limelight::LimelightException, "Duplicate id: some_id")
112
+ end
113
+
114
+ it "should unindex prop" do
115
+ prop = Limelight::Prop.new(:id => "some_id")
116
+ @scene << prop
117
+ @scene.unindex_prop(prop)
118
+
119
+ @scene.find("some_id").should == nil
120
+ end
121
+
122
+ it "should unindex child's prop" do
123
+ prop = Limelight::Prop.new(:id => "some_id")
124
+ child = Limelight::Prop.new(:id => "child_id")
125
+ prop.children << child
126
+
127
+ @scene << child
128
+ @scene << prop
129
+
130
+ @scene.unindex_prop(prop)
131
+
132
+ @scene.find("some_id").should == nil
133
+ @scene.find("child_id").should == nil
134
+ end
135
+
136
+ it "should not blow up if child has no id" do
137
+ prop = Limelight::Prop.new(:id => "some_id")
138
+ child = Limelight::Prop.new(:id => nil)
139
+ prop.children << child
140
+
141
+ @scene << child
142
+ @scene << prop
143
+
144
+ @scene.unindex_prop(prop)
145
+
146
+ @scene.find("some_id").should == nil
147
+ end
148
+
149
+ it "should unindex grandchildren props" do
150
+ prop = Limelight::Prop.new(:id => "some_id")
151
+ child = Limelight::Prop.new(:id => "child_id")
152
+ grandchild = Limelight::Prop.new(:id => "grandchild_id")
153
+ child.children << grandchild
154
+ prop.children << child
155
+
156
+ @scene << grandchild
157
+ @scene << child
158
+ @scene << prop
159
+
160
+ @scene.unindex_prop(prop)
161
+
162
+ @scene.find("grandchild_id").should == nil
163
+ end
164
+
165
+ it "should convert ids to string when finding" do
166
+ prop = Limelight::Prop.new(:id => 123)
167
+ @scene << prop
168
+
169
+ @scene.find(123).should == prop
170
+ end
171
+ end
172
+
173
+ end
@@ -0,0 +1,202 @@
1
+ #- Copyright � 2008-2009 8th Light, Inc. All Rights Reserved.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
5
+ require 'limelight/stage'
6
+ require 'limelight/scene'
7
+ require 'limelight/theater'
8
+ require 'limelight/studio'
9
+
10
+ describe Limelight::Stage do
11
+
12
+ before(:each) do
13
+ @theater = Limelight::Theater.new
14
+ @stage = @theater.add_stage("George")
15
+ @stage.should_remain_hidden = true
16
+ Limelight::Context.instance.frameManager = Java::limelight.ui.model.InertFrameManager.new
17
+ end
18
+
19
+ it "should have a name" do
20
+ stage = Limelight::Stage.new(@theater, "Jose")
21
+ stage.theater.should be(@theater)
22
+ stage.name.should == "Jose"
23
+ end
24
+
25
+ it "should have a title which default to it's name" do
26
+ @stage.title.should == "George"
27
+
28
+ @stage.title = "Once Upon a Test"
29
+
30
+ @stage.title.should == "Once Upon a Test"
31
+ end
32
+
33
+ it "should have size" do
34
+ @stage.size.should == ["500", "500"]
35
+
36
+ @stage.size = 123, 456
37
+ @stage.size.should == ["123", "456"]
38
+
39
+ @stage.size = [123, 456]
40
+ @stage.size.should == ["123", "456"]
41
+
42
+ @stage.size = "50%", "100%"
43
+ @stage.size.should == ["50%", "100%"]
44
+ end
45
+
46
+ it "should have location" do
47
+ @stage.location.should == ["center", "center"]
48
+
49
+ @stage.location = 123, 456
50
+ @stage.location.should == ["123", "456"]
51
+
52
+ @stage.location = [123, 456]
53
+ @stage.location.should == ["123", "456"]
54
+
55
+ @stage.location = "left", "top"
56
+ @stage.location.should == ["left", "top"]
57
+
58
+ @stage.location = "20%", "40%"
59
+ @stage.location.should == ["20%", "40%"]
60
+ end
61
+
62
+ it "should not allow name changes" do
63
+ lambda { @stage.name = "new name" }.should raise_error
64
+ end
65
+
66
+ it "should set the background color" do
67
+ @stage.background_color = "red"
68
+
69
+ @stage.background_color.should == "#FF0000"
70
+ end
71
+
72
+ it "should be framed or not" do
73
+ @stage.framed = false
74
+ @stage.frame.should be_undecorated
75
+ @stage.should_not be_framed
76
+
77
+ @stage.framed = true
78
+ @stage.frame.should_not be_undecorated
79
+ @stage.should be_framed
80
+ end
81
+
82
+ it "should be always on top" do
83
+ @stage.always_on_top = true
84
+ @stage.should be_always_on_top
85
+ @stage.frame.should be_always_on_top
86
+
87
+ @stage.always_on_top = false
88
+ @stage.should_not be_always_on_top
89
+ @stage.frame.should_not be_always_on_top
90
+ end
91
+
92
+ it "should set kiosk mode" do
93
+ @stage.kiosk?.should == false
94
+ @stage.frame.should_not be_kiosk
95
+
96
+ @stage.kiosk = true
97
+ @stage.kiosk?.should == true
98
+ @stage.frame.should be_kiosk
99
+ end
100
+
101
+ it "should ask the scene if close is allowed" do
102
+ @stage.should_allow_close.should == true
103
+
104
+ scene = mock("scene")
105
+ @stage.stub_current_scene scene
106
+ @stage.should_allow_close.should == true
107
+
108
+ scene.stub!(:allow_close?).and_return false
109
+ @stage.should_allow_close.should == false
110
+
111
+ scene.stub!(:allow_close?).and_return true
112
+ @stage.should_allow_close.should == true
113
+ end
114
+
115
+ it "should allow contructor options" do
116
+ stage = Limelight::Stage.new(@theater, "Ringo", :framed => false, :background_color => "blue")
117
+ stage.framed?.should == false
118
+ stage.background_color.should == "#0000FF"
119
+ end
120
+
121
+ it "should handle vitality" do
122
+ @stage.vital?.should == true
123
+ @stage.vital = false
124
+ @stage.vital?.should == false
125
+ @stage.frame.isVital.should == false
126
+ end
127
+
128
+ describe "when opening a scene" do
129
+ before(:each) do
130
+ @scene = Limelight::Scene.new
131
+ @scene.stub!(:illuminate)
132
+ end
133
+
134
+ it "should call scene.scene_opened at the end of opening a scene" do
135
+ @scene.should_receive(:scene_opened)
136
+
137
+ @stage.open(@scene)
138
+ end
139
+
140
+ it "should illuminate the scene when opening it" do
141
+ @scene.should_receive(:illuminate)
142
+
143
+ @stage.open(@scene)
144
+ end
145
+
146
+ it "should set the stage on the scene" do
147
+ @scene.should_receive(:stage=).with(@stage)
148
+
149
+ @stage.open(@scene)
150
+ end
151
+
152
+ it "should hide and show" do
153
+ @stage.open(@scene)
154
+ @stage.should_remain_hidden = false
155
+ @stage.frame.should_receive(:visible=).with(false)
156
+ @stage.hide
157
+
158
+ @stage.frame.should_receive(:visible=).with(true)
159
+ @stage.show
160
+ end
161
+
162
+ it "should open the frame when opening" do
163
+ @stage.should_remain_hidden = false
164
+ @stage.frame.should_receive(:open)
165
+
166
+ @stage.open(@scene)
167
+ end
168
+
169
+ it "should not open the frame when opening and in hidden mode" do
170
+ @stage.should_remain_hidden = true
171
+ @stage.frame.should_not_receive(:open)
172
+
173
+ @stage.open(@scene)
174
+ end
175
+
176
+ it "should clean up on close" do
177
+ @stage.open(@scene)
178
+
179
+ @stage.close
180
+
181
+ @scene.visible?.should == false
182
+ @stage.current_scene.should == nil
183
+ end
184
+
185
+ it "should be removed from the theater when closed" do
186
+ @stage.open(@scene)
187
+ @theater["George"].should be(@stage)
188
+
189
+ @stage.close
190
+ @theater["George"].should == nil
191
+ end
192
+
193
+ it "should open an alert" do
194
+ Limelight::Studio.utilities_production.should_receive(:alert).with("Some Message")
195
+
196
+ @stage.alert("Some Message")
197
+ sleep(0.01)
198
+ end
199
+
200
+ end
201
+
202
+ end
@@ -0,0 +1,38 @@
1
+ #- Copyright � 2008-2009 8th Light, Inc. All Rights Reserved.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
5
+ require 'limelight/string'
6
+
7
+ describe String do
8
+
9
+ it "should convert into camel case" do
10
+ "class_name".camalized.should == "ClassName"
11
+ "once_upon_a_time".camalized.should == "OnceUponATime"
12
+ "AbC_eFg_hiJ".camalized.should == "AbcEfgHij"
13
+ "with spaces".camalized.should == "WithSpaces"
14
+ end
15
+
16
+ it "should convert into camel case" do
17
+ "class_name".camalized(:lower).should == "className"
18
+ "once_upon_a_time".camalized(:lower).should == "onceUponATime"
19
+ "AbC_eFg_hiJ".camalized(:lower).should == "abcEfgHij"
20
+ "with spaces".camalized(:lower).should == "withSpaces"
21
+ end
22
+
23
+ it "should underscore a name" do
24
+ "ClassName".underscored.should == "class_name"
25
+ "OneTwoThree".underscored.should == "one_two_three"
26
+ "One".underscored.should == "one"
27
+ end
28
+
29
+ it "should convert a string to title" do
30
+ "class_name".titleized.should == "Class Name"
31
+ "once_upon_a_time".titleized.should == "Once Upon A Time"
32
+ "AbC_eFg_hiJ".titleized.should == "Ab C E Fg Hi J"
33
+ "with spaces".titleized.should == "With Spaces"
34
+ "Some Title".titleized.should == "Some Title"
35
+ "SomeTitle".titleized.should == "Some Title"
36
+ end
37
+
38
+ end
@@ -0,0 +1,157 @@
1
+ #- Copyright � 2008-2009 8th Light, Inc. All Rights Reserved.
2
+ #- Limelight and all included source files are distributed under terms of the GNU LGPL.
3
+
4
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
5
+ require 'limelight/studio'
6
+
7
+ Studio = Limelight::Studio
8
+
9
+ describe Limelight::Studio do
10
+
11
+ class TestProduction
12
+ attr_accessor :name
13
+ end
14
+
15
+ before do
16
+ Studio.reset
17
+ @production = TestProduction.new
18
+ end
19
+
20
+ it "should install itsself" do
21
+ Studio.install
22
+
23
+ Limelight::Context.instance.studio.should == Studio.instance
24
+ end
25
+
26
+ def prepare_for_open()
27
+ @producer = mock("producer", :production => @production, :open => nil)
28
+ Limelight::Producer.stub!(:new).and_return(@producer)
29
+ end
30
+
31
+ it "should keep track of productions opened" do
32
+ prepare_for_open
33
+ @production.name = "Sven"
34
+ Studio.productions.length.should == 0
35
+
36
+ Studio.open(@production)
37
+
38
+ Studio.productions.length.should == 1
39
+ Studio["Sven"].should be(@production)
40
+ end
41
+
42
+ it "should ask all the production if it's okay to close and not shutdown" do
43
+ Studio.index(@production)
44
+
45
+ @production.should_receive(:allow_close?).and_return(false)
46
+ Studio.should_allow_shutdown.should == false
47
+ end
48
+
49
+ it "should ask all the production if it's okay to close and shutdown" do
50
+ Studio.index(@production)
51
+
52
+ @production.should_receive(:allow_close?).and_return(true)
53
+ Studio.should_allow_shutdown.should == true
54
+ end
55
+
56
+ it "should removed productions that are closed" do
57
+ production1 = TestProduction.new
58
+ production2 = TestProduction.new
59
+ Studio.index(production1)
60
+ Studio.index(production2)
61
+
62
+ Studio.production_closed(production1)
63
+
64
+ Studio.productions.length.should == 1
65
+ Studio.productions[0].should be(production2)
66
+ end
67
+
68
+ it "should shutdown if all the productions are closed" do
69
+ prepare_for_open
70
+ Studio.open("blah")
71
+ Limelight::Context.instance().should_receive(:shutdown)
72
+
73
+ Studio.production_closed(@production)
74
+
75
+ sleep(0.1)
76
+ end
77
+
78
+ it "should add productions to the index" do
79
+ @production.name = "Bob"
80
+
81
+ Limelight::Studio.index(@production)
82
+
83
+ Limelight::Studio["Bob"].should == @production
84
+ end
85
+
86
+ it "should give a production a name if it doesn't have one" do
87
+ Limelight::Studio.index(@production)
88
+
89
+ @production.name.should == "1"
90
+ Limelight::Studio["1"].should == @production
91
+
92
+ production2 = TestProduction.new
93
+ Limelight::Studio.index(production2)
94
+
95
+ production2.name.should == "2"
96
+ Limelight::Studio["2"].should == production2
97
+ end
98
+
99
+ it "should modify the name of a production until it's unique" do
100
+ prod1 = TestProduction.new
101
+ prod2 = TestProduction.new
102
+ prod3 = TestProduction.new
103
+ prod1.name = prod2.name = prod3.name = "Fido"
104
+
105
+ Studio.index(prod1)
106
+ Studio.index(prod2)
107
+ Studio.index(prod3)
108
+
109
+ Studio["Fido"].should be(prod1)
110
+ Studio["Fido_2"].should be(prod2)
111
+ Studio["Fido_3"].should be(prod3)
112
+ prod1.name.should == "Fido"
113
+ prod2.name.should == "Fido_2"
114
+ prod3.name.should == "Fido_3"
115
+ end
116
+
117
+ it "should shutdown" do
118
+ Studio.index(@production)
119
+ @production.should_receive(:allow_close?).and_return(true)
120
+ @production.should_receive(:close).and_return(true)
121
+ Limelight::Context.instance().should_receive(:shutdown)
122
+
123
+ Studio.shutdown
124
+ sleep(0.1)
125
+ end
126
+
127
+ it "should publish on drb" do
128
+ Studio.publish_on_drb("9876")
129
+
130
+ DRb.start_service
131
+ proxy = DRbObject.new(nil, "druby://127.0.0.1:9876")
132
+ proxy.instance.should_not == nil
133
+ end
134
+
135
+ it "should provide the utilities production" do
136
+ Studio.utilities_production.should_not == nil
137
+ Studio.utilities_production.name.should == "utilities_production"
138
+ Studio.utilities_production.should be(Studio.utilities_production)
139
+ # Studio.utilities_production.close
140
+ end
141
+
142
+ it "should give the same buildin_styles hash twice" do
143
+ Studio.builtin_styles.should be(Studio.builtin_styles)
144
+ Studio.builtin_styles["limelight_builtin_players_curtains"].should_not == nil
145
+ end
146
+
147
+ it "should show alert and shutdown if first production fails to open" do
148
+ utilities = mock("utilities")
149
+ utilities.should_receive(:alert)
150
+ Studio.should_receive(:utilities_production).and_return(utilities)
151
+ Limelight::Context.instance().should_receive(:shutdown)
152
+
153
+ Studio.open("http://blah.blah:1234/blah.llp") # will fail
154
+ sleep(0.1)
155
+ end
156
+
157
+ end