opal 0.7.2 → 0.8.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +6 -1
  3. data/CHANGELOG.md +29 -0
  4. data/CONTRIBUTING.md +51 -4
  5. data/Gemfile +3 -0
  6. data/README.md +5 -5
  7. data/config.ru +1 -1
  8. data/examples/sinatra/Gemfile +1 -0
  9. data/examples/sinatra/config.ru +13 -3
  10. data/lib/mspec/opal/rake_task.rb +21 -30
  11. data/lib/mspec/opal/runner.rb +37 -0
  12. data/lib/mspec/opal/special_calls.rb +6 -0
  13. data/lib/opal/builder.rb +1 -0
  14. data/lib/opal/builder_processors.rb +5 -2
  15. data/lib/opal/cli_runners/phantom.js +10 -1
  16. data/lib/opal/compiler.rb +6 -3
  17. data/lib/opal/config.rb +48 -0
  18. data/lib/opal/nodes/call.rb +3 -2
  19. data/lib/opal/nodes/literal.rb +19 -2
  20. data/lib/opal/parser/grammar.rb +2224 -2196
  21. data/lib/opal/parser/grammar.y +25 -7
  22. data/lib/opal/parser/lexer.rb +12 -9
  23. data/lib/opal/path_reader.rb +1 -1
  24. data/lib/opal/sprockets/erb.rb +6 -20
  25. data/lib/opal/sprockets/path_reader.rb +4 -2
  26. data/lib/opal/sprockets/processor.rb +135 -80
  27. data/lib/opal/sprockets/server.rb +49 -78
  28. data/lib/opal/sprockets/source_map_header_patch.rb +41 -0
  29. data/lib/opal/sprockets/source_map_server.rb +115 -0
  30. data/lib/opal/version.rb +1 -1
  31. data/lib/tilt/opal.rb +48 -0
  32. data/opal.gemspec +1 -1
  33. data/opal/corelib/array.rb +179 -51
  34. data/opal/corelib/array/inheritance.rb +14 -0
  35. data/opal/corelib/boolean.rb +5 -0
  36. data/opal/corelib/hash.rb +1 -1
  37. data/opal/corelib/kernel.rb +660 -164
  38. data/opal/corelib/match_data.rb +44 -21
  39. data/opal/corelib/module.rb +83 -53
  40. data/opal/corelib/numeric.rb +15 -1
  41. data/opal/corelib/regexp.rb +31 -75
  42. data/opal/corelib/runtime.js +20 -8
  43. data/opal/corelib/string.rb +754 -243
  44. data/opal/corelib/string/inheritance.rb +20 -3
  45. data/opal/corelib/struct.rb +30 -6
  46. data/opal/corelib/variables.rb +2 -2
  47. data/spec/filters/bugs/array.rb +0 -39
  48. data/spec/filters/bugs/kernel.rb +10 -7
  49. data/spec/filters/bugs/module.rb +21 -0
  50. data/spec/filters/bugs/opal.rb +0 -5
  51. data/spec/filters/bugs/singleton.rb +0 -2
  52. data/spec/filters/bugs/string.rb +69 -315
  53. data/spec/filters/bugs/struct.rb +0 -16
  54. data/spec/filters/unsupported/encoding.rb +7 -0
  55. data/spec/filters/unsupported/float.rb +3 -0
  56. data/spec/filters/unsupported/integer_size.rb +52 -0
  57. data/spec/filters/unsupported/marshal.rb +4 -0
  58. data/spec/filters/unsupported/mutable_strings.rb +37 -0
  59. data/spec/filters/unsupported/private_methods.rb +11 -0
  60. data/spec/filters/unsupported/rational_numbers.rb +4 -0
  61. data/spec/filters/unsupported/regular_expressions.rb +47 -0
  62. data/spec/filters/unsupported/symbols.rb +7 -0
  63. data/spec/filters/unsupported/tainted.rb +23 -1
  64. data/spec/filters/unsupported/trusted.rb +5 -0
  65. data/spec/lib/fixtures/complex_sprockets.js.rb.erb +4 -0
  66. data/spec/lib/fixtures/jst_file.js.jst +1 -0
  67. data/spec/lib/parser/call_spec.rb +19 -0
  68. data/spec/lib/parser/def_spec.rb +6 -0
  69. data/spec/lib/sprockets/erb_spec.rb +17 -4
  70. data/spec/lib/sprockets/processor_spec.rb +50 -18
  71. data/spec/lib/sprockets/server_spec.rb +39 -11
  72. data/spec/lib/tilt/opal_spec.rb +19 -0
  73. data/spec/opal/core/kernel/format_spec.rb +10 -10
  74. data/spec/opal/core/language/predefined_spec.rb +10 -0
  75. data/spec/opal/core/object_id_spec.rb +56 -0
  76. data/spec/opal/core/runtime/bridged_classes_spec.rb +4 -4
  77. data/spec/opal/core/runtime_spec.rb +7 -0
  78. data/spec/opal/stdlib/native/native_class_spec.rb +1 -1
  79. data/spec/opal/stdlib/promise/always_spec.rb +30 -0
  80. data/spec/opal/stdlib/promise/then_spec.rb +8 -0
  81. data/spec/opal/stdlib/promise/trace_spec.rb +8 -0
  82. data/spec/rubyspecs +15 -104
  83. data/spec/spec_helper.rb +4 -0
  84. data/stdlib/native.rb +7 -18
  85. data/stdlib/nodejs/file.rb +1 -1
  86. data/stdlib/opal-parser.rb +1 -0
  87. data/stdlib/pp.rb +7 -5
  88. data/stdlib/promise.rb +53 -41
  89. data/tasks/testing.rake +8 -6
  90. metadata +28 -14
  91. data/spec/filters/bugs/match_data.rb +0 -13
  92. data/spec/filters/bugs/numeric.rb +0 -22
  93. data/spec/filters/bugs/regexp.rb +0 -9
  94. data/spec/filters/bugs/unknown.rb +0 -11
@@ -5,6 +5,8 @@ require 'rack/test'
5
5
  describe Opal::Server do
6
6
  include Rack::Test::Methods
7
7
 
8
+ let(:maps_prefix) { described_class::SOURCE_MAPS_PREFIX_PATH }
9
+
8
10
  def app
9
11
  described_class.new { |s|
10
12
  s.main = 'opal'
@@ -19,51 +21,77 @@ describe Opal::Server do
19
21
  expect(last_response).to be_ok
20
22
  end
21
23
 
24
+ it 'serves assets with complex sprockets requires' do
25
+ asset = app.sprockets['complex_sprockets']
26
+ expect(asset).to be_truthy
27
+
28
+ assets = asset.to_a.map do |sub_asset|
29
+ sub_asset.logical_path.gsub(/\.self\.js$/, '.js')
30
+ end
31
+
32
+ %w[
33
+ no_requires.js
34
+ jst_file.js
35
+ required_tree_test/required_file1.js
36
+ required_tree_test/required_file2.js
37
+ file_with_directives.js
38
+ ].each do |logical_path|
39
+ expect(assets).to include(logical_path)
40
+ end
41
+ end
42
+
22
43
  describe 'source maps' do
23
44
  it 'serves map on a top level file' do
24
45
  get '/assets/source_map.js'
25
46
  expect(last_response).to be_ok
26
47
 
27
- get '/assets/source_map.map'
48
+ get maps_prefix+'/source_map.map'
28
49
  expect(last_response).to be_ok
29
50
  end
30
51
 
31
52
  it 'serves map on a subfolder file' do
32
53
  js_path = '/assets/source_map/subfolder/other_file.js'
33
- map_path = '/assets/source_map/subfolder/other_file.map'
54
+ map_path = maps_prefix+'/source_map/subfolder/other_file.map'
34
55
 
35
56
  get js_path
36
57
 
37
58
  expect(last_response).to be_ok
38
- received_map_path = extract_linked_map(last_response.body)
59
+ received_map_path = extract_map_path(last_response)
39
60
  expect(expand_path(received_map_path, js_path+'/..')).to eq(map_path)
40
61
 
41
- get '/assets/source_map/subfolder/other_file.map'
62
+ get maps_prefix+'/source_map/subfolder/other_file.map'
42
63
  expect(last_response).to be_ok
43
64
  end
44
65
 
45
66
  it 'serves map on a subfolder file' do
46
67
  js_path = '/assets/source_map/subfolder/other_file.js'
47
- map_path = '/assets/source_map/subfolder/other_file.map'
68
+ map_path = maps_prefix+'/source_map/subfolder/other_file.map'
48
69
 
49
70
  get js_path
50
71
 
51
72
  expect(last_response).to be_ok
52
- received_map_path = extract_linked_map(last_response.body)
73
+ received_map_path = extract_map_path(last_response)
53
74
  expect(expand_path(received_map_path, js_path+'/..')).to eq(map_path)
54
75
 
55
76
 
56
- get '/assets/source_map/subfolder/other_file.map'
77
+ get maps_prefix+'/source_map/subfolder/other_file.map'
57
78
  expect(last_response).to be_ok
58
79
  map = ::SourceMap::Map.from_json(last_response.body)
59
- expect(map.sources).to include('/assets/source_map/subfolder/other_file.rb')
80
+ expect(map.sources).to include(maps_prefix+'/source_map/subfolder/other_file.rb')
60
81
  end
61
82
  end
62
83
 
63
- def extract_linked_map(body)
84
+ def extract_map_path(response)
64
85
  source_map_comment_regexp = %r{//# sourceMappingURL=(.*)$}
65
- expect(body).to match(source_map_comment_regexp)
66
- body.scan(source_map_comment_regexp).first.first
86
+
87
+ case
88
+ when response.body =~ source_map_comment_regexp
89
+ body.scan(source_map_comment_regexp).first.first
90
+ when response.headers['X-SourceMap']
91
+ response.headers['X-SourceMap']
92
+ else
93
+ raise "cannot find source map in response: #{response.inspect}"
94
+ end
67
95
  end
68
96
 
69
97
  def expand_path(file_name, dir_string)
@@ -0,0 +1,19 @@
1
+ require 'lib/spec_helper'
2
+ require 'tilt/opal'
3
+
4
+ describe Opal::TiltTemplate do
5
+ %w[rb js.rb opal js.opal].each do |ext|
6
+ let(:ext) { ext }
7
+
8
+ describe %Q{with extension ".#{ext}"} do
9
+ it "is registered for '.#{ext}' files" do
10
+ expect(Tilt["test.#{ext}"]).to be <= described_class
11
+ end
12
+
13
+ it "compiles and evaluates the template on #render" do
14
+ template = described_class.new('file') { |t| "puts 'Hello, World!'\n" }
15
+ expect(template.render(Object.new)).to include('"Hello, World!"')
16
+ end
17
+ end
18
+ end
19
+ end
@@ -81,30 +81,30 @@ describe "Kernel#format" do
81
81
  format("%x", 10).should == "a"
82
82
  format("%X", 10).should == "A"
83
83
 
84
- format("%x", -1).should == "-1" # incompatible
84
+ format("%x", -1).should == "..f"
85
85
  end
86
86
 
87
87
  it "should format a floating number with specifier 'f', 'e', 'E', 'g' or 'G'" do
88
88
  format("%f", 1.0).should == "1.000000"
89
89
  (format("%e", 1.0) =~ /^1\.000000e\+0*0$/).should_not == nil
90
- format("%g", 1.0).should == "1.00000" # incompatible
90
+ format("%g", 1.0).should == "1"
91
91
 
92
92
  format("%f", 10.1).should == "10.100000"
93
93
  (format("%E", 10.1) =~ /^1\.010000E\+0*1$/).should_not == nil
94
- format("%g", 10.1).should == "10.1000" # incompatible
94
+ format("%g", 10.1).should == "10.1"
95
95
 
96
- (format("%g", 1000000) =~ /^1.00000e\+0*6$/).should_not == nil
97
- (format("%G", 0.0000001) =~ /^1.00000E-0*7$/).should_not == nil
96
+ format("%g", 1000000).should == "1e+06"
97
+ format("%g", 0.0000001).should == "1e-07"
98
98
  end
99
99
 
100
100
  it "should format special floating number special values" do
101
- format("%f", 1.0/0).should == "Infinity"
102
- format("%f", -1.0/0).should == "-Infinity"
101
+ format("%f", 1.0/0).should == "Inf"
102
+ format("%f", -1.0/0).should == "-Inf"
103
103
  format("%f", 0.0/0).should == "NaN"
104
104
 
105
- format("%E", 1.0/0).should == "INFINITY"
106
- format("%E", -1.0/0).should == "-INFINITY"
107
- format("%E", 0.0/0).should == "NAN"
105
+ format("%E", 1.0/0).should == "Inf"
106
+ format("%E", -1.0/0).should == "-Inf"
107
+ format("%E", 0.0/0).should == "NaN"
108
108
  end
109
109
 
110
110
  it "should take specified index of argument if '$' is specified" do
@@ -125,4 +125,14 @@ describe "The predefined global constants" do
125
125
  Object.const_defined?(:RUBY_PLATFORM).should == true
126
126
  RUBY_PLATFORM.should == "opal"
127
127
  end
128
+
129
+ it "includes RUBY_ENGINE" do
130
+ Object.const_defined?(:RUBY_ENGINE).should == true
131
+ RUBY_ENGINE.should == "opal"
132
+ end
133
+
134
+ it "includes RUBY_ENGINE_VERSION" do
135
+ Object.const_defined?(:RUBY_ENGINE_VERSION).should == true
136
+ RUBY_ENGINE_VERSION.should == Opal::VERSION
137
+ end
128
138
  end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Opal.uid()" do
4
+ it "returns even sequential numbers in increments of 2" do
5
+ %x{
6
+ var id0 = Opal.uid(),
7
+ id1 = Opal.uid(),
8
+ id2 = Opal.uid(),
9
+ id3 = Opal.uid(),
10
+ id4 = Opal.uid();
11
+ }
12
+
13
+ modulo = `id0` % 2
14
+ modulo.should == 0
15
+
16
+ `id1`.should == `id0` + 2
17
+ `id2`.should == `id0` + 4
18
+ `id3`.should == `id0` + 6
19
+ `id4`.should == `id0` + 8
20
+ end
21
+ end
22
+
23
+ describe "FalseClass#object_id" do
24
+ it "returns 0" do
25
+ false.object_id.should == 0
26
+ end
27
+ end
28
+
29
+ describe "TrueClass#object_id" do
30
+ it "returns 2" do
31
+ true.object_id.should == 2
32
+ end
33
+ end
34
+
35
+ describe "NilClass#object_id" do
36
+ it "returns 4" do
37
+ nil.object_id.should == 4
38
+ end
39
+ end
40
+
41
+ describe "Numeric#object_id" do
42
+ it "returns (self * 2) + 1" do
43
+ 0.object_id.should == 1
44
+ 1.object_id.should == 3
45
+ 2.object_id.should == 5
46
+ 420.object_id.should == 841
47
+ -2.object_id.should == -3
48
+ -1.object_id.should == -1
49
+ end
50
+ end
51
+
52
+ describe "String#object_id" do
53
+ it "returns the primitive string version of self" do
54
+ `#{"hello".object_id} === "hello".toString()`.should be_true
55
+ end
56
+ end
@@ -49,16 +49,16 @@ describe "Bridged Classes" do
49
49
 
50
50
  describe ".instance_methdods" do
51
51
  it "should report methods for class" do
52
- Array.instance_methods.should include(:shift)
52
+ Array.instance_methods(false).should include(:shift)
53
53
  end
54
54
 
55
55
  it "should not include methods donated from Object/Kernel" do
56
- Array.instance_methods.should_not include(:class)
56
+ Array.instance_methods(false).should_not include(:class)
57
57
  end
58
58
 
59
59
  it "should not include methods donated from BasicObject" do
60
- Array.instance_methods.should_not include(:__send__)
61
- Array.instance_methods.should_not include(:send)
60
+ Array.instance_methods(false).should_not include(:__send__)
61
+ Array.instance_methods(false).should_not include(:send)
62
62
  end
63
63
  end
64
64
  end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe '`Opal.hash`' do
4
+ it 'converts object literals to hashes' do
5
+ `Opal.hash({a: 1, b: 2})`.should == {a: 1, b: 2}
6
+ end
7
+ end
@@ -13,6 +13,6 @@ describe "Class#native_class" do
13
13
 
14
14
  it 'aliases Class#new to the unprefixed new method in JS world' do
15
15
  SomeClass.native_class
16
- `Opal.global.SomeClass.new()`.is_a?(SomeClass).should == true
16
+ `Opal.global.SomeClass["new"]()`.is_a?(SomeClass).should == true
17
17
  end
18
18
  end
@@ -0,0 +1,30 @@
1
+ require 'promise'
2
+
3
+ describe 'Promise#always' do
4
+ it 'calls the block when it was resolved' do
5
+ x = 42
6
+ Promise.value(23).then { |v| x = v }.always { |v| x = 2 }
7
+ x.should == 2
8
+ end
9
+
10
+ it 'calls the block when it was rejected' do
11
+ x = 42
12
+ Promise.error(23).rescue { |v| x = v }.always { |v| x = 2 }
13
+ x.should == 2
14
+ end
15
+
16
+ it 'acts as resolved' do
17
+ x = 42
18
+ Promise.error(23).rescue { |v| x = v }.always { x = 2 }.then { x = 3 }
19
+ x.should == 3
20
+ end
21
+
22
+ it 'raises an exception when the promise has already been chained' do
23
+ p = Promise.value(2)
24
+ p.then {}
25
+
26
+ proc {
27
+ p.always {}
28
+ }.should raise_error(ArgumentError)
29
+ end
30
+ end
@@ -60,4 +60,12 @@ describe 'Promise#then' do
60
60
  p.then {}
61
61
  }.should raise_error(ArgumentError)
62
62
  end
63
+
64
+ it 'should pass a delayed falsy value' do
65
+ p = Promise.new.resolve(5).then { nil }
66
+
67
+ p.then do |value|
68
+ expect(value).to eq(nil)
69
+ end
70
+ end
63
71
  end
@@ -21,6 +21,14 @@ describe 'Promise#trace' do
21
21
  x.should == 6
22
22
  end
23
23
 
24
+ it 'includes the first value' do
25
+ x = 42
26
+
27
+ Promise.value(1).trace { |a| x = a }
28
+
29
+ x.should == 1
30
+ end
31
+
24
32
  it 'works after a when' do
25
33
  x = 42
26
34
 
data/spec/rubyspecs CHANGED
@@ -48,30 +48,30 @@ corelib/core/exception/new_spec
48
48
  corelib/core/exception/reason_spec
49
49
  corelib/core/exception/to_s_spec
50
50
 
51
+ corelib/core/kernel/Array_spec
52
+ corelib/core/kernel/case_compare_spec
51
53
  corelib/core/kernel/comparison_spec
52
54
  corelib/core/kernel/eql_spec
53
55
  corelib/core/kernel/equal_spec
54
56
  corelib/core/kernel/equal_value_spec
57
+ corelib/core/kernel/format_spec
58
+ corelib/core/kernel/hash_spec
59
+ corelib/core/kernel/Integer_spec
60
+ corelib/core/kernel/Float_spec
61
+ corelib/core/kernel/sprintf_spec
62
+ corelib/core/kernel/String_spec
55
63
  corelib/core/kernel/tap_spec
56
64
  corelib/core/kernel/to_s_spec
57
65
  corelib/core/kernel/warn_spec
58
66
 
59
- corelib/core/matchdata/captures_spec
60
- corelib/core/matchdata/element_reference_spec
61
- corelib/core/matchdata/inspect_spec
62
- corelib/core/matchdata/length_spec
63
- corelib/core/matchdata/post_match_spec
64
- corelib/core/matchdata/pre_match_spec
65
- corelib/core/matchdata/regexp_spec
66
- corelib/core/matchdata/size_spec
67
- corelib/core/matchdata/string_spec
68
- corelib/core/matchdata/to_a_spec
69
- corelib/core/matchdata/to_s_spec
70
- corelib/core/matchdata/values_at_spec
67
+ corelib/core/matchdata
71
68
 
72
69
  corelib/core/module/class_variable_get_spec
73
70
  corelib/core/module/class_variable_set_spec
74
71
  corelib/core/module/module_function_spec
72
+ corelib/core/module/const_get_spec
73
+ corelib/core/module/include_spec
74
+ corelib/core/module/instance_methods_spec
75
75
 
76
76
  corelib/core/range/begin_spec
77
77
  corelib/core/range/case_compare_spec
@@ -79,98 +79,9 @@ corelib/core/range/end_spec
79
79
  corelib/core/range/new_spec
80
80
  corelib/core/range/size_spec
81
81
 
82
- corelib/core/string/allocate_spec
83
- corelib/core/string/append_spec
84
- corelib/core/string/ascii_only_spec
85
- corelib/core/string/bytes_spec
86
- corelib/core/string/bytesize_spec
87
- # corelib/core/string/byteslice_spec - invalid regexp
88
- corelib/core/string/capitalize_spec
89
- corelib/core/string/case_compare_spec
90
- corelib/core/string/casecmp_spec
91
- corelib/core/string/center_spec
92
- corelib/core/string/chars_spec
93
- corelib/core/string/chomp_spec
94
- corelib/core/string/chop_spec
95
- corelib/core/string/chr_spec
96
- corelib/core/string/clear_spec
97
- corelib/core/string/codepoints_spec
98
- corelib/core/string/comparison_spec
99
- corelib/core/string/concat_spec
100
- corelib/core/string/count_spec
101
- # corelib/core/string/crypt_spec - not supported (can add these)
102
- corelib/core/string/delete_spec
103
- corelib/core/string/downcase_spec
104
- # corelib/core/string/dump_spec - parse error on "\\x05"
105
- corelib/core/string/dup_spec
106
- corelib/core/string/each_byte_spec
107
- corelib/core/string/each_char_spec
108
- corelib/core/string/each_codepoint_spec
109
- corelib/core/string/each_line_spec
110
- # corelib/core/string/element_reference_spec - fails to find a shared group - "String#[] with Regexp"
111
- corelib/core/string/element_set_spec
112
- corelib/core/string/empty_spec
113
- corelib/core/string/encode_spec
114
- corelib/core/string/encoding_spec
115
- corelib/core/string/end_with_spec
116
- corelib/core/string/eql_spec
117
- corelib/core/string/equal_value_spec
118
- corelib/core/string/force_encoding_spec
119
- # corelib/core/string/getbyte_spec - parse error - "UTF-8 (\u{9865}} characters and hex escapes (\xDE)"
120
- # corelib/core/string/gsub_spec - invalid regular expression
121
- corelib/core/string/hash_spec
122
- corelib/core/string/hex_spec
123
- corelib/core/string/include_spec
124
- corelib/core/string/index_spec
125
- corelib/core/string/initialize_spec
126
- corelib/core/string/insert_spec
127
- # corelib/core/string/inspect_spec - Encoding::CompatibilityError: incompatible character encodings: UTF-8 and ASCII-8BIT
128
- corelib/core/string/intern_spec
129
- corelib/core/string/length_spec
130
- corelib/core/string/lines_spec
131
- corelib/core/string/ljust_spec
132
- corelib/core/string/lstrip_spec
133
- #core/string/match_spec - fails to find a shared group
134
- # corelib/core/string/modulo_spec - lots of failing specs
135
- corelib/core/string/multiply_spec
136
- corelib/core/string/new_spec
137
- corelib/core/string/next_spec
138
- # # corelib/core/string/oct_spec - parse error on -01234
139
- corelib/core/string/ord_spec
140
- corelib/core/string/partition_spec
141
- corelib/core/string/plus_spec
142
- corelib/core/string/prepend_spec
143
- corelib/core/string/replace_spec
144
- corelib/core/string/reverse_spec
145
- corelib/core/string/rindex_spec
146
- corelib/core/string/rjust_spec
147
- corelib/core/string/rpartition_spec
148
- corelib/core/string/rstrip_spec
149
- # corelib/core/string/scan_spec - infinite loop on parsing
150
- corelib/core/string/setbyte_spec
151
- corelib/core/string/size_spec
152
- # corelib/core/string/slice_spec - fails to find a shared thing (same as element_reference_spec)
153
- corelib/core/string/split_spec
154
- corelib/core/string/squeeze_spec
155
- corelib/core/string/start_with_spec
156
- corelib/core/string/strip_spec
157
- corelib/core/string/sub_spec
158
- corelib/core/string/succ_spec
159
- corelib/core/string/sum_spec
160
- corelib/core/string/swapcase_spec
161
- # corelib/core/string/to_c_spec - lots of failing specs
162
- corelib/core/string/to_f_spec
163
- # corelib/core/string/to_i_spec
164
- # corelib/core/string/to_r_spec
165
- corelib/core/string/to_str_spec
166
- corelib/core/string/to_sym_spec
167
- corelib/core/string/to_s_spec
168
- corelib/core/string/tr_s_spec
169
- corelib/core/string/tr_spec
170
- # corelib/core/string/try_convert_spec
171
- corelib/core/string/upcase_spec
172
- corelib/core/string/upto_spec
173
- corelib/core/string/valid_encoding_spec
82
+ corelib/core/string
83
+ !corelib/core/string/crypt_spec
84
+ !corelib/core/string/scrub_spec
174
85
 
175
86
  corelib/core/symbol/to_proc_spec
176
87