dbgrandi-ruby-aws 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +38 -0
- data/LICENSE.txt +202 -0
- data/Manifest.txt +69 -0
- data/NOTICE.txt +4 -0
- data/README.txt +105 -0
- data/Rakefile +20 -0
- data/bin/ruby-aws +9 -0
- data/lib/amazon/util.rb +10 -0
- data/lib/amazon/util/binder.rb +44 -0
- data/lib/amazon/util/data_reader.rb +157 -0
- data/lib/amazon/util/filter_chain.rb +79 -0
- data/lib/amazon/util/hash_nesting.rb +93 -0
- data/lib/amazon/util/lazy_results.rb +59 -0
- data/lib/amazon/util/logging.rb +23 -0
- data/lib/amazon/util/paginated_iterator.rb +70 -0
- data/lib/amazon/util/proactive_results.rb +116 -0
- data/lib/amazon/util/threadpool.rb +129 -0
- data/lib/amazon/util/user_data_store.rb +100 -0
- data/lib/amazon/webservices/mechanical_turk.rb +117 -0
- data/lib/amazon/webservices/mechanical_turk_requester.rb +261 -0
- data/lib/amazon/webservices/mturk/mechanical_turk_error_handler.rb +136 -0
- data/lib/amazon/webservices/mturk/question_generator.rb +58 -0
- data/lib/amazon/webservices/util/amazon_authentication_relay.rb +64 -0
- data/lib/amazon/webservices/util/command_line.rb +156 -0
- data/lib/amazon/webservices/util/convenience_wrapper.rb +90 -0
- data/lib/amazon/webservices/util/filter_proxy.rb +45 -0
- data/lib/amazon/webservices/util/mock_transport.rb +70 -0
- data/lib/amazon/webservices/util/request_signer.rb +42 -0
- data/lib/amazon/webservices/util/rest_transport.rb +108 -0
- data/lib/amazon/webservices/util/soap_simplifier.rb +48 -0
- data/lib/amazon/webservices/util/soap_transport.rb +38 -0
- data/lib/amazon/webservices/util/soap_transport_header_handler.rb +27 -0
- data/lib/amazon/webservices/util/unknown_result_exception.rb +27 -0
- data/lib/amazon/webservices/util/validation_exception.rb +55 -0
- data/lib/amazon/webservices/util/xml_simplifier.rb +61 -0
- data/lib/ruby-aws.rb +21 -0
- data/lib/ruby-aws/version.rb +8 -0
- data/samples/mturk/best_image/BestImage.rb +61 -0
- data/samples/mturk/best_image/best_image.properties +39 -0
- data/samples/mturk/best_image/best_image.question +82 -0
- data/samples/mturk/blank_slate/BlankSlate.rb +63 -0
- data/samples/mturk/blank_slate/BlankSlate_multithreaded.rb +67 -0
- data/samples/mturk/helloworld/MTurkHelloWorld.rb +56 -0
- data/samples/mturk/helloworld/mturk.yml +8 -0
- data/samples/mturk/reviewer/Reviewer.rb +103 -0
- data/samples/mturk/reviewer/mturk.yml +8 -0
- data/samples/mturk/simple_survey/SimpleSurvey.rb +90 -0
- data/samples/mturk/simple_survey/simple_survey.question +30 -0
- data/samples/mturk/site_category/SiteCategory.rb +87 -0
- data/samples/mturk/site_category/externalpage.htm +71 -0
- data/samples/mturk/site_category/site_category.input +6 -0
- data/samples/mturk/site_category/site_category.properties +45 -0
- data/samples/mturk/site_category/site_category.question +9 -0
- data/test/mturk/test_changehittypeofhit.rb +130 -0
- data/test/mturk/test_error_handler.rb +135 -0
- data/test/mturk/test_mechanical_turk_requester.rb +178 -0
- data/test/mturk/test_mock_mechanical_turk_requester.rb +205 -0
- data/test/test_ruby-aws.rb +22 -0
- data/test/unit/test_binder.rb +89 -0
- data/test/unit/test_data_reader.rb +135 -0
- data/test/unit/test_exceptions.rb +32 -0
- data/test/unit/test_hash_nesting.rb +93 -0
- data/test/unit/test_lazy_results.rb +89 -0
- data/test/unit/test_mock_transport.rb +132 -0
- data/test/unit/test_paginated_iterator.rb +58 -0
- data/test/unit/test_proactive_results.rb +108 -0
- data/test/unit/test_question_generator.rb +54 -0
- data/test/unit/test_threadpool.rb +50 -0
- data/test/unit/test_user_data_store.rb +80 -0
- metadata +158 -0
@@ -0,0 +1,135 @@
|
|
1
|
+
# Copyright:: Copyright (c) 2007 Amazon Technologies, Inc.
|
2
|
+
# License:: Apache License, Version 2.0
|
3
|
+
|
4
|
+
require 'tempfile'
|
5
|
+
require 'test/unit/testcase'
|
6
|
+
require 'amazon/util/data_reader'
|
7
|
+
|
8
|
+
class TestDataReader < Test::Unit::TestCase
|
9
|
+
include Amazon::Util
|
10
|
+
|
11
|
+
SAMPLE_LIST_DATA = [ { :a => 1, :b => { :c => 2, :d => 3 }, :e => [ {:f => 4, :g => 5}, {:f => "anew\nline", :g => 7} ] },
|
12
|
+
{ :a => 2, :b => { :c => 4, :d => "for fun" }, :e => [ {:f => 2, :g => 4}, {:f => 8, :g => 7} ] },
|
13
|
+
{ :a => 3, :b => { :c => "apples, oranges", :d => 1 }, :e => [ {:f => 2, :g => 3}, {:f => 9, :g => 6} ] }, ]
|
14
|
+
|
15
|
+
YAML_LIST_DATA = <<EOF
|
16
|
+
---
|
17
|
+
- :b:
|
18
|
+
:c: 2
|
19
|
+
:d: 3
|
20
|
+
:a: 1
|
21
|
+
:e:
|
22
|
+
- :f: 4
|
23
|
+
:g: 5
|
24
|
+
- :f: "anew\\nline"
|
25
|
+
:g: 7
|
26
|
+
- :b:
|
27
|
+
:c: 4
|
28
|
+
:d: for fun
|
29
|
+
:a: 2
|
30
|
+
:e:
|
31
|
+
- :f: 2
|
32
|
+
:g: 4
|
33
|
+
- :f: 8
|
34
|
+
:g: 7
|
35
|
+
- :b:
|
36
|
+
:c: apples, oranges
|
37
|
+
:d: 1
|
38
|
+
:a: 3
|
39
|
+
:e:
|
40
|
+
- :f: 2
|
41
|
+
:g: 3
|
42
|
+
- :f: 9
|
43
|
+
:g: 6
|
44
|
+
EOF
|
45
|
+
|
46
|
+
TABULAR_LIST_DATA = <<EOF
|
47
|
+
a b.c b.d e.1.f e.1.g e.2.f e.2.g
|
48
|
+
1 2 3 4 5 "anew
|
49
|
+
line" 7
|
50
|
+
2 4 "for fun" 2 4 8 7
|
51
|
+
3 apples, oranges 1 2 3 9 6
|
52
|
+
EOF
|
53
|
+
|
54
|
+
CSV_LIST_DATA = <<EOF
|
55
|
+
a,b.c,b.d,e.1.f,e.1.g,e.2.f,e.2.g
|
56
|
+
1,2,3,4,5,"anew
|
57
|
+
line",7
|
58
|
+
2,4,for fun,2,4,8,7
|
59
|
+
3,"apples, oranges",1,2,3,9,6
|
60
|
+
EOF
|
61
|
+
|
62
|
+
SAMPLE_PROPERTIES_DATA = { :a => 1, :b => { :c => 2, :d => 3 }, :e => 4, :f => "Such a complex, yet whimsical fancy" }
|
63
|
+
|
64
|
+
YAML_PROPERTIES_DATA = <<EOF
|
65
|
+
---
|
66
|
+
:b:
|
67
|
+
:c: 2
|
68
|
+
:d: 3
|
69
|
+
:a: 1
|
70
|
+
:e: 4
|
71
|
+
:f: Such a complex, yet whimsical fancy
|
72
|
+
EOF
|
73
|
+
|
74
|
+
PROP_PROPERTIES_DATA = <<EOF
|
75
|
+
b.c=2
|
76
|
+
b.d=3
|
77
|
+
a=1
|
78
|
+
e=4
|
79
|
+
f=Such a complex, yet whimsical fancy
|
80
|
+
EOF
|
81
|
+
|
82
|
+
include Amazon::Util
|
83
|
+
|
84
|
+
def saveAndLoad( raw, format, sample )
|
85
|
+
@tmp = Tempfile.new( 'ruby-aws-test')
|
86
|
+
@tmp << raw
|
87
|
+
@tmp.close
|
88
|
+
data = DataReader.load( @tmp.path, format )
|
89
|
+
assert_equal sample, data
|
90
|
+
end
|
91
|
+
|
92
|
+
def reloadCheck( format, data )
|
93
|
+
@tmp = Tempfile.new( 'ruby-aws-test')
|
94
|
+
@tmp.close
|
95
|
+
DataReader.save( @tmp.path, data, format )
|
96
|
+
restore = DataReader.load( @tmp.path, format )
|
97
|
+
assert_equal data, restore
|
98
|
+
end
|
99
|
+
|
100
|
+
def testReadYAML
|
101
|
+
saveAndLoad( YAML_LIST_DATA, :YAML, SAMPLE_LIST_DATA )
|
102
|
+
saveAndLoad( YAML_PROPERTIES_DATA, :YAML, SAMPLE_PROPERTIES_DATA )
|
103
|
+
end
|
104
|
+
|
105
|
+
def testReadProp
|
106
|
+
saveAndLoad( PROP_PROPERTIES_DATA, :Properties, SAMPLE_PROPERTIES_DATA )
|
107
|
+
end
|
108
|
+
|
109
|
+
def testReadTabular
|
110
|
+
saveAndLoad( TABULAR_LIST_DATA, :Tabular, SAMPLE_LIST_DATA )
|
111
|
+
end
|
112
|
+
|
113
|
+
def testReadCSV
|
114
|
+
saveAndLoad( CSV_LIST_DATA, :CSV, SAMPLE_LIST_DATA )
|
115
|
+
end
|
116
|
+
|
117
|
+
def testRestoreYAML
|
118
|
+
reloadCheck( :YAML, SAMPLE_LIST_DATA )
|
119
|
+
reloadCheck( :YAML, SAMPLE_PROPERTIES_DATA )
|
120
|
+
end
|
121
|
+
|
122
|
+
def testRestoreProp
|
123
|
+
reloadCheck( :Properties, SAMPLE_PROPERTIES_DATA )
|
124
|
+
end
|
125
|
+
|
126
|
+
def testRestoreTabular
|
127
|
+
reloadCheck( :Tabular, SAMPLE_LIST_DATA )
|
128
|
+
end
|
129
|
+
|
130
|
+
def testRestoreCSV
|
131
|
+
reloadCheck( :CSV, SAMPLE_LIST_DATA )
|
132
|
+
end
|
133
|
+
|
134
|
+
|
135
|
+
end # TestDataReader
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# Copyright:: Copyright (c) 2007 Amazon Technologies, Inc.
|
2
|
+
# License:: Apache License, Version 2.0
|
3
|
+
|
4
|
+
require 'test/unit/testcase'
|
5
|
+
require 'amazon/webservices/util/unknown_result_exception'
|
6
|
+
require 'amazon/webservices/util/validation_exception'
|
7
|
+
|
8
|
+
class TestExceptions < Test::Unit::TestCase
|
9
|
+
include Amazon::WebServices::Util
|
10
|
+
|
11
|
+
def testUnknownString
|
12
|
+
@methodName = :Method17
|
13
|
+
ex = UnknownResultException.new( RuntimeError.new('superRuntimeError'), @methodName, nil )
|
14
|
+
|
15
|
+
assert_equal "UnknownResultException: got superRuntimeError calling Method17", ex.to_s
|
16
|
+
end
|
17
|
+
|
18
|
+
def testValidationString
|
19
|
+
@result = { :OperationRequest => {:RequestId=>"aa718afb-a1f2-4812-9962-4058c20d75a8"},
|
20
|
+
:HIT => { :Request => { :IsValid=>"False",
|
21
|
+
:Errors => { :Error => { :Message => "your xml broke",
|
22
|
+
:Code => "AWS.MechanicalTurk.XMLParseError"}
|
23
|
+
}
|
24
|
+
}
|
25
|
+
}
|
26
|
+
}
|
27
|
+
ex = ValidationException.new( @result )
|
28
|
+
|
29
|
+
assert_equal "ValidationException: AWS.MechanicalTurk.XMLParseError", ex.to_s
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# Copyright:: Copyright (c) 2007 Amazon Technologies, Inc.
|
2
|
+
# License:: Apache License, Version 2.0
|
3
|
+
|
4
|
+
require 'test/unit/testcase'
|
5
|
+
require 'amazon/util/hash_nesting'
|
6
|
+
|
7
|
+
class TestHashNesting < Test::Unit::TestCase
|
8
|
+
include Amazon::Util
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@hash = {}.extend HashNesting
|
12
|
+
@nested = { 'a' => 'b', 'c.d' => 'e', 'c.f' => 'g', 'h.1.i' => 'j', 'h.2.k' => 'l' }.extend HashNesting
|
13
|
+
@unnested = { :a => 'b', :c => { :d => 'e', :f => 'g' }, :h => [ {:i => 'j'}, {:k => 'l'} ] }.extend HashNesting
|
14
|
+
end
|
15
|
+
|
16
|
+
def testSimpleNest
|
17
|
+
@hash[:a] = 'b'
|
18
|
+
@hash[:p] = { :q => 'r', :s => 't' }
|
19
|
+
@hash[:x] = [{:y => 'z'}, {:y => 'w'}]
|
20
|
+
nest = @hash.nest
|
21
|
+
assert_equal 'b', nest['a']
|
22
|
+
assert_equal 'r', nest['p.q']
|
23
|
+
assert_equal 't', nest['p.s']
|
24
|
+
assert_equal 'z', nest['x.1.y']
|
25
|
+
assert_equal 'w', nest['x.2.y']
|
26
|
+
assert_equal [], %w( a p.q p.s x.1.y x.2.y) - nest.keys
|
27
|
+
assert_equal [], nest.keys - %w( a p.q p.s x.1.y x.2.y)
|
28
|
+
end
|
29
|
+
|
30
|
+
def testSimpleUnnest
|
31
|
+
@hash['a'] = 'b'
|
32
|
+
@hash['p.q'] = 'r'
|
33
|
+
@hash['x.1.w'] = 'q'
|
34
|
+
@hash['x.2.w'] = 'z'
|
35
|
+
unnest = @hash.unnest
|
36
|
+
assert_equal 'b', unnest[:a]
|
37
|
+
assert_equal 'r', unnest[:p][:q]
|
38
|
+
assert_equal 'q', unnest[:x][0][:w]
|
39
|
+
assert_equal 'z', unnest[:x][1][:w]
|
40
|
+
end
|
41
|
+
|
42
|
+
def testMutability
|
43
|
+
cpy = @unnested.dup
|
44
|
+
|
45
|
+
unnest = @unnested.unnest
|
46
|
+
assert_equal cpy, @unnested
|
47
|
+
|
48
|
+
nest = @unnested.nest
|
49
|
+
assert_equal cpy, @unnested
|
50
|
+
|
51
|
+
@unnested.nest!
|
52
|
+
assert_equal @nested, @unnested
|
53
|
+
@unnested.unnest!
|
54
|
+
assert_equal cpy, @unnested
|
55
|
+
|
56
|
+
@unnested.nest!.unnest!
|
57
|
+
assert_equal cpy, @unnested
|
58
|
+
|
59
|
+
assert_equal cpy, @unnested.unnest!
|
60
|
+
|
61
|
+
cpy = @nested.dup
|
62
|
+
|
63
|
+
@nested.unnest!.nest!
|
64
|
+
assert_equal cpy, @nested
|
65
|
+
|
66
|
+
assert_equal cpy, @nested.nest!
|
67
|
+
end
|
68
|
+
|
69
|
+
def testChaining
|
70
|
+
assert_equal @unnested, @nested.unnest.unnest!.unnest
|
71
|
+
assert_equal @nested, @unnested.nest.nest!.nest
|
72
|
+
assert_equal @nested, @nested.unnest.unnest!.nest!.nest
|
73
|
+
assert_equal @unnested, @unnested.nest.nest!.unnest!.unnest
|
74
|
+
end
|
75
|
+
|
76
|
+
def testPrecedence
|
77
|
+
@hash['a'] = 'b'
|
78
|
+
@hash[:a] = 'c'
|
79
|
+
@hash[:z] = 'x'
|
80
|
+
@hash['z'] = 'y'
|
81
|
+
|
82
|
+
assert_equal 'c', @hash.nest['a']
|
83
|
+
assert_equal 'c', @hash.unnest[:a]
|
84
|
+
assert_equal 'x', @hash.nest['z']
|
85
|
+
assert_equal 'x', @hash.unnest[:z]
|
86
|
+
|
87
|
+
@hash['a'] = 'd'
|
88
|
+
|
89
|
+
assert_equal 'c', @hash.nest['a']
|
90
|
+
assert_equal 'c', @hash.unnest[:a]
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# Copyright:: Copyright (c) 2007 Amazon Technologies, Inc.
|
2
|
+
# License:: Apache License, Version 2.0
|
3
|
+
|
4
|
+
require 'test/unit/testcase'
|
5
|
+
require 'amazon/util/lazy_results'
|
6
|
+
|
7
|
+
class TestLazyResults < Test::Unit::TestCase
|
8
|
+
include Amazon::Util
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@call_count = 0
|
12
|
+
@simple_pagesize = 2
|
13
|
+
@simple_data_size = 6
|
14
|
+
@simple_data = [ [1,2],[3,4],[5,6] ]
|
15
|
+
@simple_lazy = LazyResults.new {|page| @call_count += 1 ; @simple_data[ page-1 ] }
|
16
|
+
end
|
17
|
+
|
18
|
+
def testBasic
|
19
|
+
assert_equal 0, @call_count
|
20
|
+
assert_equal @simple_data.flatten, @simple_lazy.to_a
|
21
|
+
assert_equal 4, @call_count
|
22
|
+
assert_equal @simple_data.flatten, @simple_lazy.to_a
|
23
|
+
assert_equal 4, @call_count
|
24
|
+
assert_equal Array, @simple_lazy.to_a.class
|
25
|
+
end
|
26
|
+
|
27
|
+
def testEnumerable
|
28
|
+
result = @simple_lazy.collect
|
29
|
+
assert_equal @simple_data.flatten, result
|
30
|
+
assert_equal 4, @call_count
|
31
|
+
result = @simple_lazy.collect
|
32
|
+
assert_equal @simple_data.flatten, result
|
33
|
+
assert_equal 4, @call_count
|
34
|
+
minus1 = @simple_lazy.collect {|i| i-1}
|
35
|
+
minus1.each_with_index {|i,n| assert_equal i, n }
|
36
|
+
evenodd = @simple_lazy.inject({:even => [],:odd => []}) {|a,num| a[ num % 2 == 0 ? :even : :odd ] << num ; a }
|
37
|
+
expected = {:even => [2,4,6], :odd => [1,3,5] }
|
38
|
+
assert_equal expected, evenodd
|
39
|
+
end
|
40
|
+
|
41
|
+
def testIncremental
|
42
|
+
count = 0
|
43
|
+
@simple_lazy.each { |value|
|
44
|
+
assert_equal count+1, value
|
45
|
+
assert_equal( (count / @simple_pagesize)+1, @call_count )
|
46
|
+
count += 1
|
47
|
+
}
|
48
|
+
assert_equal 4, @call_count
|
49
|
+
end
|
50
|
+
|
51
|
+
def testRandomAccess
|
52
|
+
assert_equal 4, @simple_lazy[3]
|
53
|
+
assert_equal 2, @call_count
|
54
|
+
assert_nil @simple_lazy[@simple_data_size]
|
55
|
+
assert_equal 4, @call_count
|
56
|
+
10.times do
|
57
|
+
index = rand(@simple_data_size+@simple_pagesize)
|
58
|
+
assert_equal( ( index >= @simple_data_size ? nil : index+1 ), @simple_lazy[index] )
|
59
|
+
end
|
60
|
+
assert_equal 4, @call_count
|
61
|
+
assert_equal @simple_data.flatten, @simple_lazy.to_a
|
62
|
+
end
|
63
|
+
|
64
|
+
def testFlush
|
65
|
+
@simple_lazy.to_a
|
66
|
+
@simple_lazy.to_a
|
67
|
+
assert_equal 4, @call_count
|
68
|
+
@simple_lazy.flush
|
69
|
+
@simple_lazy.to_a
|
70
|
+
assert_equal 8, @call_count
|
71
|
+
end
|
72
|
+
|
73
|
+
def testError
|
74
|
+
@picky_message = "picky picky picky"
|
75
|
+
@picky_lazy = LazyResults.new {|page| @call_count += 1 ; if page < 3 ; @simple_data[ page-1 ] ; else ; raise @picky_message ; end }
|
76
|
+
assert_equal 4, @picky_lazy[3]
|
77
|
+
e = assert_raises( RuntimeError ) { @picky_lazy[4] }
|
78
|
+
assert_equal @picky_message, e.message
|
79
|
+
end
|
80
|
+
|
81
|
+
def testImmutability
|
82
|
+
assert_equal 3, @simple_lazy[2]
|
83
|
+
a = @simple_lazy.to_a
|
84
|
+
assert_equal 3, a[2]
|
85
|
+
a[2] = 7
|
86
|
+
assert_equal 3, @simple_lazy[2]
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
# Copyright:: Copyright (c) 2007 Amazon Technologies, Inc.
|
2
|
+
# License:: Apache License, Version 2.0
|
3
|
+
|
4
|
+
require 'test/unit/testcase'
|
5
|
+
require 'amazon/webservices/util/mock_transport'
|
6
|
+
|
7
|
+
class TestMockTransport < Test::Unit::TestCase
|
8
|
+
include Amazon::WebServices::Util
|
9
|
+
|
10
|
+
SAMPLE_REQUEST = { :speed => :slow }
|
11
|
+
SAMPLE_ARGS = { :Auth => :fake, :Request => [SAMPLE_REQUEST] }
|
12
|
+
|
13
|
+
def setup
|
14
|
+
@mock = MockTransport.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def testBasic
|
18
|
+
result = @mock.dance SAMPLE_ARGS
|
19
|
+
|
20
|
+
assert result[:OperationRequest]
|
21
|
+
assert result[:MockResult]
|
22
|
+
assert_equal SAMPLE_REQUEST, result[:MockResult][:Request]
|
23
|
+
|
24
|
+
request = @mock.call_buffer[0]
|
25
|
+
assert request
|
26
|
+
assert request.args
|
27
|
+
assert request.request
|
28
|
+
assert_equal :dance, request.name
|
29
|
+
assert_equal SAMPLE_ARGS, request.args
|
30
|
+
assert_equal SAMPLE_REQUEST, request.request
|
31
|
+
end
|
32
|
+
|
33
|
+
def testListener
|
34
|
+
@a = []
|
35
|
+
log_listener = proc { |call| @a << call }
|
36
|
+
|
37
|
+
mock = MockTransport.new :MockListener => log_listener
|
38
|
+
mock.dance SAMPLE_ARGS
|
39
|
+
|
40
|
+
assert_equal 1, @a.size
|
41
|
+
assert_equal SAMPLE_REQUEST, @a.first.request
|
42
|
+
end
|
43
|
+
|
44
|
+
def testListenerInjection
|
45
|
+
injection_listener = proc {|call| {:Param => :Injected } }
|
46
|
+
|
47
|
+
mock = MockTransport.new :MockListener => injection_listener
|
48
|
+
result = mock.dance SAMPLE_ARGS
|
49
|
+
|
50
|
+
assert_equal :Injected, result[:Param], "Should have injected our parameter"
|
51
|
+
assert result[:MockResult], "Injection should not have precluded MockResult"
|
52
|
+
end
|
53
|
+
|
54
|
+
def testMockReply
|
55
|
+
result = @mock.dance SAMPLE_ARGS
|
56
|
+
@mock.mock_reply = {:Bogus => :Fun}
|
57
|
+
result2 = @mock.dance SAMPLE_ARGS
|
58
|
+
|
59
|
+
assert result[:MockResult]
|
60
|
+
assert_nil result2[:MockResult]
|
61
|
+
|
62
|
+
assert_nil result[:Bogus]
|
63
|
+
assert result2[:Bogus]
|
64
|
+
end
|
65
|
+
|
66
|
+
def testEnumerable
|
67
|
+
|
68
|
+
# should start out with empty buffer
|
69
|
+
calls = @mock.collect { |call| call.name }
|
70
|
+
assert_equal [], calls
|
71
|
+
|
72
|
+
# now generate 3 calls
|
73
|
+
@mock.dance SAMPLE_ARGS
|
74
|
+
@mock.fall SAMPLE_ARGS
|
75
|
+
@mock.sing SAMPLE_ARGS
|
76
|
+
|
77
|
+
# ensure we got all 3 args in proper order
|
78
|
+
calls = @mock.collect { |call| call.name }
|
79
|
+
assert_equal [:dance,:fall,:sing], calls
|
80
|
+
|
81
|
+
# should be repeatable
|
82
|
+
calls = @mock.collect { |call| call.name }
|
83
|
+
assert_equal [:dance,:fall,:sing], calls
|
84
|
+
|
85
|
+
# now flush the buffer and ensure it's empty again
|
86
|
+
@mock.flush
|
87
|
+
calls = @mock.collect { |call| call.name }
|
88
|
+
assert_equal [], calls
|
89
|
+
end
|
90
|
+
|
91
|
+
def testNext
|
92
|
+
|
93
|
+
# should start out with empty buffer
|
94
|
+
assert_nil @mock.next
|
95
|
+
|
96
|
+
# make a call
|
97
|
+
@mock.dance SAMPLE_ARGS
|
98
|
+
|
99
|
+
# call shows up with #next
|
100
|
+
n = @mock.next
|
101
|
+
assert_equal :dance, n.name
|
102
|
+
|
103
|
+
# should only have been one call in the buffer
|
104
|
+
assert_nil @mock.next
|
105
|
+
|
106
|
+
# two more calls
|
107
|
+
@mock.fall SAMPLE_ARGS
|
108
|
+
@mock.sing SAMPLE_ARGS
|
109
|
+
|
110
|
+
# ensure we get them in proper order
|
111
|
+
assert_equal :fall, @mock.next.name
|
112
|
+
assert_equal :sing, @mock.next.name
|
113
|
+
|
114
|
+
# and we should have no more
|
115
|
+
assert_nil @mock.next
|
116
|
+
|
117
|
+
# after flushing, we should still have none
|
118
|
+
@mock.flush
|
119
|
+
assert_nil @mock.next
|
120
|
+
|
121
|
+
# add one more call
|
122
|
+
@mock.smile SAMPLE_ARGS
|
123
|
+
|
124
|
+
# we should have just one queued up now
|
125
|
+
assert_equal :smile, @mock.next.name
|
126
|
+
assert_nil @mock.next
|
127
|
+
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
|
132
|
+
|