diff options
| author | Benoit Daloze <eregontp@gmail.com> | 2019-09-29 18:01:32 +0200 |
|---|---|---|
| committer | Benoit Daloze <eregontp@gmail.com> | 2019-09-29 18:01:32 +0200 |
| commit | a17bc04d159ec9839cc8cfb02dc0cdd2802110f4 (patch) | |
| tree | a10d4121aeb1517c198ab5b1577bca93912dc1f9 /spec/ruby/optional | |
| parent | f9a9f3c7c6cf3fe534d4934dd3b502d721151b81 (diff) | |
Update to ruby/spec@e69a14c
Diffstat (limited to 'spec/ruby/optional')
| -rw-r--r-- | spec/ruby/optional/capi/ext/string_spec.c | 16 | ||||
| -rw-r--r-- | spec/ruby/optional/capi/module_spec.rb | 5 | ||||
| -rw-r--r-- | spec/ruby/optional/capi/string_spec.rb | 20 |
3 files changed, 33 insertions, 8 deletions
diff --git a/spec/ruby/optional/capi/ext/string_spec.c b/spec/ruby/optional/capi/ext/string_spec.c index 6ad0b46ae4..4976dc92c4 100644 --- a/spec/ruby/optional/capi/ext/string_spec.c +++ b/spec/ruby/optional/capi/ext/string_spec.c @@ -14,14 +14,9 @@ extern "C" { * On TruffleRuby RSTRING_PTR and the bytes remain in managed memory * until they must be written to native memory. * In some specs we want to test using the native memory. */ -char* NATIVE_RSTRING_PTR(VALUE str) { - char* ptr = RSTRING_PTR(str); - char** native = malloc(sizeof(char*)); - *native = ptr; - ptr = *native; - free(native); - return ptr; -} +#ifndef NATIVE_RSTRING_PTR +#define NATIVE_RSTRING_PTR(str) RSTRING_PTR(str) +#endif VALUE string_spec_rb_cstr2inum(VALUE self, VALUE str, VALUE inum) { int num = FIX2INT(inum); @@ -124,6 +119,10 @@ VALUE string_spec_rb_str_conv_enc_opts(VALUE self, VALUE str, VALUE from, VALUE return rb_str_conv_enc_opts(str, from_enc, to_enc, FIX2INT(ecflags), ecopts); } +VALUE string_spec_rb_str_drop_bytes(VALUE self, VALUE str, VALUE len) { + return rb_str_drop_bytes(str, NUM2LONG(len)); +} + VALUE string_spec_rb_str_export(VALUE self, VALUE str) { return rb_str_export(str); } @@ -427,6 +426,7 @@ void Init_string_spec(void) { rb_define_method(cls, "rb_str_cmp", string_spec_rb_str_cmp, 2); rb_define_method(cls, "rb_str_conv_enc", string_spec_rb_str_conv_enc, 3); rb_define_method(cls, "rb_str_conv_enc_opts", string_spec_rb_str_conv_enc_opts, 5); + rb_define_method(cls, "rb_str_drop_bytes", string_spec_rb_str_drop_bytes, 2); rb_define_method(cls, "rb_str_export", string_spec_rb_str_export, 1); rb_define_method(cls, "rb_str_export_locale", string_spec_rb_str_export_locale, 1); rb_define_method(cls, "rb_str_dup", string_spec_rb_str_dup, 1); diff --git a/spec/ruby/optional/capi/module_spec.rb b/spec/ruby/optional/capi/module_spec.rb index 34e6db82d8..bf09e9d8a5 100644 --- a/spec/ruby/optional/capi/module_spec.rb +++ b/spec/ruby/optional/capi/module_spec.rb @@ -322,6 +322,11 @@ describe "CApiModule" do @class.should_not have_instance_method(:ruby_test_method) end + it "undefines private methods also" do + @m.rb_undef_method @class, "initialize_copy" + -> { @class.new.dup }.should raise_error(NoMethodError) + end + it "does not raise exceptions when passed a missing name" do -> { @m.rb_undef_method @class, "not_exist" }.should_not raise_error end diff --git a/spec/ruby/optional/capi/string_spec.rb b/spec/ruby/optional/capi/string_spec.rb index 469a190abd..1cfd590ca4 100644 --- a/spec/ruby/optional/capi/string_spec.rb +++ b/spec/ruby/optional/capi/string_spec.rb @@ -977,4 +977,24 @@ end end end + + describe "rb_str_drop_bytes" do + it "drops N characters for an ASCII string" do + str = "12345678".encode("US-ASCII") + @s.rb_str_drop_bytes(str, 4) + str.should == "5678".encode("US-ASCII") + end + + it "drop N/2 characters for a UTF-16 string" do + str = "12345678".encode("UTF-16LE") + @s.rb_str_drop_bytes(str, 4) + str.should == "345678".encode("UTF-16LE") + end + + it "drop N/4 characters for a UTF-32 string" do + str = "12345678".encode("UTF-32LE") + @s.rb_str_drop_bytes(str, 4) + str.should == "2345678".encode("UTF-32LE") + end + end end |
