kolach-melomel 0.6.4
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/CHANGELOG +35 -0
- data/README.md +58 -0
- data/lib/melomel.rb +48 -0
- data/lib/melomel/bridge.rb +76 -0
- data/lib/melomel/bridge/messaging.rb +252 -0
- data/lib/melomel/bridge/ui.rb +155 -0
- data/lib/melomel/cucumber.rb +150 -0
- data/lib/melomel/cucumber/alert_steps.rb +40 -0
- data/lib/melomel/cucumber/button_steps.rb +17 -0
- data/lib/melomel/cucumber/color_picker_steps.rb +18 -0
- data/lib/melomel/cucumber/data_grid_steps.rb +83 -0
- data/lib/melomel/cucumber/date_steps.rb +22 -0
- data/lib/melomel/cucumber/list_steps.rb +30 -0
- data/lib/melomel/cucumber/slider_steps.rb +20 -0
- data/lib/melomel/cucumber/text_steps.rb +26 -0
- data/lib/melomel/date.rb +19 -0
- data/lib/melomel/error.rb +43 -0
- data/lib/melomel/flex.rb +46 -0
- data/lib/melomel/object_proxy.rb +94 -0
- data/lib/melomel/version.rb +3 -0
- data/lib/object.rb +30 -0
- data/test/helper.rb +28 -0
- data/test/sandbox.rb +14 -0
- data/test/test_bridge.rb +61 -0
- data/test/test_integration.rb +71 -0
- data/test/test_messaging.rb +109 -0
- data/test/test_object_proxy.rb +43 -0
- data/test/test_ui.rb +59 -0
- metadata +148 -0
@@ -0,0 +1,71 @@
|
|
1
|
+
require File.join(File.dirname(File.expand_path(__FILE__)), *%w[helper])
|
2
|
+
|
3
|
+
class IntegrationTestCase < RunnerTestCase
|
4
|
+
def setup
|
5
|
+
start_runner
|
6
|
+
Melomel.connect()
|
7
|
+
end
|
8
|
+
|
9
|
+
def teardown
|
10
|
+
stop_runner
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_get_application_name
|
14
|
+
app = Melomel.get_class('mx.core.FlexGlobals')
|
15
|
+
assert_equal 'Melomel Runner', app.topLevelApplication.name
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_should_get_property
|
19
|
+
runner = Melomel.get_class('MelomelRunner')
|
20
|
+
assert_equal 'bar', runner.foo
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_should_get_missing_property_as_nil
|
24
|
+
app = Melomel.get_class('mx.core.FlexGlobals').topLevelApplication
|
25
|
+
assert_nil app.no_such_property
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_should_throw_error_when_getting_missing_instance_property!
|
29
|
+
app = Melomel.get_class('mx.core.FlexGlobals').topLevelApplication
|
30
|
+
assert_raises Melomel::Error do
|
31
|
+
app.no_such_property!
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_should_throw_error_when_getting_missing_static_property!
|
36
|
+
runner = Melomel.get_class('MelomelRunner')
|
37
|
+
assert_raises Melomel::Error do
|
38
|
+
runner.no_such_property!
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Tests the ability for a get_property to call a no-arg method if unavailable.
|
43
|
+
def test_should_get_property_passthrough
|
44
|
+
app = Melomel.get_class('mx.core.FlexGlobals').topLevelApplication
|
45
|
+
assert_equal 'ok', app.test()
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_should_set_property
|
49
|
+
runner = Melomel.get_class('MelomelRunner')
|
50
|
+
runner.name = 'Susy'
|
51
|
+
assert_equal 'Susy', runner.name
|
52
|
+
runner.name = 'John'
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_should_invoke_method
|
56
|
+
runner = Melomel.get_class('MelomelRunner')
|
57
|
+
assert_equal 'Hello, John', runner.hello('John')
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_should_create_object
|
61
|
+
point = Melomel.create_object('flash.geom.Point')
|
62
|
+
point.x = 30
|
63
|
+
point.y = 40
|
64
|
+
assert_equal 50, point.length
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_should_invoke_function
|
68
|
+
result = Melomel.invoke_function('flash.utils.getQualifiedClassName', 'Some string.')
|
69
|
+
assert_equal 'String', result
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require File.join(File.dirname(File.expand_path(__FILE__)), *%w[helper])
|
2
|
+
|
3
|
+
class MessagingTestCase < MiniTest::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@bridge = Melomel::Bridge.new('localhost', 10101)
|
6
|
+
end
|
7
|
+
|
8
|
+
|
9
|
+
#############################################################################
|
10
|
+
#
|
11
|
+
# Message Parsing
|
12
|
+
#
|
13
|
+
#############################################################################
|
14
|
+
|
15
|
+
def test_should_parse_null
|
16
|
+
message = '<return dataType="null"/>'
|
17
|
+
assert_nil @bridge.parse_message_value(Nokogiri::XML(message).root)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_should_parse_integer
|
21
|
+
message = '<return value="12" dataType="int"/>'
|
22
|
+
assert_equal 12, @bridge.parse_message_value(Nokogiri::XML(message).root)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_should_parse_float
|
26
|
+
message = '<return value="100.12" dataType="float"/>'
|
27
|
+
assert_equal 100.12, @bridge.parse_message_value(Nokogiri::XML(message).root)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_should_parse_boolean_true
|
31
|
+
message = '<return value="true" dataType="boolean"/>'
|
32
|
+
assert_equal true, @bridge.parse_message_value(Nokogiri::XML(message).root)
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_should_parse_boolean_false
|
36
|
+
message = '<return value="false" dataType="boolean"/>'
|
37
|
+
assert_equal false, @bridge.parse_message_value(Nokogiri::XML(message).root)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_should_parse_string
|
41
|
+
message = '<return value="foo" dataType="string"/>'
|
42
|
+
assert_equal 'foo', @bridge.parse_message_value(Nokogiri::XML(message).root)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_should_parse_object_proxy
|
46
|
+
message = '<return value="123" dataType="object"/>'
|
47
|
+
proxy = @bridge.parse_message_value(Nokogiri::XML(message).root)
|
48
|
+
assert_instance_of Melomel::ObjectProxy, proxy
|
49
|
+
assert_equal 123, proxy.proxy_id
|
50
|
+
assert_equal @bridge, proxy.bridge
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_should_throw_error_parsing_unknown_type
|
54
|
+
message = '<return value="foo" dataType="unknown_type"/>'
|
55
|
+
assert_raises Melomel::UnrecognizedTypeError do
|
56
|
+
@bridge.parse_message_value(Nokogiri::XML(message).root)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
#############################################################################
|
62
|
+
#
|
63
|
+
# Message Formatting
|
64
|
+
#
|
65
|
+
#############################################################################
|
66
|
+
|
67
|
+
def test_should_format_nil
|
68
|
+
xml = Nokogiri::XML('<root/>').root
|
69
|
+
@bridge.format_message_value(xml, nil)
|
70
|
+
assert_equal '<root dataType="null"/>', xml.to_s
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_should_format_integer
|
74
|
+
xml = Nokogiri::XML('<root/>').root
|
75
|
+
@bridge.format_message_value(xml, 12)
|
76
|
+
assert_equal '<root value="12" dataType="int"/>', xml.to_s
|
77
|
+
end
|
78
|
+
|
79
|
+
def should_format_float
|
80
|
+
xml = Nokogiri::XML('<root/>').root
|
81
|
+
@bridge.format_message_value(xml, 100.12)
|
82
|
+
assert_equal '<root value="100.12" dataType="float"/>', xml.to_s
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_should_format_boolean_true
|
86
|
+
xml = Nokogiri::XML('<root/>').root
|
87
|
+
@bridge.format_message_value(xml, true)
|
88
|
+
assert_equal '<root value="true" dataType="boolean"/>', xml.to_s
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_should_format_boolean_false
|
92
|
+
xml = Nokogiri::XML('<root/>').root
|
93
|
+
@bridge.format_message_value(xml, false)
|
94
|
+
assert_equal '<root value="false" dataType="boolean"/>', xml.to_s
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_should_format_string
|
98
|
+
xml = Nokogiri::XML('<root/>').root
|
99
|
+
@bridge.format_message_value(xml, 'foo')
|
100
|
+
assert_equal '<root value="foo" dataType="string"/>', xml.to_s
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_should_format_object
|
104
|
+
proxy = Melomel::ObjectProxy.new(@bridge, 123)
|
105
|
+
xml = Nokogiri::XML('<root/>').root
|
106
|
+
@bridge.format_message_value(xml, proxy)
|
107
|
+
assert_equal '<root value="123" dataType="object"/>', xml.to_s
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.join(File.dirname(File.expand_path(__FILE__)), *%w[helper])
|
2
|
+
|
3
|
+
class ObjectProxyTestCase < MiniTest::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@bridge = mock()
|
6
|
+
@proxy = Melomel::ObjectProxy.new(@bridge, 123)
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_should_delegate_to_bridge_to_retrieve_property
|
10
|
+
@bridge.expects(:get_property).with(123, 'foo')
|
11
|
+
@proxy.get_property('foo')
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_should_delegate_to_bridge_to_set_property
|
15
|
+
@bridge.expects(:set_property).with(123, 'foo', 'bar')
|
16
|
+
@proxy.set_property('foo', 'bar')
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_should_delegate_to_bridge_to_invoke_method
|
20
|
+
@bridge.expects(:invoke_method).with(123, 'foo', 'bar', 'baz')
|
21
|
+
@proxy.invoke_method('foo', 'bar', 'baz')
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_should_alias_invoke_to_invoke_method
|
25
|
+
@bridge.expects(:invoke_method).with(123, 'foo')
|
26
|
+
@proxy.invoke('foo')
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_should_alias_accessors_to_get_property_method
|
30
|
+
@proxy.expects(:get_property).with('foo')
|
31
|
+
@proxy.foo
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_should_alias_mutators_to_set_property_method
|
35
|
+
@proxy.expects(:set_property).with('foo', 'bar')
|
36
|
+
@proxy.foo = 'bar'
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_should_alias_methods_with_arguments_to_invoke_method
|
40
|
+
@proxy.expects(:invoke_method).with('foo', 'bar', 'baz')
|
41
|
+
@proxy.foo('bar', 'baz')
|
42
|
+
end
|
43
|
+
end
|
data/test/test_ui.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
require File.join(File.dirname(File.expand_path(__FILE__)), *%w[helper])
|
2
|
+
|
3
|
+
class IntegrationTestCase < RunnerTestCase
|
4
|
+
def setup
|
5
|
+
start_runner
|
6
|
+
Melomel.connect()
|
7
|
+
end
|
8
|
+
|
9
|
+
def teardown
|
10
|
+
stop_runner
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_should_find_list_of_labels_named_foo
|
14
|
+
labels = Melomel.find_all('spark.components.Label', :name => 'foo')
|
15
|
+
assert_equal 3, labels.length
|
16
|
+
end
|
17
|
+
|
18
|
+
def should_find_text_input
|
19
|
+
text_input = Melomel.find('spark.components.TextInput', :id => 'nameTextInput')
|
20
|
+
assert_equal 'nameTextField', text_input.name
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
def test_should_click_button
|
25
|
+
button = Melomel.find('spark.components.Button', :id => 'clickButton')
|
26
|
+
label = Melomel.find('spark.components.Label', :id => 'clickLabel')
|
27
|
+
Melomel.click(button)
|
28
|
+
assert_equal 'Hello!', label.text
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_should_double_click_the_button
|
32
|
+
button = Melomel.find('spark.components.Button', :id => 'doubleClickButton')
|
33
|
+
label = Melomel.find('spark.components.Label', :id => 'doubleClickLabel')
|
34
|
+
Melomel.double_click(button)
|
35
|
+
assert_equal 'Hello Hello!', label.text
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
def test_should_press_key_down
|
40
|
+
text_input = Melomel.find('spark.components.TextInput', :id => 'keyDownTextInput')
|
41
|
+
label = Melomel.find('spark.components.Label', :id => 'keyDownLabel')
|
42
|
+
Melomel.key_down(text_input, 'a')
|
43
|
+
assert_equal 'a', label.text
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_should_release_key_up
|
47
|
+
text_input = Melomel.find('spark.components.TextInput', :id => 'keyUpTextInput')
|
48
|
+
label = Melomel.find('spark.components.Label', :id => 'keyUpLabel')
|
49
|
+
Melomel.key_up(text_input, 'b')
|
50
|
+
assert_equal 'b', label.text
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_should_press_key
|
54
|
+
text_input = Melomel.find('spark.components.TextInput', :id => 'keyPressTextInput')
|
55
|
+
label = Melomel.find('spark.components.Label', :id => 'keyPressLabel')
|
56
|
+
Melomel.key_press(text_input, 'a')
|
57
|
+
assert_equal 'du', label.text
|
58
|
+
end
|
59
|
+
end
|
metadata
ADDED
@@ -0,0 +1,148 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: kolach-melomel
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 15
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 6
|
9
|
+
- 4
|
10
|
+
version: 0.6.4
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Ben Johnson, nick chistyakov
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-12-16 00:00:00 +03:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
23
|
+
none: false
|
24
|
+
requirements:
|
25
|
+
- - ~>
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
hash: 1
|
28
|
+
segments:
|
29
|
+
- 1
|
30
|
+
- 4
|
31
|
+
- 3
|
32
|
+
version: 1.4.3
|
33
|
+
name: nokogiri
|
34
|
+
requirement: *id001
|
35
|
+
prerelease: false
|
36
|
+
type: :runtime
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 11
|
44
|
+
segments:
|
45
|
+
- 1
|
46
|
+
- 7
|
47
|
+
- 0
|
48
|
+
version: 1.7.0
|
49
|
+
name: minitest
|
50
|
+
requirement: *id002
|
51
|
+
prerelease: false
|
52
|
+
type: :development
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ~>
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 43
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
- 9
|
63
|
+
- 8
|
64
|
+
version: 0.9.8
|
65
|
+
name: mocha
|
66
|
+
requirement: *id003
|
67
|
+
prerelease: false
|
68
|
+
type: :development
|
69
|
+
description:
|
70
|
+
email:
|
71
|
+
- chikolad@gmail.com
|
72
|
+
executables: []
|
73
|
+
|
74
|
+
extensions: []
|
75
|
+
|
76
|
+
extra_rdoc_files: []
|
77
|
+
|
78
|
+
files:
|
79
|
+
- lib/melomel/bridge/messaging.rb
|
80
|
+
- lib/melomel/bridge/ui.rb
|
81
|
+
- lib/melomel/bridge.rb
|
82
|
+
- lib/melomel/cucumber/alert_steps.rb
|
83
|
+
- lib/melomel/cucumber/button_steps.rb
|
84
|
+
- lib/melomel/cucumber/color_picker_steps.rb
|
85
|
+
- lib/melomel/cucumber/data_grid_steps.rb
|
86
|
+
- lib/melomel/cucumber/date_steps.rb
|
87
|
+
- lib/melomel/cucumber/list_steps.rb
|
88
|
+
- lib/melomel/cucumber/slider_steps.rb
|
89
|
+
- lib/melomel/cucumber/text_steps.rb
|
90
|
+
- lib/melomel/cucumber.rb
|
91
|
+
- lib/melomel/date.rb
|
92
|
+
- lib/melomel/error.rb
|
93
|
+
- lib/melomel/flex.rb
|
94
|
+
- lib/melomel/object_proxy.rb
|
95
|
+
- lib/melomel/version.rb
|
96
|
+
- lib/melomel.rb
|
97
|
+
- lib/object.rb
|
98
|
+
- README.md
|
99
|
+
- CHANGELOG
|
100
|
+
- test/helper.rb
|
101
|
+
- test/sandbox.rb
|
102
|
+
- test/test_bridge.rb
|
103
|
+
- test/test_integration.rb
|
104
|
+
- test/test_messaging.rb
|
105
|
+
- test/test_object_proxy.rb
|
106
|
+
- test/test_ui.rb
|
107
|
+
has_rdoc: true
|
108
|
+
homepage: http://github.com/kolach/melomel.rb
|
109
|
+
licenses: []
|
110
|
+
|
111
|
+
post_install_message:
|
112
|
+
rdoc_options: []
|
113
|
+
|
114
|
+
require_paths:
|
115
|
+
- lib
|
116
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
hash: 3
|
122
|
+
segments:
|
123
|
+
- 0
|
124
|
+
version: "0"
|
125
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
126
|
+
none: false
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
hash: 3
|
131
|
+
segments:
|
132
|
+
- 0
|
133
|
+
version: "0"
|
134
|
+
requirements: []
|
135
|
+
|
136
|
+
rubyforge_project:
|
137
|
+
rubygems_version: 1.3.7
|
138
|
+
signing_key:
|
139
|
+
specification_version: 3
|
140
|
+
summary: A Fork of Ben Johnson Ruby interface to Melomel
|
141
|
+
test_files:
|
142
|
+
- test/helper.rb
|
143
|
+
- test/sandbox.rb
|
144
|
+
- test/test_bridge.rb
|
145
|
+
- test/test_integration.rb
|
146
|
+
- test/test_messaging.rb
|
147
|
+
- test/test_object_proxy.rb
|
148
|
+
- test/test_ui.rb
|