sprout-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 +340 -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 +177 -0
@@ -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
|
@@ -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
|