kronk 1.6.2 → 1.7.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.rdoc +29 -1
- data/Manifest.txt +6 -1
- data/README.rdoc +74 -28
- data/Rakefile +4 -3
- data/TODO.rdoc +7 -5
- data/bin/kronk +2 -11
- data/lib/kronk/async/em_ext.rb +34 -0
- data/lib/kronk/async/request.rb +73 -0
- data/lib/kronk/async/response.rb +70 -0
- data/lib/kronk/async.rb +118 -0
- data/lib/kronk/cmd.rb +111 -43
- data/lib/kronk/constants.rb +1 -0
- data/lib/kronk/core_ext.rb +1 -1
- data/lib/kronk/data_string.rb +251 -0
- data/lib/kronk/diff/output.rb +132 -100
- data/lib/kronk/diff.rb +20 -24
- data/lib/kronk/path/matcher.rb +8 -4
- data/lib/kronk/path/path_match.rb +48 -4
- data/lib/kronk/path/transaction.rb +74 -53
- data/lib/kronk/path.rb +11 -6
- data/lib/kronk/player/benchmark.rb +11 -12
- data/lib/kronk/player/input_reader.rb +40 -3
- data/lib/kronk/player/request_parser.rb +4 -1
- data/lib/kronk/player/stream.rb +2 -2
- data/lib/kronk/player/suite.rb +16 -9
- data/lib/kronk/player.rb +93 -143
- data/lib/kronk/queue_runner.rb +238 -0
- data/lib/kronk/request.rb +25 -20
- data/lib/kronk/response.rb +39 -10
- data/lib/kronk/test/assertions.rb +2 -2
- data/lib/kronk/test/helper_methods.rb +1 -1
- data/lib/kronk.rb +56 -24
- data/test/test_assertions.rb +4 -4
- data/test/test_cmd.rb +38 -10
- data/test/test_data_string.rb +242 -1
- data/test/test_diff.rb +8 -303
- data/test/test_helper.rb +1 -1
- data/test/test_kronk.rb +21 -28
- data/test/test_path.rb +29 -0
- data/test/test_path_match.rb +47 -2
- data/test/test_path_matcher.rb +42 -1
- data/test/test_player.rb +71 -72
- data/test/test_request.rb +31 -6
- data/test/test_request_parser.rb +7 -1
- data/test/test_response.rb +1 -1
- data/test/test_transaction.rb +78 -30
- metadata +64 -8
- data/lib/kronk/data_renderer.rb +0 -219
data/test/test_diff.rb
CHANGED
@@ -39,306 +39,8 @@ class TestDiff < Test::Unit::TestCase
|
|
39
39
|
|
40
40
|
diff = Kronk::Diff.new_from_data mock_data, other_data
|
41
41
|
|
42
|
-
assert_equal Kronk::
|
43
|
-
assert_equal Kronk::
|
44
|
-
end
|
45
|
-
|
46
|
-
|
47
|
-
def test_ordered_data_string_json
|
48
|
-
expected = <<STR
|
49
|
-
{
|
50
|
-
"acks": [
|
51
|
-
[
|
52
|
-
56,
|
53
|
-
78
|
54
|
-
],
|
55
|
-
[
|
56
|
-
"12",
|
57
|
-
"34"
|
58
|
-
]
|
59
|
-
],
|
60
|
-
"root": [
|
61
|
-
[
|
62
|
-
"B1",
|
63
|
-
"B2"
|
64
|
-
],
|
65
|
-
[
|
66
|
-
"A1",
|
67
|
-
"A2"
|
68
|
-
],
|
69
|
-
[
|
70
|
-
"C1",
|
71
|
-
"C2",
|
72
|
-
[
|
73
|
-
"C3a",
|
74
|
-
"C3b"
|
75
|
-
]
|
76
|
-
],
|
77
|
-
{
|
78
|
-
":tests": [
|
79
|
-
"D3a",
|
80
|
-
"D3b"
|
81
|
-
],
|
82
|
-
"test": [
|
83
|
-
[
|
84
|
-
"D1a\\nContent goes here",
|
85
|
-
"D1b"
|
86
|
-
],
|
87
|
-
"D2"
|
88
|
-
]
|
89
|
-
}
|
90
|
-
],
|
91
|
-
"subs": [
|
92
|
-
"a",
|
93
|
-
"b"
|
94
|
-
],
|
95
|
-
"tests": {
|
96
|
-
":foo": ":bar",
|
97
|
-
"test": [
|
98
|
-
[
|
99
|
-
1,
|
100
|
-
2
|
101
|
-
],
|
102
|
-
2.123
|
103
|
-
]
|
104
|
-
}
|
105
|
-
}
|
106
|
-
STR
|
107
|
-
|
108
|
-
assert_equal expected.strip, Kronk::Diff.ordered_data_string(mock_data)
|
109
|
-
end
|
110
|
-
|
111
|
-
|
112
|
-
def test_ordered_data_string_struct_json
|
113
|
-
expected = <<STR
|
114
|
-
{
|
115
|
-
"acks": [
|
116
|
-
[
|
117
|
-
"Fixnum",
|
118
|
-
"Fixnum"
|
119
|
-
],
|
120
|
-
[
|
121
|
-
"String",
|
122
|
-
"String"
|
123
|
-
]
|
124
|
-
],
|
125
|
-
"root": [
|
126
|
-
[
|
127
|
-
"String",
|
128
|
-
"String"
|
129
|
-
],
|
130
|
-
[
|
131
|
-
"String",
|
132
|
-
"String"
|
133
|
-
],
|
134
|
-
[
|
135
|
-
"String",
|
136
|
-
"String",
|
137
|
-
[
|
138
|
-
"String",
|
139
|
-
"String"
|
140
|
-
]
|
141
|
-
],
|
142
|
-
{
|
143
|
-
":tests": [
|
144
|
-
"String",
|
145
|
-
"String"
|
146
|
-
],
|
147
|
-
"test": [
|
148
|
-
[
|
149
|
-
"String",
|
150
|
-
"String"
|
151
|
-
],
|
152
|
-
"String"
|
153
|
-
]
|
154
|
-
}
|
155
|
-
],
|
156
|
-
"subs": [
|
157
|
-
"String",
|
158
|
-
"String"
|
159
|
-
],
|
160
|
-
"tests": {
|
161
|
-
":foo": "Symbol",
|
162
|
-
"test": [
|
163
|
-
[
|
164
|
-
"Fixnum",
|
165
|
-
"Fixnum"
|
166
|
-
],
|
167
|
-
"Float"
|
168
|
-
]
|
169
|
-
}
|
170
|
-
}
|
171
|
-
STR
|
172
|
-
|
173
|
-
assert_equal expected.strip,
|
174
|
-
Kronk::Diff.ordered_data_string(mock_data, true)
|
175
|
-
end
|
176
|
-
|
177
|
-
def test_ordered_data_string_json
|
178
|
-
expected = <<STR
|
179
|
-
{
|
180
|
-
"acks": [
|
181
|
-
[
|
182
|
-
56,
|
183
|
-
78
|
184
|
-
],
|
185
|
-
[
|
186
|
-
"12",
|
187
|
-
"34"
|
188
|
-
]
|
189
|
-
],
|
190
|
-
"root": [
|
191
|
-
[
|
192
|
-
"B1",
|
193
|
-
"B2"
|
194
|
-
],
|
195
|
-
[
|
196
|
-
"A1",
|
197
|
-
"A2"
|
198
|
-
],
|
199
|
-
[
|
200
|
-
"C1",
|
201
|
-
"C2",
|
202
|
-
[
|
203
|
-
"C3a",
|
204
|
-
"C3b"
|
205
|
-
]
|
206
|
-
],
|
207
|
-
{
|
208
|
-
":tests": [
|
209
|
-
"D3a",
|
210
|
-
"D3b"
|
211
|
-
],
|
212
|
-
"test": [
|
213
|
-
[
|
214
|
-
"D1a\\nContent goes here",
|
215
|
-
"D1b"
|
216
|
-
],
|
217
|
-
"D2"
|
218
|
-
]
|
219
|
-
}
|
220
|
-
],
|
221
|
-
"subs": [
|
222
|
-
"a",
|
223
|
-
"b"
|
224
|
-
],
|
225
|
-
"tests": {
|
226
|
-
":foo": ":bar",
|
227
|
-
"test": [
|
228
|
-
[
|
229
|
-
1,
|
230
|
-
2
|
231
|
-
],
|
232
|
-
2.123
|
233
|
-
]
|
234
|
-
}
|
235
|
-
}
|
236
|
-
STR
|
237
|
-
|
238
|
-
assert_equal expected.strip, Kronk::Diff.ordered_data_string(mock_data)
|
239
|
-
end
|
240
|
-
|
241
|
-
|
242
|
-
def test_ordered_data_string_ruby_paths
|
243
|
-
with_config :render_lang => 'ruby', :render_paths => true do
|
244
|
-
expected = <<STR
|
245
|
-
{
|
246
|
-
"/acks/0/0" => 56,
|
247
|
-
"/acks/0/1" => 78,
|
248
|
-
"/acks/1/0" => "12",
|
249
|
-
"/acks/1/1" => "34",
|
250
|
-
"/root/0/0" => "B1",
|
251
|
-
"/root/0/1" => "B2",
|
252
|
-
"/root/1/0" => "A1",
|
253
|
-
"/root/1/1" => "A2",
|
254
|
-
"/root/2/0" => "C1",
|
255
|
-
"/root/2/1" => "C2",
|
256
|
-
"/root/2/2/0" => "C3a",
|
257
|
-
"/root/2/2/1" => "C3b",
|
258
|
-
"/root/3/test/0/0" => "D1a\\nContent goes here",
|
259
|
-
"/root/3/test/0/1" => "D1b",
|
260
|
-
"/root/3/test/1" => "D2",
|
261
|
-
"/root/3/tests/0" => "D3a",
|
262
|
-
"/root/3/tests/1" => "D3b",
|
263
|
-
"/subs/0" => "a",
|
264
|
-
"/subs/1" => "b",
|
265
|
-
"/tests/foo" => :bar,
|
266
|
-
"/tests/test/0/0" => 1,
|
267
|
-
"/tests/test/0/1" => 2,
|
268
|
-
"/tests/test/1" => 2.123
|
269
|
-
}
|
270
|
-
STR
|
271
|
-
|
272
|
-
assert_equal expected.strip, Kronk::Diff.ordered_data_string(mock_data)
|
273
|
-
end
|
274
|
-
end
|
275
|
-
|
276
|
-
|
277
|
-
def test_ordered_data_string_struct_ruby
|
278
|
-
with_config :render_lang => 'ruby' do
|
279
|
-
expected = <<STR
|
280
|
-
{
|
281
|
-
"acks" => [
|
282
|
-
[
|
283
|
-
Fixnum,
|
284
|
-
Fixnum
|
285
|
-
],
|
286
|
-
[
|
287
|
-
String,
|
288
|
-
String
|
289
|
-
]
|
290
|
-
],
|
291
|
-
"root" => [
|
292
|
-
[
|
293
|
-
String,
|
294
|
-
String
|
295
|
-
],
|
296
|
-
[
|
297
|
-
String,
|
298
|
-
String
|
299
|
-
],
|
300
|
-
[
|
301
|
-
String,
|
302
|
-
String,
|
303
|
-
[
|
304
|
-
String,
|
305
|
-
String
|
306
|
-
]
|
307
|
-
],
|
308
|
-
{
|
309
|
-
:tests => [
|
310
|
-
String,
|
311
|
-
String
|
312
|
-
],
|
313
|
-
"test" => [
|
314
|
-
[
|
315
|
-
String,
|
316
|
-
String
|
317
|
-
],
|
318
|
-
String
|
319
|
-
]
|
320
|
-
}
|
321
|
-
],
|
322
|
-
"subs" => [
|
323
|
-
String,
|
324
|
-
String
|
325
|
-
],
|
326
|
-
"tests" => {
|
327
|
-
:foo => Symbol,
|
328
|
-
"test" => [
|
329
|
-
[
|
330
|
-
Fixnum,
|
331
|
-
Fixnum
|
332
|
-
],
|
333
|
-
Float
|
334
|
-
]
|
335
|
-
}
|
336
|
-
}
|
337
|
-
STR
|
338
|
-
|
339
|
-
assert_equal expected.strip,
|
340
|
-
Kronk::Diff.ordered_data_string(mock_data, true)
|
341
|
-
end
|
42
|
+
assert_equal Kronk::DataString.new(mock_data), diff.str1
|
43
|
+
assert_equal Kronk::DataString.new(other_data), diff.str2
|
342
44
|
end
|
343
45
|
|
344
46
|
|
@@ -579,7 +281,7 @@ STR
|
|
579
281
|
(<<-STR
|
580
282
|
\e[1;33m--- test/mocks/200_response_diff.json
|
581
283
|
+++ test/mocks/200_response.json\e[0m
|
582
|
-
\e[1;35m@@ -6,7 +6,7 @@\e[0m business/description
|
284
|
+
\e[1;35m@@ -6,7 +6,7 @@\e[0m /business/description
|
583
285
|
"additional_urls": [
|
584
286
|
{
|
585
287
|
"destination": "http://example.com",
|
@@ -588,7 +290,7 @@ STR
|
|
588
290
|
}
|
589
291
|
],
|
590
292
|
"general_info": "<p>A Paint Your Own Pottery Studios..</p>",
|
591
|
-
\e[1;35m@@ -15,11 +15,12 @@\e[0m business/description
|
293
|
+
\e[1;35m@@ -15,11 +15,12 @@\e[0m /business/description
|
592
294
|
"slogan": "<p>Pottery YOU dress up</p>"
|
593
295
|
},
|
594
296
|
"distance": 0.0,
|
@@ -603,7 +305,7 @@ STR
|
|
603
305
|
"improvable": true,
|
604
306
|
"latitude": 42.882561,
|
605
307
|
"listing_id": "1234",
|
606
|
-
\e[1;35m@@ -34,12 +35,12 @@\e[0m business
|
308
|
+
\e[1;35m@@ -34,12 +35,12 @@\e[0m /business
|
607
309
|
"rating_count": 0,
|
608
310
|
"red_listing": false,
|
609
311
|
"state": "MI",
|
@@ -667,6 +369,7 @@ STR
|
|
667
369
|
str = <<STR
|
668
370
|
--- left
|
669
371
|
+++ right
|
372
|
+
@@ -1,17 +1,16 @@
|
670
373
|
- HTTP/1.1 302 Found
|
671
374
|
- Location: http://igoogle.com/
|
672
375
|
+ HTTP/1.1 301 Moved Permanently
|
@@ -698,6 +401,7 @@ STR
|
|
698
401
|
str = <<STR
|
699
402
|
--- left
|
700
403
|
+++ right
|
404
|
+
@@ -1,17 +1,16 @@
|
701
405
|
1| - HTTP/1.1 302 Found
|
702
406
|
2| - Location: http://igoogle.com/
|
703
407
|
| 1 + HTTP/1.1 301 Moved Permanently
|
@@ -730,6 +434,7 @@ STR
|
|
730
434
|
str = <<STR
|
731
435
|
\e[1;33m--- left
|
732
436
|
+++ right\033[0m
|
437
|
+
\e[1;35m@@ -1,17 +1,16 @@\e[0m
|
733
438
|
\033[1;31m- HTTP/1.1 302 Found\033[0m
|
734
439
|
\033[1;31m- Location: http://igoogle.com/\033[0m
|
735
440
|
\033[1;32m+ HTTP/1.1 301 Moved Permanently\033[0m
|
data/test/test_helper.rb
CHANGED
data/test/test_kronk.rb
CHANGED
@@ -4,6 +4,7 @@ class TestKronk < Test::Unit::TestCase
|
|
4
4
|
|
5
5
|
def test_default_config
|
6
6
|
expected = {
|
7
|
+
:async => 'auto',
|
7
8
|
:content_types => {
|
8
9
|
'js' => 'JSON',
|
9
10
|
'json' => 'JSON',
|
@@ -31,6 +32,7 @@ class TestKronk < Test::Unit::TestCase
|
|
31
32
|
def test_load_config
|
32
33
|
with_config do
|
33
34
|
mock_config = {
|
35
|
+
:async => false,
|
34
36
|
:content_types => {
|
35
37
|
'soap' => "SOAPParser",
|
36
38
|
'js' => "JsEngine"
|
@@ -60,6 +62,7 @@ class TestKronk < Test::Unit::TestCase
|
|
60
62
|
Kronk.load_config "foobar"
|
61
63
|
|
62
64
|
expected = {
|
65
|
+
:async => false,
|
63
66
|
:content_types => {
|
64
67
|
'soap' => "SOAPParser",
|
65
68
|
'js' => "JsEngine",
|
@@ -80,7 +83,7 @@ class TestKronk < Test::Unit::TestCase
|
|
80
83
|
:ignore_headers => ["Content-Type"],
|
81
84
|
:uri_options => {'example.com' => {:parser => 'JSON'}},
|
82
85
|
:user_agents =>
|
83
|
-
Kronk::USER_AGENTS.merge(
|
86
|
+
Kronk::USER_AGENTS.merge('win_ie6' => 'piece of crap browser'),
|
84
87
|
:foo => :bar
|
85
88
|
}
|
86
89
|
|
@@ -365,11 +368,11 @@ class TestKronk < Test::Unit::TestCase
|
|
365
368
|
:show_headers => true,
|
366
369
|
:raw => true
|
367
370
|
|
368
|
-
resp1 = Kronk.
|
371
|
+
resp1 = Kronk.request "test/mocks/200_response.json",
|
369
372
|
:show_headers => true,
|
370
373
|
:raw => true
|
371
374
|
|
372
|
-
resp2 = Kronk.
|
375
|
+
resp2 = Kronk.request "test/mocks/200_response.xml",
|
373
376
|
:show_headers => true,
|
374
377
|
:raw => true
|
375
378
|
|
@@ -446,10 +449,10 @@ class TestKronk < Test::Unit::TestCase
|
|
446
449
|
"test/mocks/200_response.xml",
|
447
450
|
:show_headers => true
|
448
451
|
|
449
|
-
resp1 = Kronk.
|
452
|
+
resp1 = Kronk.request "test/mocks/200_response.json",
|
450
453
|
:show_headers => true
|
451
454
|
|
452
|
-
resp2 = Kronk.
|
455
|
+
resp2 = Kronk.request "test/mocks/200_response.xml",
|
453
456
|
:show_headers => true
|
454
457
|
|
455
458
|
exp_diff = Kronk::Diff.new_from_data \
|
@@ -469,13 +472,15 @@ class TestKronk < Test::Unit::TestCase
|
|
469
472
|
req = Kronk::Request.new "http://www.google.com/"
|
470
473
|
req.stubs(:retrieve).returns res
|
471
474
|
|
472
|
-
Kronk::Request.stubs(:new).
|
475
|
+
Kronk::Request.stubs(:new).
|
476
|
+
with("http://www.google.com/",{:follow_redirects => true}).returns req
|
477
|
+
|
473
478
|
Kronk::Request.expects(:new).
|
474
479
|
with("http://www.google.com/", :follow_redirects => true).returns req
|
475
480
|
|
476
481
|
assert_raises Timeout::Error do
|
477
482
|
timeout(2) do
|
478
|
-
Kronk.
|
483
|
+
Kronk.request "http://www.google.com/", :follow_redirects => true
|
479
484
|
end
|
480
485
|
end
|
481
486
|
end
|
@@ -487,38 +492,39 @@ class TestKronk < Test::Unit::TestCase
|
|
487
492
|
req.stubs(:retrieve).returns res
|
488
493
|
|
489
494
|
Kronk::Request.expects(:new).
|
490
|
-
with("http://www.google.com/",{}).returns(req).
|
495
|
+
with("http://www.google.com/",{:follow_redirects => 3}).returns(req).
|
496
|
+
times(3)
|
491
497
|
|
492
498
|
Kronk::Request.expects(:new).
|
493
499
|
with("http://www.google.com/", :follow_redirects => 3).returns req
|
494
500
|
|
495
|
-
Kronk.
|
501
|
+
Kronk.request "http://www.google.com/", :follow_redirects => 3
|
496
502
|
end
|
497
503
|
|
498
504
|
|
499
505
|
def test_follow_redirect_no_redirect
|
500
506
|
res = Kronk::Response.new mock_200_response
|
501
507
|
req = Kronk::Request.new "http://www.google.com/"
|
502
|
-
req.stubs(:
|
508
|
+
req.stubs(:request).returns res
|
503
509
|
|
504
510
|
Kronk::Request.expects(:new).with("http://www.google.com/",{}).never
|
505
511
|
Kronk::Request.expects(:new).
|
506
512
|
with("http://www.google.com/", :follow_redirects => true).returns req
|
507
513
|
|
508
|
-
Kronk.
|
514
|
+
Kronk.request "http://www.google.com/", :follow_redirects => true
|
509
515
|
end
|
510
516
|
|
511
517
|
|
512
518
|
def test_do_not_follow_redirect
|
513
519
|
res = Kronk::Response.new mock_302_response
|
514
520
|
req = Kronk::Request.new "http://www.google.com/"
|
515
|
-
req.stubs(:
|
521
|
+
req.stubs(:request).returns res
|
516
522
|
|
517
523
|
Kronk::Request.expects(:new).with("http://www.google.com/",{}).never
|
518
524
|
Kronk::Request.expects(:new).
|
519
525
|
with("http://www.google.com/", :follow_redirects => false).returns req
|
520
526
|
|
521
|
-
Kronk.
|
527
|
+
Kronk.request "http://www.google.com/", :follow_redirects => false
|
522
528
|
end
|
523
529
|
|
524
530
|
|
@@ -536,8 +542,8 @@ class TestKronk < Test::Unit::TestCase
|
|
536
542
|
assert_equal 2, kronk.responses.length
|
537
543
|
assert_equal diff, kronk.diff
|
538
544
|
|
539
|
-
resp1 = kronk.
|
540
|
-
resp2 = kronk.
|
545
|
+
resp1 = kronk.request "test/mocks/200_response.xml"
|
546
|
+
resp2 = kronk.request "test/mocks/200_response.json"
|
541
547
|
|
542
548
|
assert_equal json_resp.raw, kronk.response.raw
|
543
549
|
assert_equal json_resp.raw, kronk.responses.last.raw
|
@@ -557,19 +563,6 @@ class TestKronk < Test::Unit::TestCase
|
|
557
563
|
end
|
558
564
|
|
559
565
|
|
560
|
-
def test_parse_data_path_args
|
561
|
-
options = {}
|
562
|
-
argv = %w{this is --argv -- one -two -- -three four}
|
563
|
-
|
564
|
-
options = Kronk::Cmd.parse_data_path_args options, argv
|
565
|
-
|
566
|
-
assert_equal %w{one four}, options[:only_data]
|
567
|
-
assert_equal %w{two - three}, options[:ignore_data]
|
568
|
-
|
569
|
-
assert_equal %w{this is --argv}, argv
|
570
|
-
end
|
571
|
-
|
572
|
-
|
573
566
|
private
|
574
567
|
|
575
568
|
def mock_uri_options
|
data/test/test_path.rb
CHANGED
@@ -63,6 +63,35 @@ class TestPath < Test::Unit::TestCase
|
|
63
63
|
assert data_points.include?(@data['findme'].last)
|
64
64
|
|
65
65
|
assert_equal expected_paths, (expected_paths | paths)
|
66
|
+
|
67
|
+
splat_path = paths.find{|pa| pa[0] == :key1}
|
68
|
+
assert_equal [:key1, :key1a, 3], splat_path.splat[0][1]
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
def test_find_recursive_many_splat
|
73
|
+
path_match = nil
|
74
|
+
|
75
|
+
Kronk::Path.find "**/key1a/**=thing", @data do |data, key, path|
|
76
|
+
path_match = path
|
77
|
+
end
|
78
|
+
|
79
|
+
assert path_match
|
80
|
+
assert_equal [:key1], path_match.splat[0][1]
|
81
|
+
assert_equal [3], path_match.splat[1][1]
|
82
|
+
end
|
83
|
+
|
84
|
+
|
85
|
+
def test_find_recursive_many_splat_end_match
|
86
|
+
path_match = nil
|
87
|
+
|
88
|
+
Kronk::Path.find "**/key1a/**/*=thing", @data do |data, key, path|
|
89
|
+
path_match = path
|
90
|
+
end
|
91
|
+
|
92
|
+
assert path_match
|
93
|
+
assert_equal [:key1], path_match.splat[0][1]
|
94
|
+
assert_equal [3], path_match.splat[1][1]
|
66
95
|
end
|
67
96
|
|
68
97
|
|
data/test/test_path_match.rb
CHANGED
@@ -5,6 +5,12 @@ class TestPathMatch < Test::Unit::TestCase
|
|
5
5
|
def setup
|
6
6
|
@pmatch = Kronk::Path::PathMatch.new %w{path to resource}
|
7
7
|
@pmatch.matches = %w{this is 4 foo}
|
8
|
+
|
9
|
+
@splat = @pmatch.dup
|
10
|
+
@splat.append_splat "first", "path"
|
11
|
+
@splat.append_splat "first", "to"
|
12
|
+
@splat.append_splat "second", "resource"
|
13
|
+
@splat.append_splat "second", "bar"
|
8
14
|
end
|
9
15
|
|
10
16
|
|
@@ -29,9 +35,24 @@ class TestPathMatch < Test::Unit::TestCase
|
|
29
35
|
end
|
30
36
|
|
31
37
|
|
32
|
-
def
|
38
|
+
def test_make_path_consecutive
|
39
|
+
path = @pmatch.make_path "/%3%4/2/path/%1"
|
40
|
+
assert_equal %w{4foo 2 path this}, path
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
def test_make_path_no_splat
|
33
45
|
path = @pmatch.make_path "/%%3/2/path/%4_%1"
|
34
|
-
assert_equal %w{
|
46
|
+
assert_equal %w{3 2 path foo_this}, path
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
def test_make_path_consecutive_no_splat
|
51
|
+
path = @pmatch.make_path "/%%%4/2/path/%1"
|
52
|
+
assert_equal %w{foo 2 path this}, path
|
53
|
+
|
54
|
+
path = @pmatch.make_path "/%4%%/2/path/%1"
|
55
|
+
assert_equal %w{foo 2 path this}, path
|
35
56
|
end
|
36
57
|
|
37
58
|
|
@@ -57,4 +78,28 @@ class TestPathMatch < Test::Unit::TestCase
|
|
57
78
|
path = @pmatch.make_path "/%31/2/path/%4_%1"
|
58
79
|
assert_equal ["", "2", "path", "foo_this"], path
|
59
80
|
end
|
81
|
+
|
82
|
+
|
83
|
+
def test_make_path_splat
|
84
|
+
path = @splat.make_path "/%4%%/2/thing"
|
85
|
+
assert_equal ["foopath", "to", "2", "thing"], path
|
86
|
+
|
87
|
+
path = @splat.make_path "/%4/%%/2/thing"
|
88
|
+
assert_equal ["foo", "path", "to", "2", "thing"], path
|
89
|
+
|
90
|
+
path = @splat.make_path "/%4/bah%%2/thing"
|
91
|
+
assert_equal ["foo", "bahpath", "to2", "thing"], path
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
def test_make_path_splat_multiple
|
96
|
+
path = @splat.make_path "/%4%%%%/2/thing"
|
97
|
+
assert_equal ["foopath", "toresource", "bar", "2", "thing"], path
|
98
|
+
|
99
|
+
path = @splat.make_path "/%4/%%/2/thing/%%"
|
100
|
+
assert_equal ["foo", "path", "to", "2", "thing", "resource", "bar"], path
|
101
|
+
|
102
|
+
path = @splat.make_path "%%/%4/bah%%2/thing/%%"
|
103
|
+
assert_equal %w{path to foo bahresource bar2 thing}, path
|
104
|
+
end
|
60
105
|
end
|
data/test/test_path_matcher.rb
CHANGED
@@ -107,11 +107,12 @@ class TestPathMatcher < Test::Unit::TestCase
|
|
107
107
|
matcher = Kronk::Path::Matcher.new :key => :findme,
|
108
108
|
:recursive => true
|
109
109
|
|
110
|
-
matcher.find_in @data do |data, key|
|
110
|
+
path_matches = matcher.find_in @data do |data, key|
|
111
111
|
keys << key.to_s
|
112
112
|
data_points << data
|
113
113
|
end
|
114
114
|
|
115
|
+
assert path_matches.find{|pm| pm.splat == [[matcher, [:key1, :key1a, 3]]]}
|
115
116
|
assert_equal 3, keys.length
|
116
117
|
assert_equal 1, keys.uniq.length
|
117
118
|
assert_equal "findme", keys.first
|
@@ -204,6 +205,11 @@ class TestPathMatcher < Test::Unit::TestCase
|
|
204
205
|
[:key3]
|
205
206
|
]
|
206
207
|
|
208
|
+
paths.each do |path|
|
209
|
+
assert path.splat.empty?,
|
210
|
+
"Expected empty splat for #{path.inspect} but got #{path.splat.inspect}"
|
211
|
+
end
|
212
|
+
|
207
213
|
assert_equal expected_paths, (expected_paths | paths)
|
208
214
|
assert_equal Kronk::Path::PathMatch, paths.first.class
|
209
215
|
assert_equal expected_paths, (expected_paths | paths.map{|p| p.matches})
|
@@ -269,6 +275,41 @@ class TestPathMatcher < Test::Unit::TestCase
|
|
269
275
|
end
|
270
276
|
|
271
277
|
|
278
|
+
def test_find_in_match_splat
|
279
|
+
matcher = Kronk::Path::Matcher.new :key => "findme",
|
280
|
+
:recursive => true
|
281
|
+
|
282
|
+
matches = matcher.find_in @data
|
283
|
+
|
284
|
+
splat_i = matches.index [:key1, :key1a, 3, :findme]
|
285
|
+
assert_equal [:key1, :key1a, 3], matches[splat_i].splat[0][1]
|
286
|
+
|
287
|
+
splat_i = matches.index ["findme"]
|
288
|
+
assert_equal [], matches[splat_i].splat[0][1]
|
289
|
+
|
290
|
+
splat_i = matches.index ["findme", 2, :findme]
|
291
|
+
assert_equal ["findme", 2], matches[splat_i].splat[0][1]
|
292
|
+
end
|
293
|
+
|
294
|
+
|
295
|
+
def test_find_in_match_splat_value
|
296
|
+
matcher = Kronk::Path::Matcher.new :value => "foobar",
|
297
|
+
:recursive => true
|
298
|
+
|
299
|
+
matches = matcher.find_in @data
|
300
|
+
|
301
|
+
assert(matches.any?{|m|
|
302
|
+
m == [:key1, :key1a, 2] && assert_equal([:key1, :key1a, 2], m.splat[0][1])
|
303
|
+
true
|
304
|
+
})
|
305
|
+
|
306
|
+
assert(matches.any?{|m|
|
307
|
+
m == [:key2] && assert_equal([:key2], m.splat[0][1])
|
308
|
+
true
|
309
|
+
})
|
310
|
+
end
|
311
|
+
|
312
|
+
|
272
313
|
def test_parse_node_range
|
273
314
|
assert_equal 1..4, @matcher.parse_node("1..4")
|
274
315
|
assert_equal 1...4, @matcher.parse_node("1...4")
|