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,178 @@
|
|
1
|
+
# Copyright:: Copyright (c) 2007 Amazon Technologies, Inc.
|
2
|
+
# License:: Apache License, Version 2.0
|
3
|
+
|
4
|
+
require 'test/unit/testcase'
|
5
|
+
require 'ruby-aws'
|
6
|
+
require 'amazon/webservices/mturk/question_generator'
|
7
|
+
require 'amazon/webservices/util/soap_transport'
|
8
|
+
require 'amazon/webservices/util/rest_transport'
|
9
|
+
|
10
|
+
# Allow user to skip these tests by setting the DISABLE_MTURK_SANDBOX_TEST environment variable
|
11
|
+
if ENV['DISABLE_MTURK_SANDBOX_TEST'].nil?
|
12
|
+
|
13
|
+
class TestMechanicalTurkRequester < Test::Unit::TestCase
|
14
|
+
include Amazon::WebServices
|
15
|
+
|
16
|
+
def setup
|
17
|
+
# Setting up the default requester interface.
|
18
|
+
# This will default to running against Sandbox, but we'll the host explicitly for safety.
|
19
|
+
# Access Key ID and Secret Access Key will be loaded from user preference file
|
20
|
+
# If not found, the user will be interatively queried for their authentication information.
|
21
|
+
@@mturk ||= MechanicalTurkRequester.new( :Host => :Sandbox )
|
22
|
+
|
23
|
+
# utilize the SOAP transport, if we can
|
24
|
+
@@mturk_soap ||= MechanicalTurkRequester.new( :Host => :Sandbox, :Transport => :SOAP ) if Util::SOAPTransport.canSOAP?
|
25
|
+
# utilize the REST transport with default HTTP method
|
26
|
+
@@mturk_rest ||= MechanicalTurkRequester.new( :Host => :Sandbox, :Transport => :REST )
|
27
|
+
# utilize the REST transport via Get
|
28
|
+
@@mturk_rest_get ||= MechanicalTurkRequester.new( :Host => :Sandbox, :Transport => :REST, :RestStyle => :Get )
|
29
|
+
# utilize the REST transport via Post, if we can
|
30
|
+
@@mturk_rest_post ||= MechanicalTurkRequester.new( :Host => :Sandbox, :Transport => :REST, :RestStyle => :Post ) if Util::RESTTransport.canPost?
|
31
|
+
end
|
32
|
+
|
33
|
+
def testAvailableFunds
|
34
|
+
funds = @@mturk.availableFunds
|
35
|
+
assert_equal 10000.0, funds, "Sandbox should always show 10k available funds"
|
36
|
+
end
|
37
|
+
|
38
|
+
def testCreateHIT
|
39
|
+
question = MTurk::QuestionGenerator.build { |q| q.ask 'Have you tried Ruby?' }
|
40
|
+
result = @@mturk.createHIT :Title => 'Ruby SDK Test Hit',
|
41
|
+
:Description => 'Autogenerated hit from ruby-aws test cases',
|
42
|
+
:Keywords => 'Ruby, test, SDK',
|
43
|
+
:Reward => { :Amount => 23.44, :CurrencyCode => 'USD' },
|
44
|
+
:Question => question
|
45
|
+
assert_not_nil( result[:HITId] )
|
46
|
+
@@mturk.forceExpireHIT( :HITId => result[:HITId] )
|
47
|
+
@@mturk.disposeHIT( :HITId => result[:HITId] )
|
48
|
+
end
|
49
|
+
|
50
|
+
def testCreateHITFailure
|
51
|
+
begin
|
52
|
+
result = @@mturk.createHIT :Title => 'Ruby SDK Test Hit',
|
53
|
+
:Description => 'Autogenerated hit from ruby-aws test cases',
|
54
|
+
:Keywords => 'Ruby, test, SDK',
|
55
|
+
:Reward => { :Amount => 23.44, :CurrencyCode => 'USD' },
|
56
|
+
:Question => "Invalid Question"
|
57
|
+
fail "Mechanical Turk should have thrown an exception"
|
58
|
+
rescue => e
|
59
|
+
raise e unless e.is_a?( Util::ValidationException )
|
60
|
+
assert_equal "AWS.MechanicalTurk.XMLParseError", e.message
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
if Util::SOAPTransport.canSOAP?
|
65
|
+
|
66
|
+
def testSOAPCreateHIT
|
67
|
+
question = MTurk::QuestionGenerator.build { |q| q.ask 'Have you tried Ruby?' }
|
68
|
+
result = @@mturk_soap.createHIT :Title => 'Ruby SDK Test Hit',
|
69
|
+
:Description => 'Autogenerated hit from ruby-aws test cases',
|
70
|
+
:Keywords => 'Ruby, test, SDK',
|
71
|
+
:Reward => { :Amount => 23.44, :CurrencyCode => 'USD' },
|
72
|
+
:Question => question
|
73
|
+
assert_not_nil( result[:HITId] )
|
74
|
+
@@mturk_soap.forceExpireHIT( :HITId => result[:HITId] )
|
75
|
+
@@mturk_soap.disposeHIT( :HITId => result[:HITId] )
|
76
|
+
end
|
77
|
+
|
78
|
+
def testSOAPCreateHITFailure
|
79
|
+
begin
|
80
|
+
result = @@mturk_soap.createHIT :Title => 'Ruby SDK Test Hit',
|
81
|
+
:Description => 'Autogenerated hit from ruby-aws test cases',
|
82
|
+
:Keywords => 'Ruby, test, SDK',
|
83
|
+
:Reward => { :Amount => 23.44, :CurrencyCode => 'USD' },
|
84
|
+
:Question => "Invalid Question"
|
85
|
+
fail "Mechanical Turk should have thrown an exception"
|
86
|
+
rescue => e
|
87
|
+
raise e unless e.is_a?( Util::ValidationException )
|
88
|
+
assert_equal "AWS.MechanicalTurk.XMLParseError", e.message
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
end # if Util::SOAPTransport.canSOAP?
|
93
|
+
|
94
|
+
def testRESTCreateHIT
|
95
|
+
question = MTurk::QuestionGenerator.build { |q| q.ask 'Have you tried Ruby?' }
|
96
|
+
result = @@mturk_rest.createHIT :Title => 'Ruby SDK Test Hit',
|
97
|
+
:Description => 'Autogenerated hit from ruby-aws test cases',
|
98
|
+
:Keywords => 'Ruby, test, SDK',
|
99
|
+
:Reward => { :Amount => 23.44, :CurrencyCode => 'USD' },
|
100
|
+
:Question => question
|
101
|
+
assert_not_nil( result[:HITId] )
|
102
|
+
@@mturk_rest.forceExpireHIT( :HITId => result[:HITId] )
|
103
|
+
@@mturk_rest.disposeHIT( :HITId => result[:HITId] )
|
104
|
+
end
|
105
|
+
|
106
|
+
def testRESTCreateHITFailure
|
107
|
+
begin
|
108
|
+
result = @@mturk_rest.createHIT :Title => 'Ruby SDK Test Hit',
|
109
|
+
:Description => 'Autogenerated hit from ruby-aws test cases',
|
110
|
+
:Keywords => 'Ruby, test, SDK',
|
111
|
+
:Reward => { :Amount => 23.44, :CurrencyCode => 'USD' },
|
112
|
+
:Question => "Invalid Question"
|
113
|
+
fail "Mechanical Turk should have thrown an exception"
|
114
|
+
rescue => e
|
115
|
+
raise e unless e.is_a?( Util::ValidationException )
|
116
|
+
assert_equal "AWS.MechanicalTurk.XMLParseError", e.message
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def testGetRESTCreateHIT
|
121
|
+
question = MTurk::QuestionGenerator.build { |q| q.ask 'Have you tried Ruby?' }
|
122
|
+
result = @@mturk_rest_get.createHIT :Title => 'Ruby SDK Test Hit',
|
123
|
+
:Description => 'Autogenerated hit from ruby-aws test cases',
|
124
|
+
:Keywords => 'Ruby, test, SDK',
|
125
|
+
:Reward => { :Amount => 23.44, :CurrencyCode => 'USD' },
|
126
|
+
:Question => question
|
127
|
+
assert_not_nil( result[:HITId] )
|
128
|
+
@@mturk_rest_get.forceExpireHIT( :HITId => result[:HITId] )
|
129
|
+
@@mturk_rest_get.disposeHIT( :HITId => result[:HITId] )
|
130
|
+
end
|
131
|
+
|
132
|
+
def testGetRESTCreateHITFailure
|
133
|
+
begin
|
134
|
+
result = @@mturk_rest_get.createHIT :Title => 'Ruby SDK Test Hit',
|
135
|
+
:Description => 'Autogenerated hit from ruby-aws test cases',
|
136
|
+
:Keywords => 'Ruby, test, SDK',
|
137
|
+
:Reward => { :Amount => 23.44, :CurrencyCode => 'USD' },
|
138
|
+
:Question => "Invalid Question"
|
139
|
+
fail "Mechanical Turk should have thrown an exception"
|
140
|
+
rescue => e
|
141
|
+
raise e unless e.is_a?( Util::ValidationException )
|
142
|
+
assert_equal "AWS.MechanicalTurk.XMLParseError", e.message
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
if Util::RESTTransport.canPost?
|
147
|
+
|
148
|
+
def testPostRESTCreateHIT
|
149
|
+
question = MTurk::QuestionGenerator.build { |q| q.ask 'Have you tried Ruby?' }
|
150
|
+
result = @@mturk_rest_post.createHIT :Title => 'Ruby SDK Test Hit',
|
151
|
+
:Description => 'Autogenerated hit from ruby-aws test cases',
|
152
|
+
:Keywords => 'Ruby, test, SDK',
|
153
|
+
:Reward => { :Amount => 23.44, :CurrencyCode => 'USD' },
|
154
|
+
:Question => question
|
155
|
+
assert_not_nil( result[:HITId] )
|
156
|
+
@@mturk_rest_post.forceExpireHIT( :HITId => result[:HITId] )
|
157
|
+
@@mturk_rest_post.disposeHIT( :HITId => result[:HITId] )
|
158
|
+
end
|
159
|
+
|
160
|
+
def testPostRESTCreateHITFailure
|
161
|
+
begin
|
162
|
+
result = @@mturk_rest_post.createHIT :Title => 'Ruby SDK Test Hit',
|
163
|
+
:Description => 'Autogenerated hit from ruby-aws test cases',
|
164
|
+
:Keywords => 'Ruby, test, SDK',
|
165
|
+
:Reward => { :Amount => 23.44, :CurrencyCode => 'USD' },
|
166
|
+
:Question => "Invalid Question"
|
167
|
+
fail "Mechanical Turk should have thrown an exception"
|
168
|
+
rescue => e
|
169
|
+
raise e unless e.is_a?( Util::ValidationException )
|
170
|
+
assert_equal "AWS.MechanicalTurk.XMLParseError", e.message
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
end # if Util::RESTTransport.canPost?
|
175
|
+
|
176
|
+
end
|
177
|
+
|
178
|
+
end # if not DISABLE_MTURK_SANDBOX_TEST
|
@@ -0,0 +1,205 @@
|
|
1
|
+
# Copyright:: Copyright (c) 2007 Amazon Technologies, Inc.
|
2
|
+
# License:: Apache License, Version 2.0
|
3
|
+
|
4
|
+
require 'test/unit/testcase'
|
5
|
+
require 'ruby-aws'
|
6
|
+
require 'amazon/webservices/util/mock_transport'
|
7
|
+
|
8
|
+
class TestMockMechanicalTurkRequester < Test::Unit::TestCase
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@mock = Amazon::WebServices::Util::MockTransport.new
|
12
|
+
@mturk = Amazon::WebServices::MechanicalTurkRequester.new( :Transport => @mock, :AWSAccessKey => 'bogus', :AWSAccessKeyId => 'fake' )
|
13
|
+
end
|
14
|
+
|
15
|
+
def testGetAccountBalance
|
16
|
+
res = @mturk.getAccountBalance # using the convenience layer method
|
17
|
+
assert_equal nil, res
|
18
|
+
res = @mturk.getAccountBalanceRaw({}) # using the raw method ( no default parameters )
|
19
|
+
assert_equal nil, res
|
20
|
+
res = @mturk.GetAccountBalance # using pass-through method ( no convenience processing )
|
21
|
+
assert_equal true, res[:MockResult][:Mock]
|
22
|
+
|
23
|
+
assert_equal 3, @mock.call_buffer.size
|
24
|
+
@mock.each do |request|
|
25
|
+
assert_equal :GetAccountBalance, request.name
|
26
|
+
assert request.args
|
27
|
+
[:AWSAccessKeyId, :Signature, :Timestamp, :Request].each { |key| assert request.args[key]}
|
28
|
+
assert_equal( {}, request.request )
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def testCreateHIT
|
33
|
+
res = @mturk.createHIT # convenience layer, will auto-populate some default parameters
|
34
|
+
res = @mturk.createHITRaw({}) # raw method, no default parameters
|
35
|
+
res = @mturk.CreateHIT # pass-through method ( no convenience processing )
|
36
|
+
|
37
|
+
assert_equal 3, @mock.call_buffer.size
|
38
|
+
|
39
|
+
default_call = @mock.next # request from convenience layer
|
40
|
+
request = default_call.request
|
41
|
+
assert !request.keys.empty?
|
42
|
+
expected = [:MaxAssignments, :AssignmentDurationInSeconds, :AutoApprovalDelayInSeconds, :LifetimeInSeconds]
|
43
|
+
assert_equal [], request.keys - expected, 'Convenience layer should not populate unexpected arguments'
|
44
|
+
assert_equal [], expected - request.keys, 'Convenience layer should populate all expected arguments'
|
45
|
+
|
46
|
+
@mock.each do |call|
|
47
|
+
# both remaining calls should have no arguments
|
48
|
+
assert_equal( {}, call.request, 'Raw calls should not auto-populate arguments')
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def testCreateHITs
|
53
|
+
@mock.listen do |call|
|
54
|
+
{:RegisterHITTypeResult => {:HITTypeId => 'specialType', :Request => {}} } if call.name == :RegisterHITType
|
55
|
+
end
|
56
|
+
|
57
|
+
template = { :Arg1 => 'Param2', :RequesterAnnotation => 'blub' }
|
58
|
+
question_template = "blarg <%= @zip %> foo"
|
59
|
+
data_set = [ { :zip => 'poodle' }, { :zip => 'fizz' } ]
|
60
|
+
|
61
|
+
result = @mturk.createHITs( template, question_template, data_set )
|
62
|
+
|
63
|
+
assert_equal 2, result[:Created].size
|
64
|
+
assert_equal 0, result[:Failed].size
|
65
|
+
|
66
|
+
register_call = @mock.next
|
67
|
+
assert_equal :RegisterHITType, register_call.name
|
68
|
+
assert_equal(
|
69
|
+
{ :AssignmentDurationInSeconds=>3600, # default
|
70
|
+
:AutoApprovalDelayInSeconds=>604800, # default
|
71
|
+
:Arg1=>"Param2" # there's our arg!
|
72
|
+
},
|
73
|
+
register_call.request )
|
74
|
+
expected_questions = [ "blarg poodle foo", "blarg fizz foo" ]
|
75
|
+
@mock.each do |call|
|
76
|
+
assert_equal :CreateHIT, call.name
|
77
|
+
assert_equal 'specialType', call.request[:HITTypeId]
|
78
|
+
assert_equal call.request[:Question], expected_questions.delete( call.request[:Question] )
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def testCreateHITsWithMaxAssignment
|
83
|
+
@mock.listen do |call|
|
84
|
+
case call.name
|
85
|
+
when :RegisterHITType
|
86
|
+
{:RegisterHITTypeResult => {:HITTypeId => 'mockHITType', :Request => {} } }
|
87
|
+
else
|
88
|
+
{}
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
template = { :Description => 'foo bar', :MaxAssignments => 2, :RequesterAnnotation => "Funky <%= @jazz %>" }
|
93
|
+
question = "who what <%= @where %>"
|
94
|
+
data_set = [ { :jazz => "LaLa", :where => 1}, {:jazz => nil, :where => 2, :MaxAssignments => 1}, {:jazz => "Poodle", :where => nil} ]
|
95
|
+
|
96
|
+
results = @mturk.createHITs( template, question, data_set )
|
97
|
+
|
98
|
+
assert_equal [], results[:Failed]
|
99
|
+
assert_equal 3, results[:Created].size
|
100
|
+
|
101
|
+
ht = @mock.next
|
102
|
+
assert_equal :RegisterHITType, ht.name
|
103
|
+
assert_equal 'foo bar', ht.request[:Description]
|
104
|
+
assert_equal nil, ht.request[:MaxAssignments]
|
105
|
+
|
106
|
+
3.times do
|
107
|
+
hit = @mock.next
|
108
|
+
assert_equal :CreateHIT, hit.name
|
109
|
+
assert_equal 'mockHITType', hit.request[:HITTypeId]
|
110
|
+
case hit.request[:Question]
|
111
|
+
when 'who what 1'
|
112
|
+
assert_equal 2, hit.request[:MaxAssignments]
|
113
|
+
assert_equal 'Funky LaLa', hit.request[:RequesterAnnotation]
|
114
|
+
when 'who what 2'
|
115
|
+
assert_equal 1, hit.request[:MaxAssignments]
|
116
|
+
assert_equal 'Funky ', hit.request[:RequesterAnnotation]
|
117
|
+
when 'who what '
|
118
|
+
assert_equal 2, hit.request[:MaxAssignments]
|
119
|
+
assert_equal 'Funky Poodle', hit.request[:RequesterAnnotation]
|
120
|
+
else
|
121
|
+
fail 'generated an unexpected Question'
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
assert_equal nil, @mock.next
|
126
|
+
end
|
127
|
+
|
128
|
+
def testCreatHITsWithFailure
|
129
|
+
@mock.listen do |call|
|
130
|
+
raise "Mock hates you" if call.request[:Question] and call.request[:Question] =~ /poodle/
|
131
|
+
{:RegisterHITTypeResult => {:HITTypeId => 'specialType', :Request => {}} } if call.name == :RegisterHITType
|
132
|
+
end
|
133
|
+
|
134
|
+
template = { :Arg1 => 'Param2', :RequesterAnnotation => 'blub' }
|
135
|
+
question_template = "blarg <%= @zip %> foo"
|
136
|
+
data_set = [ { :zip => 'poodle' }, { :zip => 'fizz' } ]
|
137
|
+
|
138
|
+
result = @mturk.createHITs( template, question_template, data_set )
|
139
|
+
|
140
|
+
assert_equal 1, result[:Created].size
|
141
|
+
assert_equal 1, result[:Failed].size
|
142
|
+
|
143
|
+
assert_equal "Mock hates you", result[:Failed].first[:Error]
|
144
|
+
end
|
145
|
+
|
146
|
+
def testGetHITResults
|
147
|
+
# need to set up a listener to feed back hit and assignment attributes for testing results and work with pagination
|
148
|
+
assignments_per_hit = 31
|
149
|
+
@mock.mock_reply = {:OperationRequest => {}}
|
150
|
+
@mock.listen do |call|
|
151
|
+
case call.name
|
152
|
+
when :GetHIT
|
153
|
+
{:HIT => { :HITId => call.request[:HITId], :MockHITAttribute => 'amazing', :Request => {} } }
|
154
|
+
when :GetAssignmentsForHIT
|
155
|
+
size = call.request[:PageSize]
|
156
|
+
num = call.request[:PageNumber]
|
157
|
+
index = size * (num-1)
|
158
|
+
max = ( assignments_per_hit > index+size ) ? index+size : assignments_per_hit
|
159
|
+
res = []
|
160
|
+
index.upto(max-1) do |i|
|
161
|
+
res << { :HITId => call.request[:HITId], :AssignmentId => i, :MockAssignmentAttribute => 'stunning' }
|
162
|
+
end
|
163
|
+
{ :GetAssignmentsForHITResult => { :Assignment => res, :Request => {} } }
|
164
|
+
else
|
165
|
+
nil
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
list = %w( hitid1 hitid2 amazinghit3 lamehit4 ).collect {|id| { :HITId => id } }
|
170
|
+
results = @mturk.getHITResults( list )
|
171
|
+
|
172
|
+
assert_equal assignments_per_hit*list.size, results.size
|
173
|
+
results.each { |item|
|
174
|
+
assert_not_nil item[:HITId]
|
175
|
+
assert_equal 'amazing', item[:MockHITAttribute]
|
176
|
+
assert_not_nil item[:AssignmentId]
|
177
|
+
assert_equal 'stunning', item[:MockAssignmentAttribute]
|
178
|
+
}
|
179
|
+
|
180
|
+
end
|
181
|
+
|
182
|
+
def testAvailableFunds
|
183
|
+
# TODO
|
184
|
+
end
|
185
|
+
|
186
|
+
def testSimplifyAnswer
|
187
|
+
rawAnswer = <<EOF
|
188
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
189
|
+
<QuestionFormAnswers xmlns="http://mechanicalturk.amazonaws.com/AWSMechanicalTurkDataSchemas/2005-10-01/QuestionFormAnswers.xsd">
|
190
|
+
<Answer>
|
191
|
+
<QuestionIdentifier>1</QuestionIdentifier>
|
192
|
+
<FreeText>yes, sir</FreeText>
|
193
|
+
</Answer>
|
194
|
+
<Answer>
|
195
|
+
<QuestionIdentifier>pudding</QuestionIdentifier>
|
196
|
+
<SelectionIdentifier>B+</SelectionIdentifier>
|
197
|
+
</Answer>
|
198
|
+
</QuestionFormAnswers>
|
199
|
+
EOF
|
200
|
+
expected = { 1 => 'yes, sir', 'pudding' => 'B+' }
|
201
|
+
result = @mturk.simplifyAnswer( rawAnswer )
|
202
|
+
assert_equal expected, result
|
203
|
+
end
|
204
|
+
|
205
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Copyright:: Copyright (c) 2007 Amazon Technologies, Inc.
|
2
|
+
# License:: Apache License, Version 2.0
|
3
|
+
|
4
|
+
# Copyright:: Copyright (c) 2007 Amazon Technologies, Inc.
|
5
|
+
# License:: Apache License, Version 2.0
|
6
|
+
|
7
|
+
require 'test/unit'
|
8
|
+
require 'ruby-aws'
|
9
|
+
|
10
|
+
class TestRubyAWS < Test::Unit::TestCase
|
11
|
+
|
12
|
+
def testVersion
|
13
|
+
assert( RubyAWS::VERSION =~ /^\d+\.\d+\.\d+$/ , "RubyAWS::VERSION is incorrectly formatted")
|
14
|
+
end
|
15
|
+
|
16
|
+
def testAgent
|
17
|
+
assert( RubyAWS.agent =~ /^ruby-aws\/\d+\.\d+\.\d+$/ )
|
18
|
+
assert( RubyAWS.agent('Tester') =~ /^ruby-aws\/\d+\.\d+\.\d+ Tester$/ )
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
@@ -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/binder'
|
6
|
+
|
7
|
+
class TestBinder < Test::Unit::TestCase
|
8
|
+
include Amazon::Util
|
9
|
+
|
10
|
+
SAMPLE_VARS = { :a => 'pudding', :b => 'pie', :c => 'cheesecake' }
|
11
|
+
|
12
|
+
SAMPLE_TEMPLATE = "I love <%= @b %> (especially with <%= @a %>), but I love <%= @c %> even more!"
|
13
|
+
|
14
|
+
SAMPLE_EXPECTED = "I love pie (especially with pudding), but I love cheesecake even more!"
|
15
|
+
|
16
|
+
def testConstructorConfig
|
17
|
+
b = Binder.new( SAMPLE_VARS )
|
18
|
+
result = b.erb_eval( SAMPLE_TEMPLATE )
|
19
|
+
assert_equal SAMPLE_EXPECTED, result
|
20
|
+
end
|
21
|
+
|
22
|
+
def testBuilderConfig
|
23
|
+
b = Binder.new { |bb| SAMPLE_VARS.each {|k,v| bb.set( k, v ) } }
|
24
|
+
result = b.erb_eval( SAMPLE_TEMPLATE )
|
25
|
+
assert_equal SAMPLE_EXPECTED, result
|
26
|
+
end
|
27
|
+
|
28
|
+
def testInstanceConfig
|
29
|
+
b = Binder.new
|
30
|
+
SAMPLE_VARS.each { |k,v| b.set( k, v ) }
|
31
|
+
result = b.erb_eval( SAMPLE_TEMPLATE )
|
32
|
+
assert_equal SAMPLE_EXPECTED, result
|
33
|
+
end
|
34
|
+
|
35
|
+
def testMergeConfig
|
36
|
+
b = Binder.new
|
37
|
+
b.merge SAMPLE_VARS
|
38
|
+
result = b.erb_eval( SAMPLE_TEMPLATE )
|
39
|
+
assert_equal SAMPLE_EXPECTED, result
|
40
|
+
end
|
41
|
+
|
42
|
+
def testCombinedConfig
|
43
|
+
keys = SAMPLE_VARS.keys
|
44
|
+
b = Binder.new( keys[0] => SAMPLE_VARS[ keys[0] ] ) { |bb|
|
45
|
+
bb.set( keys[1], SAMPLE_VARS[ keys[1] ] ) }
|
46
|
+
b.set( keys[2], SAMPLE_VARS[ keys[2] ] )
|
47
|
+
result = b.erb_eval( SAMPLE_TEMPLATE )
|
48
|
+
assert_equal SAMPLE_EXPECTED, result
|
49
|
+
end
|
50
|
+
|
51
|
+
def testConfigPrecedence
|
52
|
+
b = Binder.new( SAMPLE_VARS ) { |bb|
|
53
|
+
bb.merge( 'a' => 'rhubarb', 'c'=> 'gelato' ) }
|
54
|
+
b.merge( :c => 'jello' )
|
55
|
+
result = b.erb_eval( SAMPLE_TEMPLATE )
|
56
|
+
assert_equal "I love pie (especially with rhubarb), but I love jello even more!", result
|
57
|
+
end
|
58
|
+
|
59
|
+
def testMissingVar
|
60
|
+
b = Binder.new
|
61
|
+
result = silently { b.erb_eval( "Going to the <%=@blue%> moon" ) }
|
62
|
+
assert_equal "Going to the moon", result
|
63
|
+
end
|
64
|
+
|
65
|
+
def testScopeCaller
|
66
|
+
b = Binder.new
|
67
|
+
@arg = "ocean"
|
68
|
+
result = silently { b.erb_eval( "swim in the <%= @arg %> seas" ) }
|
69
|
+
assert_equal "swim in the seas", result
|
70
|
+
end
|
71
|
+
|
72
|
+
def testScopeBoth
|
73
|
+
@zip = '--zip--'
|
74
|
+
b = Binder.new( :zip => '++zap++' )
|
75
|
+
result = b.erb_eval( "The line went <%= @zip %>" )
|
76
|
+
assert_equal "The line went ++zap++", result
|
77
|
+
end
|
78
|
+
|
79
|
+
private
|
80
|
+
|
81
|
+
def silently( &block )
|
82
|
+
warn_level = $VERBOSE
|
83
|
+
$VERBOSE = nil
|
84
|
+
result = block.call
|
85
|
+
$VERBOSE = warn_level
|
86
|
+
result
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|