epall-limelight 0.5.0-java

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 (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