opal 0.5.5 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (257) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +40 -9
  3. data/CHANGELOG.md +349 -0
  4. data/Gemfile +7 -8
  5. data/README.md +25 -3
  6. data/Rakefile +4 -2
  7. data/bin/opal +1 -1
  8. data/examples/rack/Gemfile +3 -0
  9. data/examples/rack/app/application.rb +13 -0
  10. data/examples/rack/app/user.rb +21 -0
  11. data/examples/rack/config.ru +7 -0
  12. data/examples/rack/index.html.erb +10 -0
  13. data/examples/sinatra/Gemfile +4 -0
  14. data/examples/sinatra/app/application.rb +7 -0
  15. data/examples/sinatra/config.ru +21 -0
  16. data/lib/mspec/opal/rake_task.rb +29 -8
  17. data/lib/mspec/opal/runner.rb +5 -4
  18. data/lib/opal.rb +1 -0
  19. data/lib/opal/builder.rb +0 -28
  20. data/lib/opal/cli.rb +0 -14
  21. data/lib/opal/compiler.rb +12 -11
  22. data/lib/opal/fragment.rb +8 -1
  23. data/lib/opal/nodes/array.rb +1 -1
  24. data/lib/opal/nodes/base.rb +4 -0
  25. data/lib/opal/nodes/call.rb +6 -2
  26. data/lib/opal/nodes/call_special.rb +1 -1
  27. data/lib/opal/nodes/class.rb +2 -2
  28. data/lib/opal/nodes/constants.rb +3 -1
  29. data/lib/opal/nodes/helpers.rb +23 -14
  30. data/lib/opal/nodes/if.rb +16 -9
  31. data/lib/opal/nodes/literal.rb +37 -5
  32. data/lib/opal/nodes/logic.rb +7 -1
  33. data/lib/opal/nodes/module.rb +2 -2
  34. data/lib/opal/nodes/scope.rb +13 -2
  35. data/lib/opal/nodes/top.rb +9 -0
  36. data/lib/opal/nodes/variables.rb +5 -2
  37. data/lib/opal/parser.rb +306 -71
  38. data/lib/opal/parser/grammar.rb +2667 -2775
  39. data/lib/opal/parser/grammar.y +177 -233
  40. data/lib/opal/parser/lexer.rb +511 -427
  41. data/lib/opal/parser/sexp.rb +15 -3
  42. data/lib/opal/source_map.rb +8 -4
  43. data/lib/opal/sprockets.rb +4 -0
  44. data/lib/opal/sprockets/cache_key_fix.rb +17 -0
  45. data/lib/opal/sprockets/environment.rb +21 -0
  46. data/lib/opal/sprockets/erb.rb +30 -0
  47. data/lib/opal/sprockets/processor.rb +127 -0
  48. data/lib/opal/sprockets/server.rb +166 -0
  49. data/lib/opal/util.rb +29 -0
  50. data/lib/opal/version.rb +1 -1
  51. data/opal.gemspec +1 -1
  52. data/opal/corelib/array.rb +106 -187
  53. data/opal/corelib/array/inheritance.rb +113 -0
  54. data/opal/corelib/basic_object.rb +6 -2
  55. data/opal/corelib/boolean.rb +4 -0
  56. data/opal/corelib/class.rb +2 -0
  57. data/opal/corelib/complex.rb +3 -0
  58. data/opal/corelib/enumerable.rb +75 -8
  59. data/opal/corelib/enumerator.rb +2 -0
  60. data/opal/corelib/error.rb +23 -23
  61. data/opal/corelib/hash.rb +5 -5
  62. data/opal/corelib/helpers.rb +51 -16
  63. data/opal/corelib/io.rb +7 -24
  64. data/opal/corelib/kernel.rb +23 -11
  65. data/opal/corelib/module.rb +44 -47
  66. data/opal/corelib/nil_class.rb +4 -0
  67. data/opal/corelib/numeric.rb +101 -15
  68. data/opal/corelib/range.rb +2 -0
  69. data/opal/corelib/rational.rb +3 -0
  70. data/opal/corelib/regexp.rb +36 -17
  71. data/opal/corelib/runtime.js +22 -7
  72. data/opal/corelib/string.rb +213 -110
  73. data/opal/corelib/string/inheritance.rb +78 -0
  74. data/opal/corelib/struct.rb +8 -0
  75. data/opal/corelib/time.rb +54 -42
  76. data/opal/corelib/variables.rb +24 -0
  77. data/opal/opal.rb +5 -27
  78. data/spec/cli/compiler_spec.rb +136 -0
  79. data/spec/cli/dependency_resolver_spec.rb +40 -0
  80. data/spec/cli/lexer_spec.rb +110 -0
  81. data/spec/cli/parser/alias_spec.rb +26 -0
  82. data/spec/cli/parser/and_spec.rb +13 -0
  83. data/spec/cli/parser/attrasgn_spec.rb +28 -0
  84. data/spec/cli/parser/begin_spec.rb +42 -0
  85. data/spec/cli/parser/block_spec.rb +12 -0
  86. data/spec/cli/parser/break_spec.rb +17 -0
  87. data/spec/cli/parser/call_spec.rb +139 -0
  88. data/spec/cli/parser/class_spec.rb +35 -0
  89. data/spec/cli/parser/comments_spec.rb +11 -0
  90. data/spec/cli/parser/def_spec.rb +61 -0
  91. data/spec/cli/parser/if_spec.rb +26 -0
  92. data/spec/cli/parser/iter_spec.rb +59 -0
  93. data/spec/cli/parser/lambda_spec.rb +64 -0
  94. data/spec/cli/parser/literal_spec.rb +113 -0
  95. data/spec/cli/parser/masgn_spec.rb +37 -0
  96. data/spec/cli/parser/module_spec.rb +27 -0
  97. data/spec/cli/parser/not_spec.rb +27 -0
  98. data/spec/cli/parser/op_asgn1_spec.rb +23 -0
  99. data/spec/cli/parser/op_asgn2_spec.rb +23 -0
  100. data/spec/cli/parser/or_spec.rb +13 -0
  101. data/spec/cli/parser/return_spec.rb +17 -0
  102. data/spec/cli/parser/sclass_spec.rb +21 -0
  103. data/spec/cli/parser/string_spec.rb +269 -0
  104. data/spec/cli/parser/super_spec.rb +20 -0
  105. data/spec/cli/parser/undef_spec.rb +15 -0
  106. data/spec/cli/parser/unless_spec.rb +13 -0
  107. data/spec/cli/parser/variables_spec.rb +92 -0
  108. data/spec/cli/parser/while_spec.rb +15 -0
  109. data/spec/cli/parser/yield_spec.rb +20 -0
  110. data/spec/cli/spec_helper.rb +31 -11
  111. data/spec/opal/core/array/set_range_to_array_spec.rb +7 -0
  112. data/spec/opal/core/date_spec.rb +122 -0
  113. data/spec/opal/core/language/predefined_spec.rb +1 -1
  114. data/spec/opal/core/runtime/operator_call_spec.rb +13 -0
  115. data/spec/opal/core/runtime/truthy_spec.rb +23 -0
  116. data/spec/opal/filters/bugs/array.rb +96 -87
  117. data/spec/opal/filters/bugs/basic_object.rb +9 -0
  118. data/spec/opal/filters/bugs/class.rb +16 -0
  119. data/spec/opal/filters/bugs/enumerable.rb +54 -0
  120. data/spec/opal/filters/bugs/language.rb +37 -3
  121. data/spec/opal/filters/bugs/math.rb +93 -0
  122. data/spec/opal/filters/bugs/nil.rb +7 -0
  123. data/spec/opal/filters/bugs/numeric.rb +19 -0
  124. data/spec/opal/filters/bugs/opal.rb +12 -0
  125. data/spec/opal/filters/bugs/regexp.rb +0 -2
  126. data/spec/opal/filters/bugs/string.rb +317 -19
  127. data/spec/opal/filters/bugs/struct.rb +29 -0
  128. data/spec/opal/filters/bugs/time.rb +130 -9
  129. data/spec/opal/filters/unsupported/encoding.rb +52 -4
  130. data/spec/opal/filters/unsupported/enumerator.rb +0 -3
  131. data/spec/opal/filters/unsupported/integer_size.rb +7 -0
  132. data/spec/opal/filters/unsupported/method_added.rb +10 -0
  133. data/spec/opal/filters/unsupported/mutable_strings.rb +299 -1
  134. data/spec/opal/filters/unsupported/private_constants.rb +30 -0
  135. data/spec/opal/filters/unsupported/private_methods.rb +16 -0
  136. data/spec/opal/filters/unsupported/random.rb +4 -0
  137. data/spec/opal/filters/unsupported/tainted.rb +53 -0
  138. data/spec/opal/filters/unsupported/trusted.rb +5 -0
  139. data/spec/opal/rubyspecs +167 -234
  140. data/spec/opal/spec_helper.rb +3 -0
  141. data/spec/opal/stdlib/promise/error_spec.rb +15 -0
  142. data/spec/opal/stdlib/promise/rescue_spec.rb +35 -0
  143. data/spec/opal/stdlib/promise/then_spec.rb +54 -0
  144. data/spec/opal/stdlib/promise/trace_spec.rb +35 -0
  145. data/spec/opal/stdlib/promise/value_spec.rb +15 -0
  146. data/spec/opal/stdlib/promise/when_spec.rb +34 -0
  147. data/stdlib/base64.rb +152 -0
  148. data/stdlib/date.rb +82 -49
  149. data/{opal/corelib → stdlib}/encoding.rb +3 -1
  150. data/stdlib/erb.rb +0 -1
  151. data/stdlib/json.rb +10 -26
  152. data/stdlib/math.rb +370 -0
  153. data/stdlib/native.rb +40 -33
  154. data/stdlib/opal-parser.rb +7 -4
  155. data/stdlib/promise.rb +292 -0
  156. data/stdlib/strscan.rb +1 -1
  157. data/stdlib/template.rb +1 -3
  158. data/stdlib/time.rb +9 -0
  159. metadata +143 -204
  160. data/doc/compiler.md +0 -42
  161. data/doc/compiler_options.md +0 -5
  162. data/doc/examples/node_http_server.rb +0 -49
  163. data/doc/external_libraries.md +0 -9
  164. data/doc/generated_javascript.md +0 -272
  165. data/doc/home.md +0 -17
  166. data/doc/method_missing.md +0 -58
  167. data/doc/static_applications.md +0 -60
  168. data/doc/using_ruby_from_javascript.md +0 -18
  169. data/doc/using_sprockets.md +0 -65
  170. data/spec/opal/core/numeric/abs_spec.rb +0 -12
  171. data/spec/opal/core/numeric/downto_spec.rb +0 -19
  172. data/spec/opal/core/numeric/equal_value_spec.rb +0 -9
  173. data/spec/opal/core/numeric/even_spec.rb +0 -21
  174. data/spec/opal/core/numeric/magnitude_spec.rb +0 -12
  175. data/spec/opal/core/numeric/odd_spec.rb +0 -21
  176. data/spec/opal/core/string/chop_spec.rb +0 -10
  177. data/spec/opal/core/string/chr_spec.rb +0 -13
  178. data/spec/opal/core/string/clone_spec.rb +0 -8
  179. data/spec/opal/core/string/comparison_spec.rb +0 -13
  180. data/spec/opal/core/string/dup_spec.rb +0 -8
  181. data/spec/opal/core/string/element_reference_spec.rb +0 -96
  182. data/spec/opal/core/string/fixtures/classes.rb +0 -49
  183. data/spec/opal/core/string/format_spec.rb +0 -9
  184. data/spec/opal/core/string/freeze_spec.rb +0 -15
  185. data/spec/opal/core/string/gsub_spec.rb +0 -31
  186. data/spec/opal/core/string/lines_spec.rb +0 -9
  187. data/spec/opal/core/string/ljust_spec.rb +0 -32
  188. data/spec/opal/core/string/lstrip_spec.rb +0 -7
  189. data/spec/opal/core/string/match_spec.rb +0 -49
  190. data/spec/opal/core/string/next_spec.rb +0 -10
  191. data/spec/opal/core/string/ord_spec.rb +0 -9
  192. data/spec/opal/core/string/partition_spec.rb +0 -10
  193. data/spec/opal/core/string/rindex_spec.rb +0 -50
  194. data/spec/opal/core/string/rjust_spec.rb +0 -32
  195. data/spec/opal/core/string/rstrip_spec.rb +0 -7
  196. data/spec/opal/core/string/scan_spec.rb +0 -66
  197. data/spec/opal/core/string/slice_spec.rb +0 -74
  198. data/spec/opal/core/string/split_spec.rb +0 -5
  199. data/spec/opal/core/string/strip_spec.rb +0 -6
  200. data/spec/opal/core/string/sub_spec.rb +0 -38
  201. data/spec/opal/core/string/succ_spec.rb +0 -10
  202. data/spec/opal/core/string/sum_spec.rb +0 -5
  203. data/spec/opal/core/string/to_f_spec.rb +0 -14
  204. data/spec/opal/core/string/to_i_spec.rb +0 -25
  205. data/spec/opal/core/string/tr_s_spec.rb +0 -31
  206. data/spec/opal/core/string/tr_spec.rb +0 -31
  207. data/spec/opal/filters/bugs/parser.rb +0 -10
  208. data/spec/opal/filters/unsupported/immutable_strings.rb +0 -24
  209. data/spec/opal/filters/unsupported/string_subclasses.rb +0 -8
  210. data/spec/opal/parser/alias_spec.rb +0 -26
  211. data/spec/opal/parser/and_spec.rb +0 -13
  212. data/spec/opal/parser/array_spec.rb +0 -22
  213. data/spec/opal/parser/attrasgn_spec.rb +0 -28
  214. data/spec/opal/parser/begin_spec.rb +0 -42
  215. data/spec/opal/parser/block_spec.rb +0 -12
  216. data/spec/opal/parser/break_spec.rb +0 -17
  217. data/spec/opal/parser/call_spec.rb +0 -131
  218. data/spec/opal/parser/class_spec.rb +0 -35
  219. data/spec/opal/parser/const_spec.rb +0 -13
  220. data/spec/opal/parser/cvar_spec.rb +0 -11
  221. data/spec/opal/parser/def_spec.rb +0 -61
  222. data/spec/opal/parser/false_spec.rb +0 -17
  223. data/spec/opal/parser/file_spec.rb +0 -7
  224. data/spec/opal/parser/gvar_spec.rb +0 -13
  225. data/spec/opal/parser/hash_spec.rb +0 -17
  226. data/spec/opal/parser/heredoc_spec.rb +0 -30
  227. data/spec/opal/parser/iasgn_spec.rb +0 -9
  228. data/spec/opal/parser/if_spec.rb +0 -26
  229. data/spec/opal/parser/int_spec.rb +0 -13
  230. data/spec/opal/parser/iter_spec.rb +0 -59
  231. data/spec/opal/parser/ivar_spec.rb +0 -9
  232. data/spec/opal/parser/lambda_spec.rb +0 -64
  233. data/spec/opal/parser/lasgn_spec.rb +0 -8
  234. data/spec/opal/parser/line_spec.rb +0 -8
  235. data/spec/opal/parser/lvar_spec.rb +0 -38
  236. data/spec/opal/parser/masgn_spec.rb +0 -37
  237. data/spec/opal/parser/module_spec.rb +0 -27
  238. data/spec/opal/parser/nil_spec.rb +0 -17
  239. data/spec/opal/parser/not_spec.rb +0 -27
  240. data/spec/opal/parser/nth_ref_spec.rb +0 -13
  241. data/spec/opal/parser/op_asgn1_spec.rb +0 -23
  242. data/spec/opal/parser/op_asgn2_spec.rb +0 -23
  243. data/spec/opal/parser/or_spec.rb +0 -13
  244. data/spec/opal/parser/parse_spec.rb +0 -66
  245. data/spec/opal/parser/regexp_spec.rb +0 -16
  246. data/spec/opal/parser/return_spec.rb +0 -17
  247. data/spec/opal/parser/sclass_spec.rb +0 -21
  248. data/spec/opal/parser/self_spec.rb +0 -17
  249. data/spec/opal/parser/str_spec.rb +0 -107
  250. data/spec/opal/parser/string_spec.rb +0 -8
  251. data/spec/opal/parser/super_spec.rb +0 -20
  252. data/spec/opal/parser/true_spec.rb +0 -17
  253. data/spec/opal/parser/undef_spec.rb +0 -15
  254. data/spec/opal/parser/unless_spec.rb +0 -13
  255. data/spec/opal/parser/while_spec.rb +0 -15
  256. data/spec/opal/parser/xstr_spec.rb +0 -116
  257. data/spec/opal/parser/yield_spec.rb +0 -20
@@ -1,60 +0,0 @@
1
- `opal-sprockets` makes it easy to build static opal applications. Opal uses internal load paths to make it easy to handle resolving requirements during building. `opal-sprockets` forms the basis of rails support, so anything you can do there, you can do standalone as well.
2
-
3
- ## Overview
4
-
5
- First, install `opal` and `opal-sprockets` by simply adding to a `Gemfile`:
6
-
7
- ```ruby
8
- # Gemfile
9
-
10
- gem "opal", ">= 0.4.3"
11
- gem "opal-sprockets"
12
- ```
13
-
14
- Next, we want to add our main app code. Keep all opal code inside `app/` directory, and edit `app/application.rb`:
15
-
16
- ```ruby
17
- # app/application.rb
18
-
19
- require "opal"
20
-
21
- puts "Wow, running opal!"
22
- ```
23
-
24
- You will notice the `require "opal"` line which will automatically include the opal runtime and corelib into our output, giving us access to the `puts()` method.
25
-
26
- To build this, we need a rake task to load a new opal environment, add our `app/` directory to the load path, and then to build our target file `application.rb` which will be found because it is inside our added load path.
27
-
28
- ```ruby
29
- # Rakefile
30
-
31
- require 'opal'
32
- require 'opal-sprockets'
33
-
34
- desc "Build our app to build.js"
35
- task :build do
36
- env = Opal::Environment.new
37
- env.append_path "app"
38
-
39
- File.open("build.js", "w+") do |out|
40
- out << env["application"].to_s
41
- end
42
- end
43
- ```
44
-
45
- Now, if you run `rake build` you will get the `build.js` output file with our application compiled, with the opal runtime included as well.
46
-
47
- To run the application, lets create a very simple html file:
48
-
49
- ```html
50
- <!DOCTYPE html>
51
- <html>
52
- <head>
53
- <script src="build.js"></script>
54
- </head>
55
- <body>
56
- </body>
57
- </html>
58
- ```
59
-
60
- Now, open this html file and check the browsers console. You should see our message printed in the console.
@@ -1,18 +0,0 @@
1
- Accessing classes and methods defined in Opal from the javascript runtime is possible via the Opal js object. The following class:
2
-
3
- ```ruby
4
- class Foo
5
- def bar
6
- puts "called bar on class Foo defined in ruby code"
7
- end
8
- end
9
- ```
10
-
11
- Can be accessed from javascript like this:
12
-
13
- ```javascript
14
- Opal.Foo.$new().$bar();
15
- // => "called bar on class Foo defined in ruby code"
16
- ```
17
-
18
- Remember that all ruby methods are prefixed with a '$'.
@@ -1,65 +0,0 @@
1
- `opal-sprockets` provides a simple `Opal::Server` class to make it easy to get a rack server up and running for trying out opal. This server will automatically recompile ruby sources when they change, meaning you just need to refresh your page to autorun.
2
-
3
- ## Getting setup
4
-
5
- Add `opal` and `opal-sprockets` to a `Gemfile`:
6
-
7
- ```ruby
8
- #Gemfile
9
- source 'https://rubygems.org'
10
-
11
- gem 'opal', '>= 0.4.3'
12
- gem 'opal-sprockets'
13
- ```
14
-
15
- And install with `bundle install`.
16
-
17
- We need a directory to hold our opal code, so create `app/` and add a simple demo script to `app/application.rb`:
18
-
19
- ```ruby
20
- # app/application.rb
21
-
22
- require 'opal'
23
-
24
- puts "hello world"
25
- ```
26
-
27
- Finally, we need a html page to run, so create `index.html`:
28
-
29
- ```html
30
- <!doctype html>
31
- <html lang="en">
32
- <head>
33
- <meta charset="utf-8">
34
- <title>opal server example</title>
35
- <script src="/assets/application.js"></script>
36
- </head>
37
- <body>
38
- </body>
39
- </html>
40
- ```
41
-
42
- ## Using Opal::Server
43
-
44
- `Opal::Server` can be run like any rack app, so just add a `config.ru` file:
45
-
46
- ```ruby
47
- # config.ru
48
-
49
- require 'bundler'
50
- Bundler.require
51
-
52
- run Opal::Server.new { |s|
53
- s.append_path 'app'
54
-
55
- s.main = 'application'
56
- }
57
- ```
58
-
59
- This rack app simply adds our `app/` directory to opal load path, and sets our main file to `application`, which will be found inside `app/`.
60
-
61
- ## Running the app
62
-
63
- Run `bundle exec rackup` and visit the page `http://127.0.0.1:9292` in any browser. Observe the console to see the printed statement.
64
-
65
- You can just change `app/application.rb` and refresh the page to see any changes.
@@ -1,12 +0,0 @@
1
- describe "Numeric#abs" do
2
- it "returns self's absolute value" do
3
- (-100).abs.should == 100
4
- (100).abs.should == 100
5
-
6
- (-0).abs.should == 0
7
- (0).abs.should == 0
8
-
9
- (-42).abs.should == 42
10
- (42).abs.should == 42
11
- end
12
- end
@@ -1,19 +0,0 @@
1
- describe "Numeric#downto [stop] when self and stop are Fixnums" do
2
- it "does not yield when stop is greater than self" do
3
- result = []
4
- 5.downto(6) { |x| result << x }
5
- result.should == []
6
- end
7
-
8
- it "yields once when stop equals self" do
9
- result = []
10
- 5.downto(5) { |x| result << x }
11
- result.should == [5]
12
- end
13
-
14
- it "yields while decreasing self until it is less than stop" do
15
- result = []
16
- 5.downto(2) { |x| result << x }
17
- result.should == [5, 4, 3, 2]
18
- end
19
- end
@@ -1,9 +0,0 @@
1
- describe "Numeric#==" do
2
- it "returns true if self has the same value as other" do
3
- (1 == 1).should == true
4
- (9 == 5).should == false
5
-
6
- (9 == 9.0).should == true
7
- (9 == 9.01).should == false
8
- end
9
- end
@@ -1,21 +0,0 @@
1
- describe "Numeric#even?" do
2
- it "is true for zero" do
3
- 0.even?.should be_true
4
- end
5
-
6
- it "is true for even positive Fixnums" do
7
- 4.even?.should be_true
8
- end
9
-
10
- it "is true for even negative Fixnums" do
11
- (-4).even?.should be_true
12
- end
13
-
14
- it "is false for odd positive Fixnums" do
15
- 5.even?.should be_false
16
- end
17
-
18
- it "is false for odd negative Fixnums" do
19
- (-5).even?.should be_false
20
- end
21
- end
@@ -1,12 +0,0 @@
1
- describe "Numeric#magnitude" do
2
- it "returns self's absolute value" do
3
- (-100).magnitude.should == 100
4
- (100).magnitude.should == 100
5
-
6
- (-0).magnitude.should == 0
7
- (0).magnitude.should == 0
8
-
9
- (-42).magnitude.should == 42
10
- (42).magnitude.should == 42
11
- end
12
- end
@@ -1,21 +0,0 @@
1
- describe "Numeric#odd?" do
2
- it "is false for zero" do
3
- 0.odd?.should be_false
4
- end
5
-
6
- it "is false for even positive Fixnums" do
7
- 4.odd?.should be_false
8
- end
9
-
10
- it "is false for even negative Fixnums" do
11
- (-4).odd?.should be_false
12
- end
13
-
14
- it "is true for odd positive Fixnums" do
15
- 5.odd?.should be_true
16
- end
17
-
18
- it "is true for odd negative Fixnums" do
19
- (-5).odd?.should be_true
20
- end
21
- end
@@ -1,10 +0,0 @@
1
- describe "String#chop" do
2
- it "returns a new string with the last character removed" do
3
- "hello\n".chop.should == "hello"
4
- "hello".chop.should == "hell"
5
- end
6
-
7
- it "returns an empty string when applied to an empty string" do
8
- "".chop.should == ""
9
- end
10
- end
@@ -1,13 +0,0 @@
1
- describe "String#chr" do
2
- it "returns an empty String if self is an empty String" do
3
- "".chr.should == ""
4
- end
5
-
6
- it "returns a 1-character String" do
7
- "glark".chr.size.should == 1
8
- end
9
-
10
- it "returns the character at the start of the String" do
11
- "Goodbye, world".chr.should == "G"
12
- end
13
- end
@@ -1,8 +0,0 @@
1
- describe "String#clone" do
2
- it "produces a copy of the original" do
3
- str = "a string"
4
- str_copy = str.dup
5
- str_copy.should == str
6
- str_copy.object_id.should_not == str.object_id
7
- end
8
- end
@@ -1,13 +0,0 @@
1
- describe "String#<=>" do
2
- it "returns -1 when self is less than other" do
3
- ("this" <=> "those").should == -1
4
- end
5
-
6
- it "returns 0 when self is equal to other" do
7
- ("yep" <=> "yep").should == 0
8
- end
9
-
10
- it "returns 1 when self is greater than other" do
11
- ("yoddle" <=> "griddle").should == 1
12
- end
13
- end
@@ -1,8 +0,0 @@
1
- describe "String#dup" do
2
- it "produces a copy of the original" do
3
- str = "a string"
4
- str_copy = str.dup
5
- str_copy.should == str
6
- str_copy.object_id.should_not == str.object_id
7
- end
8
- end
@@ -1,96 +0,0 @@
1
- require File.expand_path('../fixtures/classes', __FILE__)
2
-
3
- describe "String#[]" do
4
- it "returns the character code of the character at the given index" do
5
- "hello"[0].should == "h"
6
- "hello"[-1].should == "o"
7
- end
8
-
9
- it "returns nil if index is outside of self" do
10
- "hello"[20].should == nil
11
- "hello"[-20].should == nil
12
-
13
- ""[0].should == nil
14
- ""[-1].should == nil
15
- end
16
- end
17
-
18
- describe "with index, length" do
19
- it "returns the substring starting at the given index with the given length" do
20
- "hello there"[0, 0].should == ""
21
- "hello there"[0, 1].should == "h"
22
- "hello there"[0, 3].should == "hel"
23
- "hello there"[0, 6].should == "hello "
24
- "hello there"[0, 9].should == "hello the"
25
- "hello there"[0, 12].should == "hello there"
26
-
27
- "hello there"[1, 0].should == ""
28
- "hello there"[1, 1].should == "e"
29
- "hello there"[1, 3].should == "ell"
30
- "hello there"[1, 6].should == "ello t"
31
- "hello there"[1, 9].should == "ello ther"
32
- "hello there"[1, 12].should == "ello there"
33
-
34
- "hello there"[3, 0].should == ""
35
- "hello there"[3, 1].should == "l"
36
- "hello there"[3, 3].should == "lo "
37
- "hello there"[3, 6].should == "lo the"
38
- "hello there"[3, 9].should == "lo there"
39
-
40
- "hello there"[4, 0].should == ""
41
- "hello there"[4, 3].should == "o t"
42
- "hello there"[4, 6].should == "o ther"
43
- "hello there"[4, 9].should == "o there"
44
-
45
- "foo"[2, 1].should == "o"
46
- "foo"[3, 0].should == ""
47
- "foo"[3, 1].should == ""
48
-
49
- ""[0, 0].should == ""
50
- ""[0, 1].should == ""
51
-
52
- "x"[0, 0].should == ""
53
- "x"[0, 1].should == "x"
54
- "x"[1, 0].should == ""
55
- "x"[-1, 1].should == "x"
56
- end
57
-
58
- it "returns nil if the offset falls outside of self" do
59
- "hello there"[20, 3].should == nil
60
- "hello there"[-20, 3].should == nil
61
-
62
- ""[1, 0].should == nil
63
- ""[1, 1].should == nil
64
-
65
- ""[2, 0].should == nil
66
- ""[2, 1].should == nil
67
-
68
- "x"[2, 0].should == nil
69
- "x"[2, 1].should == nil
70
-
71
- "x"[-2, 0].should == nil
72
- "x"[-2, 1].should == nil
73
- end
74
-
75
- describe "with range" do
76
- it "returns the substring given by the offsets of the range" do
77
- "hello there"[1..1].should == "e"
78
- "hello there"[1..3].should == "ell"
79
- "hello there"[1...3].should == "el"
80
- "hello there"[-4..-2].should == "her"
81
- "hello there"[-4...-2].should == "he"
82
- "hello there"[5..-1].should == " there"
83
- "hello there"[5...-1].should == " ther"
84
-
85
- ""[0..0].should == ""
86
-
87
- "x"[0..0].should == "x"
88
- "x"[0..1].should == "x"
89
- "x"[0...1].should == "x"
90
- "x"[0..-1].should == "x"
91
-
92
- "x"[1..1].should == ""
93
- "x"[1..-1].should == ""
94
- end
95
- end
96
- end
@@ -1,49 +0,0 @@
1
- class Object
2
- # This helper is defined here rather than in MSpec because
3
- # it is only used in #unpack specs.
4
- def unpack_format(count=nil, repeat=nil)
5
- format = "#{instance_variable_get(:@method)}#{count}"
6
- format *= repeat if repeat
7
- format
8
- end
9
- end
10
-
11
- module StringSpecs
12
- class MyString < String; end
13
- class MyArray < Array; end
14
- class MyRange < Range; end
15
-
16
- class SubString < String
17
- attr_reader :special
18
-
19
- def initialize(str=nil)
20
- @special = str
21
- end
22
- end
23
-
24
- class InitializeString < String
25
- attr_reader :ivar
26
-
27
- def initialize(other)
28
- super
29
- @ivar = 1
30
- end
31
-
32
- def initialize_copy(other)
33
- ScratchPad.record object_id
34
- end
35
- end
36
-
37
- module StringModule
38
- def repr
39
- 1
40
- end
41
- end
42
-
43
- class StringWithRaisingConstructor < String
44
- def initialize(str)
45
- raise ArgumentError.new('constructor was called') unless str == 'silly:string'
46
- self.replace(str)
47
- end
48
- end
49
- end