knjrbfw 0.0.32 → 0.0.33

Sign up to get free protection for your applications and to get access to all the features.
data/spec/knjrbfw_spec.rb CHANGED
@@ -1,300 +1,11 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe "Knjrbfw" do
4
- it "should be able to generate a sample SQLite database and add a sample table, with sample columns and with a sample index to it" do
5
- require "knjrbfw"
6
- require "sqlite3" if RUBY_ENGINE != "jruby"
7
-
8
- db_path = "#{Knj::Os.tmpdir}/knjrbfw_test_sqlite3.sqlite3"
9
-
10
- begin
11
- db = Knj::Db.new(
12
- :type => "sqlite3",
13
- :path => db_path,
14
- :return_keys => "symbols",
15
- :index_append_table_name => true
16
- )
17
-
18
- db.tables.create("Project", {
19
- "columns" => [
20
- {"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
21
- {"name" => "category_id", "type" => "int"},
22
- {"name" => "name", "type" => "varchar"}
23
- ],
24
- "indexes" => [
25
- {"name" => "category_id", "columns" => ["category_id"]}
26
- ]
27
- })
28
-
29
- db.tables.create("Task", {
30
- "columns" => [
31
- {"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
32
- {"name" => "project_id", "type" => "int"},
33
- {"name" => "user_id", "type" => "int"},
34
- {"name" => "name", "type" => "varchar"}
35
- ],
36
- "indexes" => [
37
- {"name" => "project_id", "columns" => ["project_id"]}
38
- ]
39
- })
40
-
41
- db.tables.create("User", {
42
- "columns" => [
43
- {"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
44
- {"name" => "name", "type" => "varchar"}
45
- ]
46
- })
47
-
48
- table = db.tables["Project"]
49
-
50
- indexes = table.indexes
51
- raise "Could not find the sample-index 'category_id' that should have been created." if !indexes["Project__category_id"]
52
-
53
-
54
- #If we insert a row the ID should increase and the name should be the same as inserted (or something is very very wrong)...
55
- db.insert("Project", {
56
- "name" => "Test project"
57
- })
58
-
59
- db.q("SELECT * FROM Project") do |d|
60
- raise "Somehow name was not 'Test project'" if d[:name] != "Test project"
61
- raise "ID was not set?" if d[:id].to_i <= 0
62
- end
63
-
64
- $db = db
65
- rescue => e
66
- File.unlink(db_path) if File.exists?(db_path)
67
- raise e
68
- end
69
- end
70
-
71
- it "should be able to parse various date formats." do
72
- date = Knj::Datet.in("2011-07-09 00:00:00 UTC")
73
- date = Knj::Datet.in("1985-06-17 01:00:00")
74
- date = Knj::Datet.in("1985-06-17")
75
- date = Knj::Datet.in("17/06 1985")
76
-
77
- raise "Couldnt register type 1 nullstamp." if !Knj::Datet.is_nullstamp?("0000-00-00")
78
- raise "Couldnt register type 2 nullstamp." if !Knj::Datet.is_nullstamp?("0000-00-00 00:00:00")
79
- raise "Registered nullstamp on valid date." if Knj::Datet.is_nullstamp?("1985-06-17")
80
- raise "Registered nullstamp on valid date." if Knj::Datet.is_nullstamp?("1985-06-17 10:30:00")
81
-
82
- date = Knj::Datet.in("2011-07-09 13:05:04 +0200")
83
- ltime = date.localtime_str
84
-
85
- #if RUBY_VERSION.slice(0, 3) == "1.9"
86
- # if ltime != date.time.localtime
87
- # raise "Calculated localtime (#{ltime}) was not the same as the real Time-localtime (#{date.time.localtime})."
88
- # end
89
- #end
90
-
91
- if ltime != "2011-07-09 13:05:04 +0200"
92
- raise "Datet didnt return expected result: '#{ltime}'."
93
- end
94
- end
95
-
96
- it "should be able to compare dates" do
97
- date1 = Knj::Datet.in("17/06 1985")
98
- date2 = Knj::Datet.in("18/06 1985")
99
- date3 = Knj::Datet.in("17/06 1985")
100
-
101
- raise "Date1 was wrongly higher than date2." if date1 > date2
102
-
103
- if date2 > date1
104
- #do nothing.
105
- else
106
- raise "Date2 was wrongly not higher than date1."
107
- end
108
-
109
- raise "Date1 was wrongly not the same as date3." if date1 != date3
110
- raise "Date1 was the same as date2?" if date1 == date2
111
- end
112
-
113
- it "should be able to automatic generate methods on datarow-classes (has_many, has_one)." do
114
- class Project < Knj::Datarow
115
- has_many [
116
- {:class => :Task, :col => :project_id, :depends => true}
117
- ]
118
- end
119
-
120
- class Task < Knj::Datarow
121
- has_one [
122
- {:class => :User, :required => true},
123
- :Project
124
- ]
125
- end
126
-
127
- class User < Knj::Datarow
128
- has_one [:Project]
129
-
130
- def html
131
- return self[:name]
132
- end
133
- end
134
-
135
- $ob = Knj::Objects.new(:db => $db, :datarow => true, :require => false)
136
-
137
- $ob.add(:User, {
138
- :name => "Kasper"
139
- })
140
- $ob.add(:Task, {
141
- :name => "Test task",
142
- :user_id => 1,
143
- :project_id => 1
144
- })
145
-
146
- ret_proc = []
147
- $ob.list(:Task) do |task|
148
- ret_proc << task
149
- end
150
-
151
- raise "list with proc should return one task but didnt." if ret_proc.length != 1
152
-
153
-
154
- project = $ob.get(:Project, 1)
155
-
156
- tasks = project.tasks
157
- raise "No tasks were found on project?" if tasks.empty?
158
-
159
-
160
- ret_proc = []
161
- ret_test = project.tasks do |task|
162
- ret_proc << task
163
- end
164
-
165
- raise "When given a block the return should be nil so it doesnt hold weak-ref-objects in memory but it didnt return nil." if ret_test != nil
166
- raise "list for project with proc should return one task but didnt (#{ret_proc.length})." if ret_proc.length != 1
167
-
168
- user = tasks[0].user
169
- project_second = tasks[0].project
170
-
171
- raise "Returned object was not a user on task." if !user.is_a?(User)
172
- raise "Returned object was not a project on task." if !project_second.is_a?(Project)
173
-
174
-
175
- #Check that has_many-depending is actually working.
176
- begin
177
- $ob.delete(project)
178
- raise "It was possible to delete project 1 even though task 1 depended on it!"
179
- rescue
180
- #this should happen - it should not possible to delete project 1 because task 1 depends on it."
181
- end
182
- end
183
-
184
- it "should be able to connect to objects 'no-html' callback and test it." do
185
- task = $ob.get(:Task, 1)
186
- $ob.events.connect(:no_html) do |event, classname|
187
- "[no #{classname.to_s.downcase}]"
188
- end
189
-
190
- raise "Unexpected user_html from task (should have been 'Kasper')." if task.user_html != "Kasper"
191
- task.update(:user_id => 0)
192
- raise "Unexpected user_html from task (should have been '[no user]')." if task.user_html != "[no user]"
193
- end
194
-
195
- it "should delete the temp database again." do
196
- db_path = "#{Knj::Os.tmpdir}/knjrbfw_test_sqlite3.sqlite3"
197
- File.unlink(db_path) if File.exists?(db_path)
198
- end
199
-
200
- it "should be able to execute various Knj::Php functions correctly." do
201
- str = "Kasper Johansen"
202
-
203
- #substr
204
- teststr = Knj::Php.substr(str, 7, 8)
205
- if teststr != "Johansen"
206
- raise "substr did not return expected result: '#{teststr}'"
207
- end
208
-
209
- teststr = Knj::Php.substr(str, -8, 8)
210
- if teststr != "Johansen"
211
- raise "substr did not returned expected result when using negative positions: '#{teststr}'."
212
- end
213
-
214
- #strtoupper
215
- teststr = Knj::Php.strtoupper(str)
216
- if teststr != "KASPER JOHANSEN"
217
- raise "strtoupper did not return expected result: '#{teststr}'."
218
- end
219
-
220
- #strtolower
221
- teststr = Knj::Php.strtolower(str)
222
- if teststr != "kasper johansen"
223
- raise "strtolower did not return expected result: '#{teststr}'."
224
- end
225
- end
226
-
227
4
  it "should be able to join arrays with callbacks." do
228
5
  res = Knj::ArrayExt.join(:arr => [1, 2, 3], :sep => ",", :callback => proc{|value| "'#{value}'"})
229
6
  raise "Unexpected result from ArrayExt." if res != "'1','2','3'"
230
7
  end
231
8
 
232
- it "should be able to execute various forms of Web.input methods." do
233
- html = Knj::Web.inputs([{
234
- :title => "Test 1",
235
- :name => :textest1,
236
- :type => :text,
237
- :default => "hmm",
238
- :value => "trala"
239
- },{
240
- :title => "Test 2",
241
- :name => :chetest2,
242
- :type => :checkbox,
243
- :default => true
244
- },{
245
- :title => "Test 3",
246
- :name => :seltest3,
247
- :type => :select,
248
- :default => 1,
249
- :opts => $ob.list_optshash(:Task)
250
- },{
251
- :title => "Test 4",
252
- :name => :textest4,
253
- :type => :textarea,
254
- :height => 300,
255
- :default => "Hmm",
256
- :value => "Trala"
257
- },{
258
- :title => "Test 5",
259
- :name => :filetest5,
260
- :type => :file
261
- },{
262
- :title => "Test 6",
263
- :type => :info,
264
- :value => "Argh"
265
- }])
266
- end
267
-
268
- it "should be able to use alert and back." do
269
- Knj::Web.alert("Trala")
270
-
271
- begin
272
- Knj::Web.back
273
- raise "It should have called exit which it didnt."
274
- rescue SystemExit
275
- #ignore.
276
- end
277
-
278
- begin
279
- Knj::Web.redirect("?show=test")
280
- raise "It should have called exit which it didnt."
281
- rescue SystemExit
282
- #ignore.
283
- end
284
- end
285
-
286
- it "should be able to properly parse 'Set-Cookie' headers." do
287
- data = Knj::Web.parse_set_cookies("TestCookie=TestValue+; Expires=Fri, 05 Aug 2011 10:58:17 GMT; Path=\n")
288
-
289
- raise "No data returned?" if !data or !data.respond_to?(:length)
290
- raise "Wrong number of cookies returned: '#{data.length}'." if data.length != 1
291
-
292
- raise "Unexpected name: '#{data[0]["name"]}'." if data[0]["name"] != "TestCookie"
293
- raise "Unexpected value: '#{data[0]["value"]}'." if data[0]["value"] != "TestValue "
294
- raise "Unexpected path: '#{data[0]["path"]}'." if data[0]["path"] != ""
295
- raise "Unexpected expire:' #{data[0]["expire"]}'." if data[0]["expires"] != "Fri, 05 Aug 2011 10:58:17 GMT"
296
- end
297
-
298
9
  it "should be able to draw rounded transparent corners on images." do
299
10
  require "rubygems"
300
11
  require "RMagick"
@@ -313,7 +24,6 @@ describe "Knjrbfw" do
313
24
  it "should be possible to use Strings.html_links-method." do
314
25
  teststr = "This is a test. http://www.google.com This is a test."
315
26
 
316
-
317
27
  #Test normal usage.
318
28
  test1 = Knj::Strings.html_links(teststr)
319
29
  raise "Unexpected string: '#{teststr}'" if test1 != "This is a test. <a href=\"http://www.google.com\">http://www.google.com</a> This is a test."
@@ -0,0 +1,274 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Objects" do
4
+ it "should be able to cache rows" do
5
+ require "sqlite3" if RUBY_ENGINE != "jruby"
6
+
7
+ $db_path = "#{Knj::Os.tmpdir}/knjrbfw_objects_cache_test.sqlite3"
8
+ File.unlink($db_path) if File.exists?($db_path)
9
+ $db = Knj::Db.new(:type => :sqlite3, :path => $db_path, :return_keys => "symbols")
10
+
11
+ schema = {
12
+ "tables" => {
13
+ "Group" => {
14
+ "columns" => [
15
+ {"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
16
+ {"name" => "groupname", "type" => "varchar"}
17
+ ]
18
+ },
19
+ "User" => {
20
+ "columns" => [
21
+ {"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
22
+ {"name" => "username", "type" => "varchar"}
23
+ ]
24
+ }
25
+ }
26
+ }
27
+ Knj::Db::Revision.new.init_db("schema" => schema, "db" => $db)
28
+
29
+ class User < Knj::Datarow; end
30
+
31
+ $ob = Knj::Objects.new(
32
+ :db => $db,
33
+ :datarow => true,
34
+ :require => false,
35
+ :models => {
36
+ :User => {
37
+ :cache_ids => true
38
+ }
39
+ }
40
+ )
41
+
42
+ $ob.adds(:User, [
43
+ {:username => "User 1"},
44
+ {:username => "User 2"},
45
+ {:username => "User 3"},
46
+ {:username => "User 4"},
47
+ {:username => "User 5"}
48
+ ])
49
+
50
+ raise "Expected user-ID-cache to be 5 but it wasnt: #{$ob.ids_cache[:User].length}" if $ob.ids_cache[:User].length != 5
51
+
52
+ user = $ob.get(:User, 4)
53
+ $ob.delete(user)
54
+ raise "Expected user-ID-cache to be 4 but it wasnt: #{$ob.ids_cache[:User].length} #{$ob.ids_cache}" if $ob.ids_cache[:User].length != 4
55
+
56
+ $ob.deletes([$ob.get(:User, 1), $ob.get(:User, 2)])
57
+ raise "Expected user-ID-cache to be 2 but it wasnt: #{$ob.ids_cache[:User].length} #{$ob.ids_cache}" if $ob.ids_cache[:User].length != 2
58
+ end
59
+
60
+ it "should work even though stressed by threads (thread-safe)." do
61
+ userd = []
62
+ 10.upto(25) do |i|
63
+ userd << {:username => "User #{i}"}
64
+ end
65
+
66
+ $ob.adds(:User, userd)
67
+ users = $ob.list(:User)
68
+
69
+ #Stress it to test threadsafety...
70
+ threads = []
71
+ 0.upto(10) do |tc|
72
+ threads << Knj::Thread.new do
73
+ 0.upto(10) do |ic|
74
+ user = $ob.add(:User, {:username => "User #{tc}-#{ic}"})
75
+ $ob.delete(user)
76
+
77
+ user1 = $ob.add(:User, {:username => "User #{tc}-#{ic}-1"})
78
+ user2 = $ob.add(:User, {:username => "User #{tc}-#{ic}-2"})
79
+ user3 = $ob.add(:User, {:username => "User #{tc}-#{ic}-3"})
80
+ $ob.deletes([user1, user2, user3])
81
+
82
+ users.each do |user|
83
+ user[:username] = "#{user[:username]}." if !user.deleted?
84
+ end
85
+ end
86
+ end
87
+ end
88
+
89
+ threads.each do |thread|
90
+ thread.join
91
+ end
92
+ end
93
+
94
+ it "should be able to skip queries when adding" do
95
+ class Group < Knj::Datarow; end
96
+
97
+ $ob2 = Knj::Objects.new(
98
+ :db => $db,
99
+ :datarow => true,
100
+ :require => false
101
+ )
102
+
103
+ threads = []
104
+ 0.upto(10) do
105
+ threads << Knj::Thread.new do
106
+ 0.upto(15) do
107
+ $ob2.add(:Group, {:groupname => "User 1"}, {:skip_ret => true})
108
+ end
109
+ end
110
+ end
111
+
112
+ threads.each do |thread|
113
+ thread.join
114
+ end
115
+ end
116
+
117
+ it "should delete the temporary database." do
118
+ File.unlink($db_path) if File.exists?($db_path)
119
+ end
120
+
121
+ #Moved from "knjrbfw_spec.rb"
122
+ it "should be able to generate a sample SQLite database and add a sample table, with sample columns and with a sample index to it" do
123
+ $db_path = "#{Knj::Os.tmpdir}/knjrbfw_test_sqlite3.sqlite3"
124
+ $db = Knj::Db.new(
125
+ :type => "sqlite3",
126
+ :path => $db_path,
127
+ :return_keys => "symbols",
128
+ :index_append_table_name => true
129
+ )
130
+
131
+ $db.tables.create("Project", {
132
+ "columns" => [
133
+ {"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
134
+ {"name" => "category_id", "type" => "int"},
135
+ {"name" => "name", "type" => "varchar"}
136
+ ],
137
+ "indexes" => [
138
+ {"name" => "category_id", "columns" => ["category_id"]}
139
+ ]
140
+ })
141
+
142
+ $db.tables.create("Task", {
143
+ "columns" => [
144
+ {"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
145
+ {"name" => "project_id", "type" => "int"},
146
+ {"name" => "person_id", "type" => "int"},
147
+ {"name" => "name", "type" => "varchar"}
148
+ ],
149
+ "indexes" => [
150
+ {"name" => "project_id", "columns" => ["project_id"]}
151
+ ]
152
+ })
153
+
154
+ $db.tables.create("Person", {
155
+ "columns" => [
156
+ {"name" => "id", "type" => "int", "autoincr" => true, "primarykey" => true},
157
+ {"name" => "name", "type" => "varchar"}
158
+ ]
159
+ })
160
+
161
+ table = $db.tables["Project"]
162
+
163
+ indexes = table.indexes
164
+ raise "Could not find the sample-index 'category_id' that should have been created." if !indexes["Project__category_id"]
165
+
166
+
167
+ #If we insert a row the ID should increase and the name should be the same as inserted (or something is very very wrong)...
168
+ $db.insert("Project", {
169
+ "name" => "Test project"
170
+ })
171
+
172
+ $db.q("SELECT * FROM Project") do |d|
173
+ raise "Somehow name was not 'Test project'" if d[:name] != "Test project"
174
+ raise "ID was not set?" if d[:id].to_i <= 0
175
+ end
176
+ end
177
+
178
+ it "should be able to automatic generate methods on datarow-classes (has_many, has_one)." do
179
+ class Project < Knj::Datarow
180
+ has_many [
181
+ {:class => :Task, :col => :project_id, :depends => true}
182
+ ]
183
+ end
184
+
185
+ class Task < Knj::Datarow
186
+ has_one [
187
+ {:class => :Person, :required => true},
188
+ :Project
189
+ ]
190
+ end
191
+
192
+ class Person < Knj::Datarow
193
+ has_one [:Project]
194
+
195
+ def html
196
+ return self[:name]
197
+ end
198
+ end
199
+
200
+ $ob = Knj::Objects.new(:db => $db, :datarow => true, :require => false)
201
+
202
+ $ob.add(:Person, {
203
+ :name => "Kasper"
204
+ })
205
+ $ob.add(:Task, {
206
+ :name => "Test task",
207
+ :person_id => 1,
208
+ :project_id => 1
209
+ })
210
+
211
+ ret_proc = []
212
+ $ob.list(:Task) do |task|
213
+ ret_proc << task
214
+ end
215
+
216
+ raise "list with proc should return one task but didnt." if ret_proc.length != 1
217
+
218
+
219
+ project = $ob.get(:Project, 1)
220
+
221
+ tasks = project.tasks
222
+ raise "No tasks were found on project?" if tasks.empty?
223
+
224
+
225
+ ret_proc = []
226
+ ret_test = project.tasks do |task|
227
+ ret_proc << task
228
+ end
229
+
230
+ raise "When given a block the return should be nil so it doesnt hold weak-ref-objects in memory but it didnt return nil." if ret_test != nil
231
+ raise "list for project with proc should return one task but didnt (#{ret_proc.length})." if ret_proc.length != 1
232
+
233
+ person = tasks.first.person
234
+ project_second = tasks.first.project
235
+
236
+ raise "Returned object was not a person on task." if !person.is_a?(Person)
237
+ raise "Returned object was not a project on task." if !project_second.is_a?(Project)
238
+
239
+
240
+ #Check that has_many-depending is actually working.
241
+ begin
242
+ $ob.delete(project)
243
+ raise "It was possible to delete project 1 even though task 1 depended on it!"
244
+ rescue
245
+ #this should happen - it should not possible to delete project 1 because task 1 depends on it."
246
+ end
247
+ end
248
+
249
+ it "should be able to generate lists for inputs" do
250
+ Knj::Web.inputs([{
251
+ :title => "Test 3",
252
+ :name => :seltest3,
253
+ :type => :select,
254
+ :default => 1,
255
+ :opts => $ob.list_optshash(:Task)
256
+ }])
257
+ end
258
+
259
+ it "should be able to connect to objects 'no-html' callback and test it." do
260
+ task = $ob.get(:Task, 1)
261
+ $ob.events.connect(:no_html) do |event, classname|
262
+ "[no #{classname.to_s.downcase}]"
263
+ end
264
+
265
+ raise "Unexpected person_html from task (should have been 'Kasper'): '#{task.person_html}'." if task.person_html != "Kasper"
266
+ task.update(:person_id => 0)
267
+ raise "Unexpected person_html from task (should have been '[no person]')." if task.person_html != "[no person]"
268
+ end
269
+
270
+ it "should delete the temp database again." do
271
+ db_path = "#{Knj::Os.tmpdir}/knjrbfw_test_sqlite3.sqlite3"
272
+ File.unlink(db_path) if File.exists?(db_path)
273
+ end
274
+ end
data/spec/php_spec.rb CHANGED
@@ -2,8 +2,6 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe "Php" do
4
4
  it "explode" do
5
- require "knj/php"
6
-
7
5
  teststr = "1;2;3"
8
6
  arr = Knj::Php.explode(";", teststr)
9
7
 
@@ -14,8 +12,6 @@ describe "Php" do
14
12
  end
15
13
 
16
14
  it "is_numeric" do
17
- require "knj/php"
18
-
19
15
  raise "Failed." if !Knj::Php.is_numeric(123)
20
16
  raise "Failed." if !Knj::Php.is_numeric("123")
21
17
  raise "Failed." if Knj::Php.is_numeric("kasper123")
@@ -55,9 +51,6 @@ describe "Php" do
55
51
  end
56
52
 
57
53
  it "parse_str" do
58
- require "knj/php"
59
- require "knj/web"
60
-
61
54
  teststr = "first=value&arr[]=foo+bar&arr[]=baz&hash[trala]=hmm&hash[trala2]=wtf"
62
55
 
63
56
  hash = {}
@@ -69,4 +62,32 @@ describe "Php" do
69
62
  raise "Invalid value for hash-trala." if hash["hash"]["trala"] != "hmm"
70
63
  raise "Invalid value for hash-trala2." if hash["hash"]["trala2"] != "wtf"
71
64
  end
65
+
66
+ #Moved from "knjrbfw_spec.rb".
67
+ it "should be able to execute various Knj::Php functions correctly." do
68
+ str = "Kasper Johansen"
69
+
70
+ #substr
71
+ teststr = Knj::Php.substr(str, 7, 8)
72
+ if teststr != "Johansen"
73
+ raise "substr did not return expected result: '#{teststr}'"
74
+ end
75
+
76
+ teststr = Knj::Php.substr(str, -8, 8)
77
+ if teststr != "Johansen"
78
+ raise "substr did not returned expected result when using negative positions: '#{teststr}'."
79
+ end
80
+
81
+ #strtoupper
82
+ teststr = Knj::Php.strtoupper(str)
83
+ if teststr != "KASPER JOHANSEN"
84
+ raise "strtoupper did not return expected result: '#{teststr}'."
85
+ end
86
+
87
+ #strtolower
88
+ teststr = Knj::Php.strtolower(str)
89
+ if teststr != "kasper johansen"
90
+ raise "strtolower did not return expected result: '#{teststr}'."
91
+ end
92
+ end
72
93
  end
data/spec/process_spec.rb CHANGED
@@ -59,7 +59,13 @@ describe "Process" do
59
59
  end
60
60
 
61
61
  #Stress it by doing 1000 requests.
62
- Timeout.timeout(2) do
62
+ if RUBY_ENGINE == "jruby"
63
+ tout = 7
64
+ else
65
+ tout = 2
66
+ end
67
+
68
+ Timeout.timeout(tout) do
63
69
  0.upto(1000) do |count|
64
70
  #$stderr.print "Testing #{count}\n"
65
71
  answer = $process_client.send("test #{count}")