fluentd 0.12.0.pre.2 → 0.12.0.pre.3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of fluentd might be problematic. Click here for more details.

Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/example/v0_12_filter.conf +78 -0
  3. data/fluentd.gemspec +2 -1
  4. data/lib/fluent/agent.rb +2 -1
  5. data/lib/fluent/buffer.rb +9 -5
  6. data/lib/fluent/command/fluentd.rb +4 -0
  7. data/lib/fluent/config/basic_parser.rb +1 -0
  8. data/lib/fluent/config/configure_proxy.rb +7 -7
  9. data/lib/fluent/config/types.rb +1 -0
  10. data/lib/fluent/config/v1_parser.rb +1 -1
  11. data/lib/fluent/engine.rb +0 -25
  12. data/lib/fluent/env.rb +1 -0
  13. data/lib/fluent/event_router.rb +6 -2
  14. data/lib/fluent/filter.rb +12 -1
  15. data/lib/fluent/formatter.rb +85 -16
  16. data/lib/fluent/label.rb +4 -0
  17. data/lib/fluent/output.rb +1 -0
  18. data/lib/fluent/parser.rb +25 -23
  19. data/lib/fluent/plugin.rb +18 -0
  20. data/lib/fluent/plugin/buf_file.rb +1 -1
  21. data/lib/fluent/plugin/in_dummy.rb +103 -0
  22. data/lib/fluent/plugin/in_http.rb +30 -10
  23. data/lib/fluent/plugin/in_syslog.rb +4 -4
  24. data/lib/fluent/plugin/in_tail.rb +6 -6
  25. data/lib/fluent/plugin/out_file.rb +3 -3
  26. data/lib/fluent/plugin/socket_util.rb +2 -2
  27. data/lib/fluent/registry.rb +9 -27
  28. data/lib/fluent/root_agent.rb +26 -7
  29. data/lib/fluent/supervisor.rb +40 -27
  30. data/lib/fluent/test.rb +1 -0
  31. data/lib/fluent/test/base.rb +14 -0
  32. data/lib/fluent/test/filter_test.rb +33 -0
  33. data/lib/fluent/test/output_test.rb +7 -1
  34. data/lib/fluent/version.rb +1 -1
  35. data/test/config/test_config_parser.rb +6 -2
  36. data/test/config/test_configurable.rb +1 -1
  37. data/test/config/test_configure_proxy.rb +1 -1
  38. data/test/config/test_dsl.rb +1 -1
  39. data/test/config/test_literal_parser.rb +2 -2
  40. data/test/config/test_section.rb +1 -1
  41. data/test/config/test_system_config.rb +65 -15
  42. data/test/config/test_types.rb +63 -0
  43. data/test/helper.rb +2 -1
  44. data/test/plugin/test_buf_file.rb +1 -1
  45. data/test/plugin/test_buf_memory.rb +1 -1
  46. data/test/plugin/test_filter_grep.rb +17 -23
  47. data/test/plugin/test_filter_record_transformer.rb +18 -21
  48. data/test/plugin/test_in_dummy.rb +95 -0
  49. data/test/plugin/test_in_exec.rb +1 -1
  50. data/test/plugin/test_in_forward.rb +1 -1
  51. data/test/plugin/test_in_gc_stat.rb +1 -1
  52. data/test/plugin/test_in_http.rb +1 -1
  53. data/test/plugin/test_in_object_space.rb +1 -1
  54. data/test/plugin/test_in_status.rb +1 -1
  55. data/test/plugin/test_in_stream.rb +1 -1
  56. data/test/plugin/test_in_syslog.rb +1 -1
  57. data/test/plugin/test_in_tail.rb +1 -1
  58. data/test/plugin/test_in_tcp.rb +1 -1
  59. data/test/plugin/test_in_udp.rb +1 -1
  60. data/test/plugin/test_out_copy.rb +12 -1
  61. data/test/plugin/test_out_exec.rb +1 -1
  62. data/test/plugin/test_out_exec_filter.rb +1 -1
  63. data/test/plugin/test_out_file.rb +61 -8
  64. data/test/plugin/test_out_forward.rb +1 -1
  65. data/test/plugin/test_out_roundrobin.rb +12 -1
  66. data/test/plugin/test_out_stdout.rb +1 -1
  67. data/test/plugin/test_out_stream.rb +1 -1
  68. data/test/scripts/fluent/plugin/formatter_known.rb +4 -1
  69. data/{lib → test/scripts}/fluent/plugin/out_test.rb +0 -0
  70. data/test/scripts/fluent/plugin/parser_known.rb +2 -1
  71. data/test/test_buffer.rb +1 -1
  72. data/test/test_config.rb +1 -1
  73. data/test/test_configdsl.rb +1 -1
  74. data/test/test_event_router.rb +233 -0
  75. data/test/test_formatter.rb +160 -3
  76. data/test/test_input.rb +30 -0
  77. data/test/test_match.rb +100 -77
  78. data/test/test_mixin.rb +1 -1
  79. data/test/test_output.rb +1 -1
  80. data/test/test_parser.rb +5 -3
  81. data/test/test_plugin_classes.rb +60 -0
  82. metadata +32 -4
@@ -0,0 +1,30 @@
1
+ require_relative 'helper'
2
+ require 'fluent/input'
3
+
4
+ class FluentInputTest < ::Test::Unit::TestCase
5
+ include Fluent
6
+
7
+ def setup
8
+ Fluent::Test.setup
9
+ end
10
+
11
+ def create_driver(conf = '')
12
+ Fluent::Test::InputTestDriver.new(Fluent::Input).configure(conf, true)
13
+ end
14
+
15
+ def test_configure
16
+ d = create_driver
17
+ assert_equal Engine.root_agent.event_router, d.instance.router
18
+
19
+ assert_raise(ArgumentError) {
20
+ create_driver('@label @unknown')
21
+ }
22
+
23
+ Engine.root_agent.add_label('@known')
24
+ d = nil
25
+ assert_nothing_raised {
26
+ d = create_driver('@label @known')
27
+ }
28
+ assert d.instance.router
29
+ end
30
+ end
@@ -1,88 +1,104 @@
1
- require 'helper'
1
+ require_relative 'helper'
2
2
  require 'fluent/match'
3
3
 
4
4
  class MatchTest < Test::Unit::TestCase
5
5
  include Fluent
6
6
 
7
7
  def test_simple
8
- assert_match('a', 'a')
9
- assert_match('a.b', 'a.b')
10
- assert_not_match('a', 'b')
11
- assert_not_match('a.b', 'aab')
8
+ assert_glob_match('a', 'a')
9
+ assert_glob_match('a.b', 'a.b')
10
+ assert_glob_not_match('a', 'b')
11
+ assert_glob_not_match('a.b', 'aab')
12
12
  end
13
13
 
14
14
  def test_wildcard
15
- assert_match('a*', 'a')
16
- assert_match('a*', 'ab')
17
- assert_match('a*', 'abc')
18
-
19
- assert_match('*a', 'a')
20
- assert_match('*a', 'ba')
21
- assert_match('*a', 'cba')
22
-
23
- assert_match('*a*', 'a')
24
- assert_match('*a*', 'ba')
25
- assert_match('*a*', 'ac')
26
- assert_match('*a*', 'bac')
27
-
28
- assert_not_match('a*', 'a.b')
29
- assert_not_match('a*', 'ab.c')
30
- assert_not_match('a*', 'ba')
31
- assert_not_match('*a', 'ab')
32
-
33
- assert_match('a.*', 'a.b')
34
- assert_match('a.*', 'a.c')
35
- assert_not_match('a.*', 'ab')
36
-
37
- assert_match('a.*.c', 'a.b.c')
38
- assert_match('a.*.c', 'a.c.c')
39
- assert_not_match('a.*.c', 'a.c')
15
+ assert_glob_match('a*', 'a')
16
+ assert_glob_match('a*', 'ab')
17
+ assert_glob_match('a*', 'abc')
18
+
19
+ assert_glob_match('*a', 'a')
20
+ assert_glob_match('*a', 'ba')
21
+ assert_glob_match('*a', 'cba')
22
+
23
+ assert_glob_match('*a*', 'a')
24
+ assert_glob_match('*a*', 'ba')
25
+ assert_glob_match('*a*', 'ac')
26
+ assert_glob_match('*a*', 'bac')
27
+
28
+ assert_glob_not_match('a*', 'a.b')
29
+ assert_glob_not_match('a*', 'ab.c')
30
+ assert_glob_not_match('a*', 'ba')
31
+ assert_glob_not_match('*a', 'ab')
32
+
33
+ assert_glob_match('a.*', 'a.b')
34
+ assert_glob_match('a.*', 'a.c')
35
+ assert_glob_not_match('a.*', 'ab')
36
+
37
+ assert_glob_match('a.*.c', 'a.b.c')
38
+ assert_glob_match('a.*.c', 'a.c.c')
39
+ assert_glob_not_match('a.*.c', 'a.c')
40
40
  end
41
41
 
42
42
  def test_recursive_wildcard
43
- assert_match('a.**', 'a')
44
- assert_not_match('a.**', 'ab')
45
- assert_not_match('a.**', 'abc')
46
- assert_match('a.**', 'a.b')
47
- assert_not_match('a.**', 'ab.c')
48
- assert_not_match('a.**', 'ab.d.e')
49
-
50
- assert_match('a**', 'a')
51
- assert_match('a**', 'ab')
52
- assert_match('a**', 'abc')
53
- assert_match('a**', 'a.b')
54
- assert_match('a**', 'ab.c')
55
- assert_match('a**', 'ab.d.e')
56
-
57
- assert_match('**.a', 'a')
58
- assert_not_match('**.a', 'ba')
59
- assert_not_match('**.a', 'c.ba')
60
- assert_match('**.a', 'b.a')
61
- assert_match('**.a', 'cb.a')
62
- assert_match('**.a', 'd.e.a')
63
-
64
- assert_match('**a', 'a')
65
- assert_match('**a', 'ba')
66
- assert_match('**a', 'c.ba')
67
- assert_match('**a', 'b.a')
68
- assert_match('**a', 'cb.a')
69
- assert_match('**a', 'd.e.a')
43
+ assert_glob_match('a.**', 'a')
44
+ assert_glob_not_match('a.**', 'ab')
45
+ assert_glob_not_match('a.**', 'abc')
46
+ assert_glob_match('a.**', 'a.b')
47
+ assert_glob_not_match('a.**', 'ab.c')
48
+ assert_glob_not_match('a.**', 'ab.d.e')
49
+
50
+ assert_glob_match('a**', 'a')
51
+ assert_glob_match('a**', 'ab')
52
+ assert_glob_match('a**', 'abc')
53
+ assert_glob_match('a**', 'a.b')
54
+ assert_glob_match('a**', 'ab.c')
55
+ assert_glob_match('a**', 'ab.d.e')
56
+
57
+ assert_glob_match('**.a', 'a')
58
+ assert_glob_not_match('**.a', 'ba')
59
+ assert_glob_not_match('**.a', 'c.ba')
60
+ assert_glob_match('**.a', 'b.a')
61
+ assert_glob_match('**.a', 'cb.a')
62
+ assert_glob_match('**.a', 'd.e.a')
63
+
64
+ assert_glob_match('**a', 'a')
65
+ assert_glob_match('**a', 'ba')
66
+ assert_glob_match('**a', 'c.ba')
67
+ assert_glob_match('**a', 'b.a')
68
+ assert_glob_match('**a', 'cb.a')
69
+ assert_glob_match('**a', 'd.e.a')
70
70
  end
71
71
 
72
72
  def test_or
73
- assert_match('a.{b,c}', 'a.b')
74
- assert_match('a.{b,c}', 'a.c')
75
- assert_not_match('a.{b,c}', 'a.d')
76
-
77
- assert_match('a.{b,c}.**', 'a.b')
78
- assert_match('a.{b,c}.**', 'a.c')
79
- assert_not_match('a.{b,c}.**', 'a.d')
80
- assert_not_match('a.{b,c}.**', 'a.cd')
81
-
82
- assert_match('a.{b.**,c}', 'a.b')
83
- assert_match('a.{b.**,c}', 'a.b.c')
84
- assert_match('a.{b.**,c}', 'a.c')
85
- assert_not_match('a.{b.**,c}', 'a.c.d')
73
+ assert_glob_match('a.{b,c}', 'a.b')
74
+ assert_glob_match('a.{b,c}', 'a.c')
75
+ assert_glob_not_match('a.{b,c}', 'a.d')
76
+
77
+ assert_glob_match('a.{b,c}.**', 'a.b')
78
+ assert_glob_match('a.{b,c}.**', 'a.c')
79
+ assert_glob_not_match('a.{b,c}.**', 'a.d')
80
+ assert_glob_not_match('a.{b,c}.**', 'a.cd')
81
+
82
+ assert_glob_match('a.{b.**,c}', 'a.b')
83
+ assert_glob_match('a.{b.**,c}', 'a.b.c')
84
+ assert_glob_match('a.{b.**,c}', 'a.c')
85
+ assert_glob_not_match('a.{b.**,c}', 'a.c.d')
86
+ end
87
+
88
+ def test_multi_pattern_or
89
+ assert_or_match('a.b a.c', 'a.b')
90
+ assert_or_match('a.b a.c', 'a.c')
91
+ assert_or_not_match('a.b a.c', 'a.d')
92
+
93
+ assert_or_match('a.b.** a.c.**', 'a.b')
94
+ assert_or_match('a.b.** a.c.**', 'a.c')
95
+ assert_or_not_match('a.b.** a.c.**', 'a.d')
96
+ assert_or_not_match('a.b.** a.c.**', 'a.cd')
97
+
98
+ assert_or_match('a.b.** a.c', 'a.b')
99
+ assert_or_match('a.b.** a.c', 'a.b.c')
100
+ assert_or_match('a.b.** a.c', 'a.c')
101
+ assert_or_not_match('a.b.** a.c', 'a.c.d')
86
102
  end
87
103
 
88
104
  #def test_character_class
@@ -101,14 +117,21 @@ class MatchTest < Test::Unit::TestCase
101
117
  # assert_not_match('[a-b0-9]', 'c')
102
118
  #end
103
119
 
104
- def assert_match(pat, str)
105
- m = GlobMatchPattern.new(pat)
106
- assert_equal true, m.match(str)
120
+ def assert_glob_match(pat, str)
121
+ assert_true GlobMatchPattern.new(pat).match(str)
122
+ assert_true EventRouter::Rule.new(pat, nil).match?(str)
107
123
  end
108
124
 
109
- def assert_not_match(pat, str)
110
- m = GlobMatchPattern.new(pat)
111
- assert_equal false, m.match(str)
125
+ def assert_glob_not_match(pat, str)
126
+ assert_false GlobMatchPattern.new(pat).match(str)
127
+ assert_false EventRouter::Rule.new(pat, nil).match?(str)
112
128
  end
113
- end
114
129
 
130
+ def assert_or_match(pats, str)
131
+ assert_true EventRouter::Rule.new(pats, nil).match?(str)
132
+ end
133
+
134
+ def assert_or_not_match(pats, str)
135
+ assert_false EventRouter::Rule.new(pats, nil).match?(str)
136
+ end
137
+ end
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require_relative 'helper'
2
2
  require 'fluent/mixin'
3
3
  require 'fluent/env'
4
4
  require 'fluent/plugin'
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require_relative 'helper'
2
2
  require 'fluent/test'
3
3
  require 'fluent/output'
4
4
 
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require_relative 'helper'
2
2
  require 'fluent/test'
3
3
  require 'fluent/parser'
4
4
 
@@ -667,11 +667,13 @@ EOS
667
667
  end
668
668
  end
669
669
 
670
- def test_lookup_known_parser
670
+ data('register_formatter' => 'known', 'register_template' => 'known_old')
671
+ def test_lookup_known_parser(data)
671
672
  $LOAD_PATH.unshift(File.join(File.expand_path(File.dirname(__FILE__)), 'scripts'))
672
673
  assert_nothing_raised ConfigError do
673
- TextParser::TEMPLATE_REGISTRY.lookup('known')
674
+ TextParser::TEMPLATE_REGISTRY.lookup(data)
674
675
  end
676
+ $LOAD_PATH.shift
675
677
  end
676
678
 
677
679
  def test_parse_with_return
@@ -0,0 +1,60 @@
1
+ require_relative 'helper'
2
+
3
+ module FluentTest
4
+ class FluentTestOutput < ::Fluent::Output
5
+ def initialize
6
+ super
7
+ @events = Hash.new { |h, k| h[k] = [] }
8
+ end
9
+
10
+ attr_reader :events
11
+
12
+ def emit(tag, es, chain)
13
+ es.each { |time, record|
14
+ @events[tag] << record
15
+ }
16
+ end
17
+ end
18
+
19
+ class FluentTestErrorOutput < ::Fluent::BufferedOutput
20
+ def format(tag, time, record)
21
+ raise "emit error!"
22
+ end
23
+
24
+ def write(chunk)
25
+ raise "chunk error!"
26
+ end
27
+ end
28
+
29
+ class FluentTestFilter < ::Fluent::Filter
30
+ def initialize(field = '__test__')
31
+ super()
32
+ @num = 0
33
+ @field = field
34
+ end
35
+
36
+ attr_reader :num
37
+
38
+ def filter(tag, time, record)
39
+ record[@field] = @num
40
+ @num += 1
41
+ record
42
+ end
43
+ end
44
+
45
+ class TestEmitErrorHandler
46
+ def initialize
47
+ @events = Hash.new { |h, k| h[k] = [] }
48
+ end
49
+
50
+ attr_reader :events
51
+
52
+ def handle_emit_error(tag, time, record, error)
53
+ @events[tag] << record
54
+ end
55
+
56
+ def handle_emits_error(tag, es, error)
57
+ es.each { |time,record| handle_emit_error(tag, time, record, error) }
58
+ end
59
+ end
60
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluentd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0.pre.2
4
+ version: 0.12.0.pre.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-31 00:00:00.000000000 Z
11
+ date: 2014-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -252,6 +252,20 @@ dependencies:
252
252
  - - "~>"
253
253
  - !ruby/object:Gem::Version
254
254
  version: 3.0.2
255
+ - !ruby/object:Gem::Dependency
256
+ name: test-unit-rr
257
+ requirement: !ruby/object:Gem::Requirement
258
+ requirements:
259
+ - - "~>"
260
+ - !ruby/object:Gem::Version
261
+ version: 1.0.3
262
+ type: :development
263
+ prerelease: false
264
+ version_requirements: !ruby/object:Gem::Requirement
265
+ requirements:
266
+ - - "~>"
267
+ - !ruby/object:Gem::Version
268
+ version: 1.0.3
255
269
  description: Fluentd is an open source data collector designed to scale and simplify
256
270
  log management. It can collect, process and ship many kinds of data in near real-time.
257
271
  email:
@@ -286,6 +300,7 @@ files:
286
300
  - example/out_copy.conf
287
301
  - example/out_file.conf
288
302
  - example/out_forward.conf
303
+ - example/v0_12_filter.conf
289
304
  - example/v1_literal_example.conf
290
305
  - fluent.conf
291
306
  - fluentd.gemspec
@@ -328,6 +343,7 @@ files:
328
343
  - lib/fluent/plugin/filter_grep.rb
329
344
  - lib/fluent/plugin/filter_record_transformer.rb
330
345
  - lib/fluent/plugin/in_debug_agent.rb
346
+ - lib/fluent/plugin/in_dummy.rb
331
347
  - lib/fluent/plugin/in_exec.rb
332
348
  - lib/fluent/plugin/in_forward.rb
333
349
  - lib/fluent/plugin/in_gc_stat.rb
@@ -350,7 +366,6 @@ files:
350
366
  - lib/fluent/plugin/out_roundrobin.rb
351
367
  - lib/fluent/plugin/out_stdout.rb
352
368
  - lib/fluent/plugin/out_stream.rb
353
- - lib/fluent/plugin/out_test.rb
354
369
  - lib/fluent/plugin/socket_util.rb
355
370
  - lib/fluent/process.rb
356
371
  - lib/fluent/registry.rb
@@ -359,6 +374,7 @@ files:
359
374
  - lib/fluent/supervisor.rb
360
375
  - lib/fluent/test.rb
361
376
  - lib/fluent/test/base.rb
377
+ - lib/fluent/test/filter_test.rb
362
378
  - lib/fluent/test/input_test.rb
363
379
  - lib/fluent/test/output_test.rb
364
380
  - lib/fluent/timezone.rb
@@ -371,6 +387,7 @@ files:
371
387
  - test/config/test_literal_parser.rb
372
388
  - test/config/test_section.rb
373
389
  - test/config/test_system_config.rb
390
+ - test/config/test_types.rb
374
391
  - test/helper.rb
375
392
  - test/plugin/data/2010/01/20100102-030405.log
376
393
  - test/plugin/data/2010/01/20100102-030406.log
@@ -382,6 +399,7 @@ files:
382
399
  - test/plugin/test_buf_memory.rb
383
400
  - test/plugin/test_filter_grep.rb
384
401
  - test/plugin/test_filter_record_transformer.rb
402
+ - test/plugin/test_in_dummy.rb
385
403
  - test/plugin/test_in_exec.rb
386
404
  - test/plugin/test_in_forward.rb
387
405
  - test/plugin/test_in_gc_stat.rb
@@ -403,15 +421,19 @@ files:
403
421
  - test/plugin/test_out_stream.rb
404
422
  - test/scripts/exec_script.rb
405
423
  - test/scripts/fluent/plugin/formatter_known.rb
424
+ - test/scripts/fluent/plugin/out_test.rb
406
425
  - test/scripts/fluent/plugin/parser_known.rb
407
426
  - test/test_buffer.rb
408
427
  - test/test_config.rb
409
428
  - test/test_configdsl.rb
429
+ - test/test_event_router.rb
410
430
  - test/test_formatter.rb
431
+ - test/test_input.rb
411
432
  - test/test_match.rb
412
433
  - test/test_mixin.rb
413
434
  - test/test_output.rb
414
435
  - test/test_parser.rb
436
+ - test/test_plugin_classes.rb
415
437
  homepage: http://fluentd.org/
416
438
  licenses: []
417
439
  metadata: {}
@@ -423,7 +445,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
423
445
  requirements:
424
446
  - - ">="
425
447
  - !ruby/object:Gem::Version
426
- version: 1.9.2
448
+ version: 1.9.3
427
449
  required_rubygems_version: !ruby/object:Gem::Requirement
428
450
  requirements:
429
451
  - - ">"
@@ -444,6 +466,7 @@ test_files:
444
466
  - test/config/test_literal_parser.rb
445
467
  - test/config/test_section.rb
446
468
  - test/config/test_system_config.rb
469
+ - test/config/test_types.rb
447
470
  - test/helper.rb
448
471
  - test/plugin/data/2010/01/20100102-030405.log
449
472
  - test/plugin/data/2010/01/20100102-030406.log
@@ -455,6 +478,7 @@ test_files:
455
478
  - test/plugin/test_buf_memory.rb
456
479
  - test/plugin/test_filter_grep.rb
457
480
  - test/plugin/test_filter_record_transformer.rb
481
+ - test/plugin/test_in_dummy.rb
458
482
  - test/plugin/test_in_exec.rb
459
483
  - test/plugin/test_in_forward.rb
460
484
  - test/plugin/test_in_gc_stat.rb
@@ -476,12 +500,16 @@ test_files:
476
500
  - test/plugin/test_out_stream.rb
477
501
  - test/scripts/exec_script.rb
478
502
  - test/scripts/fluent/plugin/formatter_known.rb
503
+ - test/scripts/fluent/plugin/out_test.rb
479
504
  - test/scripts/fluent/plugin/parser_known.rb
480
505
  - test/test_buffer.rb
481
506
  - test/test_config.rb
482
507
  - test/test_configdsl.rb
508
+ - test/test_event_router.rb
483
509
  - test/test_formatter.rb
510
+ - test/test_input.rb
484
511
  - test/test_match.rb
485
512
  - test/test_mixin.rb
486
513
  - test/test_output.rb
487
514
  - test/test_parser.rb
515
+ - test/test_plugin_classes.rb