limelight 0.0.1-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.
- data/bin/icons/icon.ico +0 -0
- data/bin/icons/icon_48.gif +0 -0
- data/bin/icons/limelight.icns +0 -0
- data/bin/icons/splash.png +0 -0
- data/bin/limelight +6 -0
- data/bin/ll +10 -0
- data/bin/ll.bat +5 -0
- data/lib/init.rb +11 -0
- data/lib/limelight/build_exception.rb +45 -0
- data/lib/limelight/button_group_cache.rb +11 -0
- data/lib/limelight/casting_director.rb +72 -0
- data/lib/limelight/commands.rb +66 -0
- data/lib/limelight/file_chooser.rb +55 -0
- data/lib/limelight/file_filter.rb +26 -0
- data/lib/limelight/java_util.rb +29 -0
- data/lib/limelight/limelight_exception.rb +9 -0
- data/lib/limelight/loaders/file_scene_loader.rb +48 -0
- data/lib/limelight/menu_bar.rb +49 -0
- data/lib/limelight/paint_action.rb +25 -0
- data/lib/limelight/pen.rb +53 -0
- data/lib/limelight/players/button.rb +29 -0
- data/lib/limelight/players/check_box.rb +38 -0
- data/lib/limelight/players/combo_box.rb +44 -0
- data/lib/limelight/players/radio_button.rb +47 -0
- data/lib/limelight/players/text_area.rb +25 -0
- data/lib/limelight/players/text_box.rb +25 -0
- data/lib/limelight/players.rb +9 -0
- data/lib/limelight/producer.rb +141 -0
- data/lib/limelight/production.rb +64 -0
- data/lib/limelight/production_builder.rb +49 -0
- data/lib/limelight/prop.rb +241 -0
- data/lib/limelight/prop_builder.rb +60 -0
- data/lib/limelight/scene.rb +75 -0
- data/lib/limelight/stage.rb +93 -0
- data/lib/limelight/stage_builder.rb +62 -0
- data/lib/limelight/styles.rb +37 -0
- data/lib/limelight/styles_builder.rb +61 -0
- data/lib/limelight/theater.rb +42 -0
- data/lib/limelight/util.rb +26 -0
- data/lib/limelight/version.rb +20 -0
- data/lib/limelight.jar +0 -0
- data/productions/examples/8thlight.com/about/about.txt +24 -0
- data/productions/examples/8thlight.com/about/props.rb +11 -0
- data/productions/examples/8thlight.com/about/styles.rb +2 -0
- data/productions/examples/8thlight.com/footer.rb +6 -0
- data/productions/examples/8thlight.com/home/props.rb +28 -0
- data/productions/examples/8thlight.com/home/styles.rb +2 -0
- data/productions/examples/8thlight.com/images/anvil.jpg +0 -0
- data/productions/examples/8thlight.com/images/bg.jpg +0 -0
- data/productions/examples/8thlight.com/images/botticelli.jpg +0 -0
- data/productions/examples/8thlight.com/images/button_bg.jpg +0 -0
- data/productions/examples/8thlight.com/images/canvas_bg.jpg +0 -0
- data/productions/examples/8thlight.com/images/footer_bg.jpg +0 -0
- data/productions/examples/8thlight.com/images/header.jpg +0 -0
- data/productions/examples/8thlight.com/images/moses.jpg +0 -0
- data/productions/examples/8thlight.com/images/statemachine_thumbnail.png +0 -0
- data/productions/examples/8thlight.com/images/thumbnail_book.jpg +0 -0
- data/productions/examples/8thlight.com/menu.rb +11 -0
- data/productions/examples/8thlight.com/services/props.rb +11 -0
- data/productions/examples/8thlight.com/services/services.txt +8 -0
- data/productions/examples/8thlight.com/services/styles.rb +2 -0
- data/productions/examples/8thlight.com/stages.rb +8 -0
- data/productions/examples/8thlight.com/styles.rb +205 -0
- data/productions/examples/calculator/players/button.rb +24 -0
- data/productions/examples/calculator/players/calculator.rb +15 -0
- data/productions/examples/calculator/players/calculator_model.rb +13 -0
- data/productions/examples/calculator/props.rb +23 -0
- data/productions/examples/calculator/styles.rb +38 -0
- data/productions/examples/langstons_ant/html_javascript/ant.css +39 -0
- data/productions/examples/langstons_ant/html_javascript/ant.html +22 -0
- data/productions/examples/langstons_ant/html_javascript/ant.js +23 -0
- data/productions/examples/langstons_ant/players/ant.rb +103 -0
- data/productions/examples/langstons_ant/players/log.rb +29 -0
- data/productions/examples/langstons_ant/players/start_stop_button.rb +37 -0
- data/productions/examples/langstons_ant/players/world.rb +61 -0
- data/productions/examples/langstons_ant/props.rb +22 -0
- data/productions/examples/langstons_ant/styles.rb +105 -0
- data/productions/examples/sandbox/click_me/players/chromaton.rb +47 -0
- data/productions/examples/sandbox/click_me/props.rb +8 -0
- data/productions/examples/sandbox/click_me/styles.rb +12 -0
- data/productions/examples/sandbox/floaters/players/floater.rb +92 -0
- data/productions/examples/sandbox/floaters/players/surface.rb +17 -0
- data/productions/examples/sandbox/floaters/props.rb +10 -0
- data/productions/examples/sandbox/floaters/styles.rb +25 -0
- data/productions/examples/sandbox/gradients/players/spinner.rb +23 -0
- data/productions/examples/sandbox/gradients/players/teaser.rb +26 -0
- data/productions/examples/sandbox/gradients/players/wave.rb +26 -0
- data/productions/examples/sandbox/gradients/players/waves.rb +26 -0
- data/productions/examples/sandbox/gradients/props.rb +13 -0
- data/productions/examples/sandbox/gradients/styles.rb +47 -0
- data/productions/examples/sandbox/header.rb +15 -0
- data/productions/examples/sandbox/homer/players/homer.rb +20 -0
- data/productions/examples/sandbox/homer/props.rb +10 -0
- data/productions/examples/sandbox/homer/styles.rb +17 -0
- data/productions/examples/sandbox/images/arch.jpg +0 -0
- data/productions/examples/sandbox/images/beach.jpg +0 -0
- data/productions/examples/sandbox/images/homer.jpg +0 -0
- data/productions/examples/sandbox/images/limelight_spotlight.jpg +0 -0
- data/productions/examples/sandbox/images/marilyn.jpg +0 -0
- data/productions/examples/sandbox/inputs/players/button_input.rb +48 -0
- data/productions/examples/sandbox/inputs/players/check_box_input.rb +40 -0
- data/productions/examples/sandbox/inputs/players/combo_box_input.rb +41 -0
- data/productions/examples/sandbox/inputs/players/radio_button_input.rb +43 -0
- data/productions/examples/sandbox/inputs/players/text_area_input.rb +36 -0
- data/productions/examples/sandbox/inputs/players/text_box_input.rb +36 -0
- data/productions/examples/sandbox/inputs/props.rb +40 -0
- data/productions/examples/sandbox/inputs/styles.rb +39 -0
- data/productions/examples/sandbox/players/sandbox.rb +11 -0
- data/productions/examples/sandbox/rounded_corners/players/box.rb +11 -0
- data/productions/examples/sandbox/rounded_corners/props.rb +22 -0
- data/productions/examples/sandbox/rounded_corners/styles.rb +18 -0
- data/productions/examples/sandbox/scrolling/players/cell.rb +16 -0
- data/productions/examples/sandbox/scrolling/props.rb +40 -0
- data/productions/examples/sandbox/scrolling/styles.rb +25 -0
- data/productions/examples/sandbox/sketching/players/sketchpad.rb +46 -0
- data/productions/examples/sandbox/sketching/props.rb +25 -0
- data/productions/examples/sandbox/sketching/styles.rb +36 -0
- data/productions/examples/sandbox/stages.rb +6 -0
- data/productions/examples/sandbox/styles.rb +37 -0
- data/productions/examples/sandbox/teaser/players/fader.rb +58 -0
- data/productions/examples/sandbox/teaser/props.rb +14 -0
- data/productions/examples/sandbox/teaser/styles.rb +22 -0
- data/productions/examples/tutorials/tutorial_1/players/sample.rb +11 -0
- data/productions/examples/tutorials/tutorial_1/props.rb +9 -0
- data/productions/examples/tutorials/tutorial_1/styles.rb +27 -0
- data/productions/stage_composer/init.rb +10 -0
- data/productions/stage_composer/inspector/players/inspector.rb +80 -0
- data/productions/stage_composer/inspector/players/prop_row.rb +12 -0
- data/productions/stage_composer/inspector/players/prop_tree.rb +33 -0
- data/productions/stage_composer/inspector/players/style_table.rb +12 -0
- data/productions/stage_composer/inspector/players/style_value.rb +16 -0
- data/productions/stage_composer/inspector/props.rb +19 -0
- data/productions/stage_composer/inspector/styles.rb +71 -0
- data/productions/stage_composer/lib/init.rb +5 -0
- data/productions/stage_composer/lib/limelight/composer/controller.rb +51 -0
- data/productions/stage_composer/lib/limelight/composer/lethargy.rb +24 -0
- data/productions/stage_composer/production.rb +6 -0
- data/productions/stage_composer/stages.rb +15 -0
- data/productions/startup/props.rb +5 -0
- data/spec/casting_director_spec.rb +94 -0
- data/spec/commands_spec.rb +33 -0
- data/spec/file_chooser_spec.rb +64 -0
- data/spec/file_filter_spec.rb +29 -0
- data/spec/java_util_spec.rb +53 -0
- data/spec/loaders/file_loader_spec.rb +28 -0
- data/spec/paint_action_spec.rb +30 -0
- data/spec/pen_spec.rb +62 -0
- data/spec/players/button_spec.rb +31 -0
- data/spec/players/check_box_spec.rb +40 -0
- data/spec/players/combo_box_spec.rb +39 -0
- data/spec/players/radio_button_spec.rb +75 -0
- data/spec/players/text_area_spec.rb +37 -0
- data/spec/players/text_box_spec.rb +37 -0
- data/spec/producer_spec.rb +157 -0
- data/spec/production_builder_spec.rb +48 -0
- data/spec/production_spec.rb +75 -0
- data/spec/prop_builder_spec.rb +178 -0
- data/spec/prop_spec.rb +216 -0
- data/spec/scene_spec.rb +34 -0
- data/spec/spec_helper.rb +18 -0
- data/spec/stage_builder_spec.rb +90 -0
- data/spec/stage_spec.rb +57 -0
- data/spec/styles_builder_spec.rb +123 -0
- data/spec/theater_spec.rb +66 -0
- metadata +275 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
#- Copyright 2008 8th Light, Inc.
|
|
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/prop_builder'
|
|
6
|
+
|
|
7
|
+
describe Limelight::SceneBuilder do
|
|
8
|
+
|
|
9
|
+
before(:each) do
|
|
10
|
+
@caster = make_mock("caster", :fill_cast => nil)
|
|
11
|
+
@options = { :name => "root", :casting_director => @caster}
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should build root" do
|
|
15
|
+
root = Limelight.build_scene(@options)
|
|
16
|
+
|
|
17
|
+
root.class.should == Limelight::Scene
|
|
18
|
+
root.name.should == "root"
|
|
19
|
+
root.panel.should_not == nil
|
|
20
|
+
root.children.size.should == 0
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should build one child prop" do
|
|
24
|
+
root = Limelight::build_scene(@options) do
|
|
25
|
+
child
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
root.children.size.should == 1
|
|
29
|
+
child = root.children[0]
|
|
30
|
+
child.class.should == Limelight::Prop
|
|
31
|
+
child.name.should == "child"
|
|
32
|
+
child.panel.should_not == nil
|
|
33
|
+
child.children.size.should == 0
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "should allow multiple children" do
|
|
37
|
+
root = Limelight::build_scene(@options) do
|
|
38
|
+
child1
|
|
39
|
+
child2
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
root.children.size.should == 2
|
|
43
|
+
root.children[0].name.should == "child1"
|
|
44
|
+
root.children[1].name.should == "child2"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "should allow nested children" do
|
|
48
|
+
root = Limelight::build_scene(@options) do
|
|
49
|
+
child do
|
|
50
|
+
grandchild
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
root.children.size.should == 1
|
|
55
|
+
root.children[0].name.should == "child"
|
|
56
|
+
root.children[0].children.size.should == 1
|
|
57
|
+
root.children[0].children[0].name.should == "grandchild"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it "should be able to set the id" do
|
|
61
|
+
root = Limelight::build_scene(@options) do
|
|
62
|
+
child :id => "child_1", :players => "x, y, z"
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
child = root.children[0]
|
|
66
|
+
child.id.should == "child_1"
|
|
67
|
+
child.players.should == "x, y, z"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "should allow setting styles" do
|
|
71
|
+
root = Limelight::build_scene(@options) do
|
|
72
|
+
child :width => "100", :font_size => "10", :top_border_color => "blue"
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
child = root.children[0]
|
|
76
|
+
child.style.width.should == "100"
|
|
77
|
+
child.style.font_size.should == "10"
|
|
78
|
+
child.style.top_border_color.should == "blue"
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "should allow defining events through constructor" do
|
|
82
|
+
root = Limelight::build_scene(@options) do
|
|
83
|
+
child :on_mouse_entered => "return [self, event]"
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
child = root.children[0]
|
|
87
|
+
child.mouse_entered("blah").should == [child, "blah"]
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it "should allow scene configuration" do
|
|
91
|
+
root = Limelight::build_scene(@options) do
|
|
92
|
+
__ :name => "root", :id => "123"
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
root.children.size.should == 0
|
|
96
|
+
root.name.should == "root"
|
|
97
|
+
root.id.should == "123"
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it "should give every prop their scene" do
|
|
101
|
+
root = Limelight::build_scene(@options) do
|
|
102
|
+
child do
|
|
103
|
+
grandchild
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
root.scene.should == root
|
|
108
|
+
root.children[0].scene.should == root
|
|
109
|
+
root.children[0].children[0].scene.should == root
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it "should install external props" do
|
|
113
|
+
loader = make_mock("loader", :exists? => true)
|
|
114
|
+
loader.should_receive(:load).with("external.rb").and_return("child :id => 123")
|
|
115
|
+
|
|
116
|
+
root = Limelight::build_scene(:id => 321, :build_loader => loader, :casting_director => @caster) do
|
|
117
|
+
__install "external.rb"
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
root.id.should == 321
|
|
121
|
+
root.children.size.should == 1
|
|
122
|
+
child = root.children[0]
|
|
123
|
+
child.name.should == "child"
|
|
124
|
+
child.id.should == 123
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it "should fail if no loader is provided" do
|
|
128
|
+
begin
|
|
129
|
+
root = Limelight::build_scene(@options.merge(:id => 321, :build_loader => nil)) do
|
|
130
|
+
__install "external.rb"
|
|
131
|
+
end
|
|
132
|
+
root.should == nil # should never get here
|
|
133
|
+
rescue Exception => e
|
|
134
|
+
e.message.should == "Cannot install external props because no loader was provided"
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it "should fail when the external file doesn't exist" do
|
|
139
|
+
loader = make_mock("loader")
|
|
140
|
+
loader.should_receive(:exists?).with("external.rb").and_return(false)
|
|
141
|
+
|
|
142
|
+
begin
|
|
143
|
+
root = Limelight::build_scene(@options.merge(:id => 321, :build_loader => loader)) do
|
|
144
|
+
__install "external.rb"
|
|
145
|
+
end
|
|
146
|
+
rescue Exception => e
|
|
147
|
+
e.message.should == "External prop file: 'external.rb' doesn't exist"
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
it "should fail with PropException when there's problem in the external file" do
|
|
152
|
+
loader = make_mock("loader", :exists? => true)
|
|
153
|
+
loader.should_receive(:load).with("external.rb").and_return("+")
|
|
154
|
+
|
|
155
|
+
begin
|
|
156
|
+
root = Limelight::build_scene(@options.merge(:id => 321, :build_loader => loader)) do
|
|
157
|
+
__install "external.rb"
|
|
158
|
+
end
|
|
159
|
+
rescue Limelight::BuildException => e
|
|
160
|
+
e.message.should include("external.rb:1: (eval):1: , unexpected end-of-file")
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
it "should build onto an existing block" do
|
|
165
|
+
prop = Limelight::Prop.new
|
|
166
|
+
prop.set_scene(Limelight::Scene.new(:casting_director => make_mock(:casting_director, :fill_cast => nil)))
|
|
167
|
+
builder = Limelight::PropBuilder.new(prop)
|
|
168
|
+
block = Proc.new { one; two { three } }
|
|
169
|
+
builder.instance_eval(&block)
|
|
170
|
+
|
|
171
|
+
prop.children.length.should == 2
|
|
172
|
+
prop.children[0].name.should == "one"
|
|
173
|
+
prop.children[1].name.should == "two"
|
|
174
|
+
prop.children[1].children.length.should == 1
|
|
175
|
+
prop.children[1].children[0].name.should == "three"
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
end
|
data/spec/prop_spec.rb
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
#- Copyright 2008 8th Light, Inc.
|
|
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/prop'
|
|
6
|
+
require 'limelight/styles_builder'
|
|
7
|
+
require 'limelight/scene'
|
|
8
|
+
|
|
9
|
+
describe Limelight::Prop do
|
|
10
|
+
|
|
11
|
+
before(:each) do
|
|
12
|
+
@casting_director = make_mock("casting_director", :fill_cast => nil)
|
|
13
|
+
@scene = Limelight::Scene.new(:casting_director => @casting_director)
|
|
14
|
+
@prop = Limelight::Prop.new(:id => "root", :name => "root_class")
|
|
15
|
+
@scene << @prop
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should extend added controllers and invoke the extended hook" do
|
|
19
|
+
module TestController
|
|
20
|
+
class << self
|
|
21
|
+
attr_reader :extended_prop
|
|
22
|
+
def extended(prop)
|
|
23
|
+
@extended_prop = (prop)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_method
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
@prop.add_controller(TestController)
|
|
32
|
+
|
|
33
|
+
TestController.extended_prop.should == @prop
|
|
34
|
+
@prop.respond_to?(:test_method).should == true
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should have an id" do
|
|
38
|
+
@prop.id.should == "root"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def build_prop_tree
|
|
42
|
+
@child1 = Limelight::Prop.new(:id => "child1", :name => "child_class")
|
|
43
|
+
@child2 = Limelight::Prop.new(:id => "child2", :name => "child_class")
|
|
44
|
+
@grand_child1 = Limelight::Prop.new(:id => "grand_child1", :name => "grand_child_class")
|
|
45
|
+
@grand_child2 = Limelight::Prop.new(:id => "grand_child2", :name => "grand_child_class")
|
|
46
|
+
@grand_child3 = Limelight::Prop.new(:id => "grand_child3", :name => "grand_child_class")
|
|
47
|
+
@grand_child4 = Limelight::Prop.new(:id => "grand_child4", :name => "grand_child_class")
|
|
48
|
+
|
|
49
|
+
@prop << @child1 << @child2
|
|
50
|
+
@child1 << @grand_child1 << @grand_child2
|
|
51
|
+
@child2 << @grand_child3 << @grand_child4
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "should find children by id" do
|
|
55
|
+
build_prop_tree
|
|
56
|
+
@prop.find("blah").should == nil
|
|
57
|
+
@prop.find("root").should be(@prop)
|
|
58
|
+
@prop.find("child1").should be(@child1)
|
|
59
|
+
@prop.find("child2").should be(@child2)
|
|
60
|
+
@prop.find("grand_child1").should be(@grand_child1)
|
|
61
|
+
@prop.find("grand_child2").should be(@grand_child2)
|
|
62
|
+
@prop.find("grand_child3").should be(@grand_child3)
|
|
63
|
+
@prop.find("grand_child4").should be(@grand_child4)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "should find children by name" do
|
|
67
|
+
build_prop_tree
|
|
68
|
+
@prop.find_by_name("root_class").should == [@prop]
|
|
69
|
+
@prop.find_by_name("child_class").should == [@child1, @child2]
|
|
70
|
+
@prop.find_by_name("grand_child_class").should == [@grand_child1, @grand_child2, @grand_child3, @grand_child4]
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "should get and set text" do
|
|
74
|
+
@prop.text = "blah"
|
|
75
|
+
@prop.text.should == "blah"
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it "should have controllers" do
|
|
79
|
+
prop = Limelight::Prop.new(:players => "abc, xyz")
|
|
80
|
+
@scene << prop
|
|
81
|
+
prop.players.should == "abc, xyz"
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "should get populated through constructor" do
|
|
85
|
+
prop = Limelight::Prop.new(:name => "my_name", :id => "123", :players => "a, b, c")
|
|
86
|
+
@scene << prop
|
|
87
|
+
|
|
88
|
+
prop.name.should == "my_name"
|
|
89
|
+
prop.id.should == "123"
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "should populate styles through constructor" do
|
|
93
|
+
prop = Limelight::Prop.new(:width => "100", :text_color => "white", :background_image => "apple.jpg")
|
|
94
|
+
@scene << prop
|
|
95
|
+
|
|
96
|
+
prop.style.width.should == "100"
|
|
97
|
+
prop.style.text_color.should == "white"
|
|
98
|
+
prop.style.background_image.should == "apple.jpg"
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it "should define event through constructor using a string" do
|
|
102
|
+
prop = Limelight::Prop.new(:on_mouse_entered => "return event")
|
|
103
|
+
@scene << prop
|
|
104
|
+
|
|
105
|
+
value = prop.mouse_entered("my event")
|
|
106
|
+
|
|
107
|
+
value.should == "my event"
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
it "should pass scene on to children" do
|
|
111
|
+
child = Limelight::Prop.new(:name => "child")
|
|
112
|
+
|
|
113
|
+
@prop.parent.should == @scene
|
|
114
|
+
@prop.scene.should == @scene
|
|
115
|
+
|
|
116
|
+
@prop << child
|
|
117
|
+
child.parent.should == @prop
|
|
118
|
+
child.scene.should == @scene
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it "should set styles upon adding to parent" do
|
|
122
|
+
styles = Limelight::build_styles { child { width 123 } }
|
|
123
|
+
scene = Limelight::Scene.new(:casting_director => @casting_director, :styles => styles)
|
|
124
|
+
prop = Limelight::Prop.new(:name => "child")
|
|
125
|
+
|
|
126
|
+
scene << prop
|
|
127
|
+
|
|
128
|
+
prop.style.width.should == "123"
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it "should set styles upon adding to parent" do
|
|
132
|
+
prop = Limelight::Prop.new(:name => "child")
|
|
133
|
+
|
|
134
|
+
@casting_director.should_receive(:fill_cast).with(prop)
|
|
135
|
+
|
|
136
|
+
@scene << prop
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
it "should use populate data included by players" do
|
|
140
|
+
prop = Limelight::Prop.new(:name => "child", :foo => "bar")
|
|
141
|
+
@casting_director.should_receive(:fill_cast).with(prop) do
|
|
142
|
+
prop.instance_eval "def foo=(value); @foo = value; end; def foo; return @foo; end;"
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
@scene << prop
|
|
146
|
+
|
|
147
|
+
prop.foo.should == "bar"
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
it "should be able to remove children" do
|
|
151
|
+
child1 = Limelight::Prop.new()
|
|
152
|
+
child2 = Limelight::Prop.new()
|
|
153
|
+
child3 = Limelight::Prop.new()
|
|
154
|
+
@prop << child1 << child2 << child3
|
|
155
|
+
|
|
156
|
+
@prop.remove(child2)
|
|
157
|
+
|
|
158
|
+
@prop.children.length.should == 2
|
|
159
|
+
@prop.children.should_not include(child2)
|
|
160
|
+
@prop.panel.components.length.should == 2
|
|
161
|
+
@prop.panel.components.should_not include(child2.panel)
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
it "should make dimensions accessible" do
|
|
165
|
+
@prop.panel.should_receive(:get_rectangle).and_return("whole area")
|
|
166
|
+
@prop.panel.should_receive(:get_rectangle_inside_borders).and_return("area inside borders")
|
|
167
|
+
|
|
168
|
+
@prop.area.should == "whole area"
|
|
169
|
+
@prop.bordered_area.should == "area inside borders"
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
it "should give you a pen" do
|
|
173
|
+
graphics = make_mock("graphics", :setColor => nil, :setStroke => nil, :setRenderingHint => nil)
|
|
174
|
+
@prop.panel.should_receive(:getGraphics).and_return(graphics)
|
|
175
|
+
|
|
176
|
+
pen = @prop.pen
|
|
177
|
+
|
|
178
|
+
pen.context.should be(graphics)
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
it "should set after paint action" do
|
|
182
|
+
block = Proc.new { |pen| }
|
|
183
|
+
|
|
184
|
+
@prop.after_painting &block
|
|
185
|
+
|
|
186
|
+
action = @prop.panel.after_paint_action
|
|
187
|
+
action.should_not == nil
|
|
188
|
+
action.class.should == Limelight::PaintAction
|
|
189
|
+
action.block.should == block
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
it "should clear after paint action" do
|
|
193
|
+
@prop.after_painting { |pen| puts "blah" }
|
|
194
|
+
|
|
195
|
+
@prop.after_painting nil
|
|
196
|
+
|
|
197
|
+
@prop.panel.after_paint_action.should == nil
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
it "should build children" do
|
|
201
|
+
@prop.build do
|
|
202
|
+
one
|
|
203
|
+
two do
|
|
204
|
+
three
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
@prop.children.length.should == 2
|
|
209
|
+
@prop.children[0].name.should == "one"
|
|
210
|
+
@prop.children[1].name.should == "two"
|
|
211
|
+
@prop.children[1].children.length.should == 1
|
|
212
|
+
@prop.children[1].children[0].name.should == "three"
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
end
|
|
216
|
+
|
data/spec/scene_spec.rb
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#- Copyright 2008 8th Light, Inc.
|
|
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
|
+
|
|
7
|
+
describe Limelight::Scene do
|
|
8
|
+
|
|
9
|
+
before(:each) do
|
|
10
|
+
@casting_director = make_mock("casting_director", :fill_cast => nil)
|
|
11
|
+
@scene = Limelight::Scene.new(:casting_director => @casting_director)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should have a styles hash" do
|
|
15
|
+
@scene.styles.should_not == nil
|
|
16
|
+
@scene.styles.size.should == 0
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should have a button group cache" do
|
|
20
|
+
@scene.button_groups.should_not == nil
|
|
21
|
+
@scene.button_groups.class.should == Java::limelight.ui.ButtonGroupCache
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should pullout sytles and casting_director from options" do
|
|
25
|
+
scene = Limelight::Scene.new(:styles => "styles", :casting_director => @casting_director)
|
|
26
|
+
|
|
27
|
+
scene.styles.should == "styles"
|
|
28
|
+
scene.casting_director.should == @casting_director
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should have opened event" do
|
|
32
|
+
@scene.should respond_to(:scene_opened)
|
|
33
|
+
end
|
|
34
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#- Copyright 2008 8th Light, Inc.
|
|
2
|
+
#- Limelight and all included source files are distributed under terms of the GNU LGPL.
|
|
3
|
+
|
|
4
|
+
require File.expand_path(File.dirname(__FILE__) + "/../lib/init")
|
|
5
|
+
|
|
6
|
+
require 'spec'
|
|
7
|
+
|
|
8
|
+
def make_mock(name, stubs = {})
|
|
9
|
+
the_mock = mock(name)
|
|
10
|
+
the_mock.stubs!(stubs)
|
|
11
|
+
return the_mock
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class Object
|
|
15
|
+
def stubs!(stubs = {})
|
|
16
|
+
stubs.each_pair { |key, value| self.stub!(key).and_return(value) }
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#- Copyright 2008 8th Light, Inc.
|
|
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_builder'
|
|
6
|
+
require 'limelight/theater'
|
|
7
|
+
|
|
8
|
+
describe Limelight::StageBuilder do
|
|
9
|
+
|
|
10
|
+
before(:each) do
|
|
11
|
+
@theater = Limelight::Theater.new
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should give no stages if empty" do
|
|
15
|
+
stages = Limelight::build_stages(@theater)
|
|
16
|
+
|
|
17
|
+
stages.should == []
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should build one stage" do
|
|
21
|
+
stages = Limelight::build_stages(@theater) do
|
|
22
|
+
stage "George"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
stages.length.should == 1
|
|
26
|
+
stages[0].name.should == "George"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should build multiple stages" do
|
|
30
|
+
stages = Limelight::build_stages(@theater) do
|
|
31
|
+
stage "George"
|
|
32
|
+
stage "Bill"
|
|
33
|
+
stage "Amy"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
stages.length.should == 3
|
|
37
|
+
stages[0].name.should == "George"
|
|
38
|
+
stages[1].name.should == "Bill"
|
|
39
|
+
stages[2].name.should == "Amy"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should allow the setting of stage properties" do
|
|
43
|
+
stages = Limelight::build_stages(@theater) do
|
|
44
|
+
stage "George" do
|
|
45
|
+
title "The Curious"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
stages.length.should == 1
|
|
50
|
+
stages[0].title.should == "The Curious"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "should raise an exception when setting an invalid property" do
|
|
54
|
+
lambda do
|
|
55
|
+
Limelight::build_stages(@theater) do
|
|
56
|
+
stage "George" do
|
|
57
|
+
blah "blah"
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end.should raise_error(Limelight::StageBuilderException, "'blah' is not a valid stage property")
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it "should add stages to the theater" do
|
|
64
|
+
stages = Limelight::build_stages(@theater) do
|
|
65
|
+
stage "George" do
|
|
66
|
+
title "The Curious"
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
@theater["George"].should == stages[0]
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "should add stages to the theater" do
|
|
74
|
+
stages = Limelight::build_stages(@theater) do
|
|
75
|
+
stage "George" do
|
|
76
|
+
title "The Curious"
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
stages = Limelight::build_stages(@theater) do
|
|
80
|
+
stage "George" do
|
|
81
|
+
title "The Monkey"
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
@theater.stages.length.should == 1
|
|
86
|
+
@theater["George"].title.should == "The Monkey"
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
end
|
|
90
|
+
|
data/spec/stage_spec.rb
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#- Copyright 2008 8th Light, Inc.
|
|
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
|
+
|
|
7
|
+
describe Limelight::Stage do
|
|
8
|
+
|
|
9
|
+
before(:each) do
|
|
10
|
+
@theater = make_mock("theater")
|
|
11
|
+
@stage = Limelight::Stage.new(@theater, "George")
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should have a name" do
|
|
15
|
+
stage = Limelight::Stage.new(@theater, "Jose")
|
|
16
|
+
stage.theater.should be(@theater)
|
|
17
|
+
stage.name.should == "Jose"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should have a title which default to it's name" do
|
|
21
|
+
@stage.title.should == "George"
|
|
22
|
+
|
|
23
|
+
@stage.title = "Once Upon a Test"
|
|
24
|
+
|
|
25
|
+
@stage.title.should == "Once Upon a Test"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should have size" do
|
|
29
|
+
@stage.size.should == [800, 800]
|
|
30
|
+
|
|
31
|
+
@stage.size = 123, 456
|
|
32
|
+
|
|
33
|
+
@stage.size.should == [123, 456]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "should have size" do
|
|
37
|
+
@stage.location.should == [200, 25]
|
|
38
|
+
|
|
39
|
+
@stage.location = 123, 456
|
|
40
|
+
|
|
41
|
+
@stage.location.should == [123, 456]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "should not allow name changes" do
|
|
45
|
+
lambda { @stage.name = "new name" }.should raise_error
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "should call scene.scene_opened at the end of opening a scene" do
|
|
49
|
+
scene = make_mock("scene", :visible= => nil)
|
|
50
|
+
scene.should_receive(:scene_opened)
|
|
51
|
+
|
|
52
|
+
@stage.frame.stub!(:open)
|
|
53
|
+
@stage.stub!(:load_scene)
|
|
54
|
+
@stage.open(scene)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|