langscan 1.2-x86-mswin32-60

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.
Files changed (180) hide show
  1. data/AUTHORS.txt +19 -0
  2. data/History.txt +126 -0
  3. data/Manifest.txt +167 -0
  4. data/README.rdoc +91 -0
  5. data/Rakefile +40 -0
  6. data/ext/langscan/_make_c.rb +20 -0
  7. data/ext/langscan/_make_h.rb +30 -0
  8. data/ext/langscan/_template.c +134 -0
  9. data/ext/langscan/_template.h +53 -0
  10. data/ext/langscan/c/c/Makefile +188 -0
  11. data/ext/langscan/c/c/c.c +134 -0
  12. data/ext/langscan/c/c/c.h +66 -0
  13. data/ext/langscan/c/c/ctok.c +4629 -0
  14. data/ext/langscan/c/c/ctok.l +212 -0
  15. data/ext/langscan/c/c/extconf.rb +3 -0
  16. data/ext/langscan/c/c/modulename.txt +1 -0
  17. data/ext/langscan/c/c/tokenlist.txt +13 -0
  18. data/ext/langscan/csharp/csharp/Makefile +188 -0
  19. data/ext/langscan/csharp/csharp/csharp.c +134 -0
  20. data/ext/langscan/csharp/csharp/csharp.h +65 -0
  21. data/ext/langscan/csharp/csharp/csharptok.c +2971 -0
  22. data/ext/langscan/csharp/csharp/csharptok.l +200 -0
  23. data/ext/langscan/csharp/csharp/extconf.rb +3 -0
  24. data/ext/langscan/csharp/csharp/modulename.txt +1 -0
  25. data/ext/langscan/csharp/csharp/tokenlist.txt +12 -0
  26. data/ext/langscan/d/d/Makefile +188 -0
  27. data/ext/langscan/d/d/d.c +134 -0
  28. data/ext/langscan/d/d/d.h +64 -0
  29. data/ext/langscan/d/d/dtok.c +5468 -0
  30. data/ext/langscan/d/d/dtok.l +282 -0
  31. data/ext/langscan/d/d/extconf.rb +3 -0
  32. data/ext/langscan/d/d/modulename.txt +1 -0
  33. data/ext/langscan/d/d/tokenlist.txt +11 -0
  34. data/ext/langscan/elisp/elisp/Makefile +188 -0
  35. data/ext/langscan/elisp/elisp/elisp.c +134 -0
  36. data/ext/langscan/elisp/elisp/elisp.h +62 -0
  37. data/ext/langscan/elisp/elisp/elisptok.c +2108 -0
  38. data/ext/langscan/elisp/elisp/elisptok.l +151 -0
  39. data/ext/langscan/elisp/elisp/extconf.rb +3 -0
  40. data/ext/langscan/elisp/elisp/modulename.txt +1 -0
  41. data/ext/langscan/elisp/elisp/tokenlist.txt +9 -0
  42. data/ext/langscan/java/java/Makefile +188 -0
  43. data/ext/langscan/java/java/extconf.rb +3 -0
  44. data/ext/langscan/java/java/java.c +134 -0
  45. data/ext/langscan/java/java/java.h +64 -0
  46. data/ext/langscan/java/java/javatok.c +2097 -0
  47. data/ext/langscan/java/java/javatok.l +155 -0
  48. data/ext/langscan/java/java/modulename.txt +1 -0
  49. data/ext/langscan/java/java/tokenlist.txt +11 -0
  50. data/ext/langscan/javascript/javascript/Makefile +188 -0
  51. data/ext/langscan/javascript/javascript/extconf.rb +3 -0
  52. data/ext/langscan/javascript/javascript/javascript.c +134 -0
  53. data/ext/langscan/javascript/javascript/javascript.h +63 -0
  54. data/ext/langscan/javascript/javascript/javascripttok.c +2058 -0
  55. data/ext/langscan/javascript/javascript/javascripttok.l +147 -0
  56. data/ext/langscan/javascript/javascript/modulename.txt +1 -0
  57. data/ext/langscan/javascript/javascript/tokenlist.txt +10 -0
  58. data/ext/langscan/pairmatcher/pairmatcher/Makefile +188 -0
  59. data/ext/langscan/pairmatcher/pairmatcher/extconf.rb +3 -0
  60. data/ext/langscan/pairmatcher/pairmatcher/pairmatcher.c +890 -0
  61. data/ext/langscan/php/php/Makefile +188 -0
  62. data/ext/langscan/php/php/extconf.rb +3 -0
  63. data/ext/langscan/php/php/modulename.txt +1 -0
  64. data/ext/langscan/php/php/php.c +134 -0
  65. data/ext/langscan/php/php/php.h +64 -0
  66. data/ext/langscan/php/php/phptok.c +2413 -0
  67. data/ext/langscan/php/php/phptok.l +212 -0
  68. data/ext/langscan/php/php/tokenlist.txt +11 -0
  69. data/ext/langscan/post-distclean.rb +21 -0
  70. data/ext/langscan/pre-config.rb +57 -0
  71. data/ext/langscan/python/python/Makefile +188 -0
  72. data/ext/langscan/python/python/extconf.rb +3 -0
  73. data/ext/langscan/python/python/modulename.txt +1 -0
  74. data/ext/langscan/python/python/python.c +134 -0
  75. data/ext/langscan/python/python/python.h +61 -0
  76. data/ext/langscan/python/python/pythontok.c +2109 -0
  77. data/ext/langscan/python/python/pythontok.l +155 -0
  78. data/ext/langscan/python/python/tokenlist.txt +8 -0
  79. data/ext/langscan/ruby/compat/ripper/Makefile +189 -0
  80. data/ext/langscan/ruby/compat/ripper/depend +1 -0
  81. data/ext/langscan/ruby/compat/ripper/extconf.rb +4 -0
  82. data/ext/langscan/ruby/compat/ripper/include/eventids1.c +251 -0
  83. data/ext/langscan/ruby/compat/ripper/include/eventids2.c +277 -0
  84. data/ext/langscan/ruby/compat/ripper/include/lex.c +138 -0
  85. data/ext/langscan/ruby/compat/ripper/ripper.c +14420 -0
  86. data/ext/langscan/scheme/scheme/Makefile +188 -0
  87. data/ext/langscan/scheme/scheme/extconf.rb +3 -0
  88. data/ext/langscan/scheme/scheme/modulename.txt +1 -0
  89. data/ext/langscan/scheme/scheme/scheme.c +134 -0
  90. data/ext/langscan/scheme/scheme/scheme.h +60 -0
  91. data/ext/langscan/scheme/scheme/schemetok.c +2454 -0
  92. data/ext/langscan/scheme/scheme/schemetok.l +177 -0
  93. data/ext/langscan/scheme/scheme/tokenlist.txt +7 -0
  94. data/ext/langscan/sh/sh/Makefile +188 -0
  95. data/ext/langscan/sh/sh/extconf.rb +3 -0
  96. data/ext/langscan/sh/sh/modulename.txt +1 -0
  97. data/ext/langscan/sh/sh/sh.c +134 -0
  98. data/ext/langscan/sh/sh/sh.h +61 -0
  99. data/ext/langscan/sh/sh/shtok.c +2477 -0
  100. data/ext/langscan/sh/sh/shtok.l +325 -0
  101. data/ext/langscan/sh/sh/tokenlist.txt +8 -0
  102. data/lib/langscan.rb +124 -0
  103. data/lib/langscan/_common.rb +50 -0
  104. data/lib/langscan/_easyscanner.rb +78 -0
  105. data/lib/langscan/_pairmatcher.rb +46 -0
  106. data/lib/langscan/_type.rb +125 -0
  107. data/lib/langscan/autoconf.rb +51 -0
  108. data/lib/langscan/automake.rb +51 -0
  109. data/lib/langscan/brainfuck.rb +48 -0
  110. data/lib/langscan/c.rb +144 -0
  111. data/lib/langscan/c/c.so +0 -0
  112. data/lib/langscan/csharp.rb +101 -0
  113. data/lib/langscan/csharp/csharp.so +0 -0
  114. data/lib/langscan/css.rb +109 -0
  115. data/lib/langscan/d.rb +201 -0
  116. data/lib/langscan/d/d.so +0 -0
  117. data/lib/langscan/eiffel.rb +167 -0
  118. data/lib/langscan/elisp.rb +132 -0
  119. data/lib/langscan/elisp/elisp.so +0 -0
  120. data/lib/langscan/io.rb +84 -0
  121. data/lib/langscan/java.rb +95 -0
  122. data/lib/langscan/java/java.so +0 -0
  123. data/lib/langscan/javascript.rb +97 -0
  124. data/lib/langscan/javascript/javascript.so +0 -0
  125. data/lib/langscan/lua.rb +116 -0
  126. data/lib/langscan/ocaml.rb +298 -0
  127. data/lib/langscan/ocaml/camlexer.ml +28 -0
  128. data/lib/langscan/ocaml/lexer.mll +230 -0
  129. data/lib/langscan/ocaml/types.ml +36 -0
  130. data/lib/langscan/pairmatcher/pairmatcher.so +0 -0
  131. data/lib/langscan/perl.rb +87 -0
  132. data/lib/langscan/perl/tokenizer.pl +231 -0
  133. data/lib/langscan/php.rb +80 -0
  134. data/lib/langscan/php/php.so +0 -0
  135. data/lib/langscan/python.rb +101 -0
  136. data/lib/langscan/python/python.so +0 -0
  137. data/lib/langscan/rpmspec.rb +71 -0
  138. data/lib/langscan/ruby.rb +164 -0
  139. data/lib/langscan/ruby/compat/README +5 -0
  140. data/lib/langscan/ruby/compat/ripper.rb +4 -0
  141. data/lib/langscan/ruby/compat/ripper.so +0 -0
  142. data/lib/langscan/ruby/compat/ripper/core.rb +918 -0
  143. data/lib/langscan/ruby/compat/ripper/filter.rb +70 -0
  144. data/lib/langscan/ruby/compat/ripper/lexer.rb +179 -0
  145. data/lib/langscan/ruby/compat/ripper/sexp.rb +100 -0
  146. data/lib/langscan/scheme.rb +160 -0
  147. data/lib/langscan/scheme/scheme.so +0 -0
  148. data/lib/langscan/sh.rb +116 -0
  149. data/lib/langscan/sh/sh.so +0 -0
  150. data/lib/langscan/text.rb +37 -0
  151. data/metaconfig +2 -0
  152. data/script/console +10 -0
  153. data/script/destroy +14 -0
  154. data/script/generate +14 -0
  155. data/script/makemanifest.rb +21 -0
  156. data/setup.rb +1604 -0
  157. data/tasks/extconf.rake +13 -0
  158. data/tasks/extconf/langscan.rake +42 -0
  159. data/test/langscan/brainfuck/test/test_scan.rb +55 -0
  160. data/test/langscan/c/test/test_scan.rb +216 -0
  161. data/test/langscan/c/test/test_token.rb +41 -0
  162. data/test/langscan/csharp/test/test_scan.rb +157 -0
  163. data/test/langscan/css/test/test_css.rb +79 -0
  164. data/test/langscan/d/test/test_scan.rb +233 -0
  165. data/test/langscan/d/test/test_token.rb +205 -0
  166. data/test/langscan/eiffel/test/test_eiffel.rb +95 -0
  167. data/test/langscan/elisp/test/test_elisp.rb +177 -0
  168. data/test/langscan/io/test/test_io.rb +79 -0
  169. data/test/langscan/java/test/test_java.rb +74 -0
  170. data/test/langscan/javascript/test/test_javascript.rb +39 -0
  171. data/test/langscan/lua/test/test_lua.rb +69 -0
  172. data/test/langscan/ocaml/test/test_ocaml.rb +161 -0
  173. data/test/langscan/php/test/test_scan.rb +138 -0
  174. data/test/langscan/python/test/test_scan.rb +105 -0
  175. data/test/langscan/rpmspec/test/test_rpmspec.rb +51 -0
  176. data/test/langscan/ruby/test/test_scan.rb +71 -0
  177. data/test/langscan/scheme/test/test_scan.rb +198 -0
  178. data/test/test_helper.rb +7 -0
  179. data/test/test_langscan.rb +123 -0
  180. metadata +320 -0
@@ -0,0 +1,51 @@
1
+ $LOAD_PATH << "../../.." unless $LOAD_PATH.include?("../../..")
2
+ require 'test/unit'
3
+ require 'langscan/rpmspec'
4
+
5
+ class TestRPMSpec < Test::Unit::TestCase
6
+ def assert_yield_any(recv, meth, *args)
7
+ success = false
8
+ recv.__send__(meth, *args) {|*block_args|
9
+ if yield(*block_args)
10
+ assert(true)
11
+ success = true
12
+ break
13
+ end
14
+ }
15
+ assert(false, "no expected yields") unless success
16
+ end
17
+
18
+ def assert_yield_all(recv, meth, *args)
19
+ recv.__send__(meth, *args) {|*block_args|
20
+ if !yield(*block_args)
21
+ assert(false, "unexpected yields")
22
+ return
23
+ end
24
+ }
25
+ assert(true)
26
+ end
27
+
28
+ def test_preamble
29
+ assert_yield_any(LangScan::RPMSpec, :scan, "\nName: gonzui") {|f|
30
+ f.type == :keyword && f.text == 'Name'
31
+ }
32
+ end
33
+
34
+ def test_part
35
+ assert_yield_any(LangScan::RPMSpec, :scan, "\n%description devel") {|f|
36
+ f.type == :keyword && f.text == '%description'
37
+ }
38
+ end
39
+
40
+ def test_comment
41
+ assert_yield_any(LangScan::RPMSpec, :scan, "\n# comment") {|f|
42
+ f.type == :comment && f.text == '# comment'
43
+ }
44
+ end
45
+
46
+ def test_string
47
+ assert_yield_any(LangScan::RPMSpec, :scan, "\nCFLAGS=\"$RPM_OPT_FLAGS -Wall\"") {|f|
48
+ f.type == :string && f.text == '"$RPM_OPT_FLAGS -Wall"'
49
+ }
50
+ end
51
+ end
@@ -0,0 +1,71 @@
1
+ require 'test/unit'
2
+ require 'langscan/ruby'
3
+
4
+ class TestRuby < Test::Unit::TestCase
5
+ def assert_yield_any(recv, meth, *args)
6
+ recv.__send__(meth, *args) {|*block_args|
7
+ if yield(*block_args)
8
+ assert(true)
9
+ return
10
+ end
11
+ }
12
+ assert(false, "no expected yields")
13
+ end
14
+
15
+ def assert_yield_all(recv, meth, *args)
16
+ recv.__send__(meth, *args) {|*block_args|
17
+ if !yield(*block_args)
18
+ assert(false, "unexpected yields")
19
+ return
20
+ end
21
+ }
22
+ assert(true)
23
+ end
24
+
25
+ def test_class
26
+ assert_yield_any(LangScan::Ruby, :scan, "class A\nend") {|f|
27
+ f.type == :classdef && f.text == 'A'
28
+ }
29
+ end
30
+
31
+ def test_module
32
+ assert_yield_any(LangScan::Ruby, :scan, "module A\nend") {|f|
33
+ f.type == :moduledef && f.text == 'A'
34
+ }
35
+ end
36
+
37
+ def test_symbol
38
+ assert_yield_any(LangScan::Ruby, :scan, ":aaa") {|f|
39
+ f.type == :symbol && f.text == 'aaa'
40
+ }
41
+ end
42
+
43
+ def test_const
44
+ assert_yield_any(LangScan::Ruby, :scan, "ABC") {|f|
45
+ f.type == :const && f.text == 'ABC'
46
+ }
47
+ end
48
+
49
+ def assert_fragment_type(type, text, src)
50
+ found = false
51
+ LangScan::Ruby.scan(src) {|f|
52
+ if f.text == text
53
+ if found
54
+ raise "token #{text} occurred twice"
55
+ else
56
+ found = true
57
+ assert_equal(type, f.type, "fragment type of #{text}")
58
+ end
59
+ end
60
+ }
61
+ unless found
62
+ raise "token #{text} not found"
63
+ end
64
+ end
65
+
66
+ def test_singleton_method
67
+ assert_fragment_type(:fundef, 'm', "def o.m() end")
68
+ end
69
+
70
+
71
+ end
@@ -0,0 +1,198 @@
1
+ require 'test/unit'
2
+ require 'langscan/scheme'
3
+
4
+ class TestScheme < Test::Unit::TestCase
5
+ def assert_yield(recv, meth, *args)
6
+ yielded = false
7
+ recv.__send__(meth, *args) {|*block_args|
8
+ yielded = true
9
+ yield(*block_args)
10
+ }
11
+ assert(yielded, "block not yielded")
12
+ end
13
+
14
+ def assert_not_yield(recv, meth, *args)
15
+ yielded = false
16
+ recv.__send__(meth, *args) {|*block_args|
17
+ assert(false, "block yielded")
18
+ }
19
+ end
20
+
21
+ def assert_yield_any(recv, meth, *args)
22
+ success = false
23
+ recv.__send__(meth, *args) {|*block_args|
24
+ if yield(*block_args)
25
+ assert(true)
26
+ success = true
27
+ break
28
+ end
29
+ }
30
+ assert(false, "no expected yields") unless success
31
+ end
32
+
33
+ def assert_yield_all(recv, meth, *args)
34
+ recv.__send__(meth, *args) {|*block_args|
35
+ if !yield(*block_args)
36
+ assert(false, "unexpected yields")
37
+ return
38
+ end
39
+ }
40
+ assert(true)
41
+ end
42
+
43
+ def test_fundef
44
+ [
45
+ {:str => "(define (foo))", :text => "foo"},
46
+ {:str => "(define (foo bar))", :text => "foo"},
47
+ {:str => "(define (foo bar) baz)", :text => "foo"},
48
+ {:str => "(define (foo= a) (= a a))", :text => "foo="}
49
+ ].each {|src|
50
+ assert_yield_any(LangScan::Scheme, :scan, src[:str]) {|f|
51
+ f.type == :fundef && f.text == src[:text]
52
+ }
53
+ }
54
+ end
55
+
56
+ def test_funcall
57
+ [
58
+ {:str => "(foo)", :text => "foo"},
59
+ {:str => "(foo bar)", :text => "foo"},
60
+ {:str => "(let ((a 1) (b 2)) (+ a b))", :text => "+"},
61
+ {:str => "(do ((i 0 (+ i 1))) ((= i 10)) (foo))", :text => "foo"}
62
+ ].each {|src|
63
+ assert_yield_any(LangScan::Scheme, :scan, src[:str]) {|f|
64
+ f.type == :funcall && f.text == src[:text]
65
+ }
66
+ }
67
+ end
68
+
69
+ def test_string
70
+ [
71
+ '"foo"',
72
+ %Q!"foo\nbar"!,
73
+ '"foo\"bar"',
74
+ '"foo\\"',
75
+ ].each { |src|
76
+ assert_yield(LangScan::Scheme, :scan, src) {|f|
77
+ f.type == :string
78
+ }
79
+ }
80
+ end
81
+
82
+ def test_ident
83
+ %w(foo foo= foo? + <=>? @foo fo!o ~foo foo^ foo$ &foo ** +- .foo
84
+ /hoge:
85
+ ).each {|src|
86
+ assert_yield_any(LangScan::Scheme, :scan, src) {|f|
87
+ f.type == :ident
88
+ }
89
+ }
90
+ end
91
+
92
+ def test_quote
93
+ [
94
+ "'(a b c)",
95
+ "(quote (a b c)",
96
+ "(quasiquote (a b c))",
97
+ ].each { |src|
98
+ assert_yield_all(LangScan::Scheme, :scan, src) {|f|
99
+ f.type != :funcall
100
+ }
101
+ }
102
+ end
103
+
104
+ def test_number
105
+ %w(
106
+ 1 -1 1050 #d1 #o0766 #b10 #xab #d#e16 #e#x1f #e10
107
+ ).each { |src|
108
+ assert_yield_any(LangScan::Scheme, :scan, src) {|f|
109
+ f.type == :integer
110
+ }
111
+ }
112
+
113
+ %w(
114
+ 10.5 .543 .5e-5 10e10 10e-10 10#f4 10##.#d2 10/4 #xe/f
115
+ ).each { |src|
116
+ assert_yield_any(LangScan::Scheme, :scan, src) {|f|
117
+ f.type == :floating
118
+ }
119
+ }
120
+
121
+ %w(
122
+ 3+i +i -i 0+i 0-10i #d0-10i -10i #x-i #d+i #x1+2i #xab+2i
123
+ #x1-2i #xa-2i #xa-i #xab/cd+1/23#i
124
+ ).each { |src|
125
+ assert_yield_any(LangScan::Scheme, :scan, src) {|f|
126
+ f.type == :imaginary
127
+ }
128
+ }
129
+ end
130
+
131
+ def test_comment
132
+ [
133
+ '; comment',
134
+ "(foo bar) ; comment"
135
+ ].each { |src|
136
+ assert_yield_any(LangScan::Scheme, :scan, src) {|f|
137
+ f.type == :comment
138
+ }
139
+ }
140
+ end
141
+
142
+ def test_space
143
+ [
144
+ '\ ',
145
+ "' 'foo bar"
146
+ ].each { |src|
147
+ assert_yield_any(LangScan::Scheme, :scan, src) {|f|
148
+ f.type == :space
149
+ }
150
+ }
151
+ end
152
+
153
+ def assert_fragment_type(type, text, src)
154
+ found = false
155
+ LangScan::Scheme.scan(src) {|f|
156
+ if f.text == text
157
+ if found
158
+ raise "token #{text} occurred twice"
159
+ else
160
+ found = true
161
+ assert_equal(type, f.type, "fragment type of #{text}")
162
+ end
163
+ end
164
+ }
165
+ unless found
166
+ raise "token #{text} not found"
167
+ end
168
+ end
169
+
170
+ def self.define_assert_fragment_type(name, type, text, src)
171
+ self.module_eval {
172
+ define_method("test_#{name}") {
173
+ assert_fragment_type(type, text, src)
174
+ }
175
+ }
176
+ end
177
+
178
+ def test_nest_in_quote
179
+ assert_fragment_type(:ident, 'a', "'(a (b))")
180
+ assert_fragment_type(:ident, 'a', "(quote (a (b)))")
181
+ assert_fragment_type(:ident, 'b', "'(a (b))")
182
+ assert_fragment_type(:ident, 'b', "`(a (b))")
183
+ assert_fragment_type(:ident, 'b', "(quasiquote (a (b)))")
184
+ assert_fragment_type(:ident, 'b', "(quasiquote `(a (unquote (b))))")
185
+ assert_fragment_type(:funcall, 'b', "`(a ,(b))")
186
+ assert_fragment_type(:funcall, 'b', "``(a ,,(b))")
187
+ assert_fragment_type(:funcall, 'b', "`(a ,@(b))")
188
+ assert_fragment_type(:funcall, 'b', "(quasiquote `(a (unquote ,(b))))")
189
+ end
190
+
191
+ def test_let_body
192
+ assert_fragment_type(:funcall, 'y', "(let ((x 1)) ((y)))")
193
+ assert_fragment_type(:funcall, 'y', "(let ((x 1) (z 2)) ((y)))")
194
+ assert_fragment_type(:funcall, 'y', "(let ((x 1) (z 2)) (y))")
195
+ assert_fragment_type(:ident, 'z', "(let ((x 1) (z 2)) ((y)))")
196
+ end
197
+
198
+ end
@@ -0,0 +1,7 @@
1
+ require 'stringio'
2
+ require 'test/unit'
3
+ begin
4
+ require 'redgreen'
5
+ rescue LoadError
6
+ end
7
+ require File.dirname(__FILE__) + '/../lib/langscan'
@@ -0,0 +1,123 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestLangscan < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_c
9
+ fragments = []
10
+ LangScan::C.scan('#include <"stdio.h">') do |fragment|
11
+ fragments << fragment
12
+ end
13
+ assert_equal(6, fragments.size)
14
+ end
15
+
16
+ def test_csharp
17
+ fragments = []
18
+ LangScan::Csharp.scan('namespace Sample{useing System;}') do |fragment|
19
+ fragments << fragment
20
+ end
21
+ assert_equal(9, fragments.size)
22
+ end
23
+
24
+
25
+ def test_d
26
+ fragments = []
27
+ LangScan::D.scan('import std.stdio;') do |fragment|
28
+ fragments << fragment
29
+ end
30
+ assert_equal(6, fragments.size)
31
+ end
32
+
33
+ def test_java
34
+ fragments = []
35
+ LangScan::Java.scan('package com.example;') do |fragment|
36
+ fragments << fragment
37
+ end
38
+ assert_equal(6, fragments.size)
39
+ end
40
+
41
+ def test_ruby
42
+ fragments = []
43
+ LangScan::Ruby.scan('print "Hello", "World"') do |fragment|
44
+ fragments << fragment
45
+ end
46
+ assert_equal(10, fragments.size)
47
+ end
48
+
49
+ def test_python
50
+ fragments = []
51
+ LangScan::Python.scan('puts "Hello World"') do |fragment|
52
+ fragments << fragment
53
+ end
54
+ assert_equal(3, fragments.size)
55
+ end
56
+
57
+ def test_javascript
58
+ fragments = []
59
+ LangScan::JavaScript.scan('(function(){})();') do |fragment|
60
+ fragments << fragment
61
+ end
62
+ assert_equal(10, fragments.size)
63
+ end
64
+
65
+ def test_css
66
+ fragments = []
67
+ LangScan::CSS.scan('div#example p.sample { border: 1px solid red; }') do |fragment|
68
+ fragments << fragment
69
+ end
70
+ assert_equal(14, fragments.size)
71
+ end
72
+
73
+ def test_php
74
+ fragments = []
75
+ LangScan::PHP.scan('<?php echo "php"') do |fragment|
76
+ fragments << fragment
77
+ end
78
+ assert_equal(4, fragments.size)
79
+ end
80
+
81
+ def test_sh
82
+ fragments = []
83
+ LangScan::Shell.scan('#!/bin/sh\necho $1') do |fragment|
84
+ fragments << fragment
85
+ end
86
+ assert_equal(1, fragments.size)
87
+ end
88
+
89
+ def test_text
90
+ fragments = []
91
+ LangScan::Text.scan('This is plain text') do |fragment|
92
+ fragments << fragment
93
+ end
94
+ assert_equal(1, fragments.size)
95
+ end
96
+
97
+ def test_elisp
98
+ fragments = []
99
+ LangScan::EmacsLisp.scan('(line-number-mode 1)') do |fragment|
100
+ fragments << fragment
101
+ end
102
+ assert_equal(5, fragments.size)
103
+ end
104
+
105
+ def test_scheme
106
+ fragments = []
107
+ LangScan::Scheme.scan('(line-number-mode 1)') do |fragment|
108
+ fragments << fragment
109
+ end
110
+ assert_equal(5, fragments.size)
111
+ end
112
+
113
+ def test_brainfuck
114
+ fragments = []
115
+ LangScan::Brainfuck.scan('>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++
116
+ ++>-]<.>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>
117
+ ++++++++[<++++>-]<+.[-]++++++++++.') do |fragment|
118
+ fragments << fragment
119
+ end
120
+ assert_equal(182, fragments.size)
121
+ end
122
+
123
+ end