mturk 1.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +2 -0
- data/.gemtest +0 -0
- data/History.md +105 -0
- data/LICENSE.txt +202 -0
- data/Manifest.txt +72 -0
- data/NOTICE.txt +4 -0
- data/README.md +100 -0
- data/Rakefile +33 -0
- data/bin/mturk +9 -0
- data/lib/amazon/util.rb +10 -0
- data/lib/amazon/util/binder.rb +48 -0
- data/lib/amazon/util/data_reader.rb +169 -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 +123 -0
- data/lib/amazon/webservices/mechanical_turk_requester.rb +285 -0
- data/lib/amazon/webservices/mturk/mechanical_turk_error_handler.rb +153 -0
- data/lib/amazon/webservices/mturk/question_generator.rb +58 -0
- data/lib/amazon/webservices/util/amazon_authentication_relay.rb +72 -0
- data/lib/amazon/webservices/util/command_line.rb +155 -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 +120 -0
- data/lib/amazon/webservices/util/soap_simplifier.rb +48 -0
- data/lib/amazon/webservices/util/soap_transport.rb +20 -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/mturk.rb +19 -0
- data/lib/mturk/version.rb +6 -0
- data/run_rcov.sh +1 -0
- data/samples/best_image/BestImage.rb +61 -0
- data/samples/best_image/best_image.properties +39 -0
- data/samples/best_image/best_image.question +82 -0
- data/samples/blank_slate/BlankSlate.rb +63 -0
- data/samples/blank_slate/BlankSlate_multithreaded.rb +67 -0
- data/samples/helloworld/MTurkHelloWorld.rb +56 -0
- data/samples/helloworld/mturk.yml +8 -0
- data/samples/review_policy/ReviewPolicy.rb +139 -0
- data/samples/review_policy/review_policy.question +30 -0
- data/samples/reviewer/Reviewer.rb +103 -0
- data/samples/reviewer/mturk.yml +8 -0
- data/samples/simple_survey/SimpleSurvey.rb +98 -0
- data/samples/simple_survey/simple_survey.question +30 -0
- data/samples/site_category/SiteCategory.rb +87 -0
- data/samples/site_category/externalpage.htm +71 -0
- data/samples/site_category/site_category.input +6 -0
- data/samples/site_category/site_category.properties +56 -0
- data/samples/site_category/site_category.question +9 -0
- data/test/mturk/test_changehittypeofhit.rb +130 -0
- data/test/mturk/test_error_handler.rb +403 -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_mturk.rb +21 -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 +99 -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 +55 -0
- data/test/unit/test_threadpool.rb +50 -0
- data/test/unit/test_user_data_store.rb +80 -0
- metadata +225 -0
- metadata.gz.sig +0 -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( 'mturk-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( 'mturk-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,99 @@
|
|
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
|
+
assert_not_nil unnest
|
48
|
+
unnest[:q] = 'p'
|
49
|
+
assert_equal cpy, @unnested
|
50
|
+
|
51
|
+
nest = @unnested.nest
|
52
|
+
assert_equal cpy, @unnested
|
53
|
+
assert_not_nil nest
|
54
|
+
nest['q'] = 'p'
|
55
|
+
assert_equal cpy, @unnested
|
56
|
+
|
57
|
+
@unnested.nest!
|
58
|
+
assert_equal @nested, @unnested
|
59
|
+
@unnested.unnest!
|
60
|
+
assert_equal cpy, @unnested
|
61
|
+
|
62
|
+
@unnested.nest!.unnest!
|
63
|
+
assert_equal cpy, @unnested
|
64
|
+
|
65
|
+
assert_equal cpy, @unnested.unnest!
|
66
|
+
|
67
|
+
cpy = @nested.dup
|
68
|
+
|
69
|
+
@nested.unnest!.nest!
|
70
|
+
assert_equal cpy, @nested
|
71
|
+
|
72
|
+
assert_equal cpy, @nested.nest!
|
73
|
+
end
|
74
|
+
|
75
|
+
def testChaining
|
76
|
+
assert_equal @unnested, @nested.unnest.unnest!.unnest
|
77
|
+
assert_equal @nested, @unnested.nest.nest!.nest
|
78
|
+
assert_equal @nested, @nested.unnest.unnest!.nest!.nest
|
79
|
+
assert_equal @unnested, @unnested.nest.nest!.unnest!.unnest
|
80
|
+
end
|
81
|
+
|
82
|
+
def testPrecedence
|
83
|
+
@hash['a'] = 'b'
|
84
|
+
@hash[:a] = 'c'
|
85
|
+
@hash[:z] = 'x'
|
86
|
+
@hash['z'] = 'y'
|
87
|
+
|
88
|
+
assert_equal 'c', @hash.nest['a']
|
89
|
+
assert_equal 'c', @hash.unnest[:a]
|
90
|
+
assert_equal 'x', @hash.nest['z']
|
91
|
+
assert_equal 'x', @hash.unnest[:z]
|
92
|
+
|
93
|
+
@hash['a'] = 'd'
|
94
|
+
|
95
|
+
assert_equal 'c', @hash.nest['a']
|
96
|
+
assert_equal 'c', @hash.unnest[:a]
|
97
|
+
end
|
98
|
+
|
99
|
+
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.to_a
|
30
|
+
assert_equal 4, @call_count
|
31
|
+
result = @simple_lazy.collect
|
32
|
+
assert_equal @simple_data.flatten, result.to_a
|
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
|
+
|