git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35867 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
naruse 2012-06-02 13:44:02 +00:00
Родитель 866761d2e8
Коммит d054eb9631
3 изменённых файлов: 58 добавлений и 0 удалений

Просмотреть файл

@ -0,0 +1,29 @@
#include "ruby/ruby.h"
#include "ruby/encoding.h"
static VALUE sym_7bit, sym_valid, sym_unknown, sym_broken;
static VALUE
str_coderange(VALUE str)
{
switch (ENC_CODERANGE(str)) {
case ENC_CODERANGE_7BIT:
return sym_7bit;
case ENC_CODERANGE_VALID:
return sym_valid;
case ENC_CODERANGE_UNKNOWN:
return sym_unknown;
case ENC_CODERANGE_BROKEN:
return sym_broken;
}
UNREACHABLE;
}
void
Init_coderange(VALUE klass)
{
sym_7bit = ID2SYM(rb_intern("7bit"));
sym_valid = ID2SYM(rb_intern("valid"));
sym_unknown = ID2SYM(rb_intern("unknown"));
sym_broken = ID2SYM(rb_intern("broken"));
rb_define_method(klass, "coderange", str_coderange, 0);
}

Просмотреть файл

@ -0,0 +1,14 @@
#include "ruby/ruby.h"
#include "ruby/encoding.h"
static VALUE
enc_str_buf_cat(VALUE str, VALUE str2)
{
return rb_enc_str_buf_cat(str, RSTRING_PTR(str2), RSTRING_LEN(str2), rb_enc_get(str2));
}
void
Init_enc_str_buf_cat(VALUE klass)
{
rb_define_method(klass, "enc_str_buf_cat", enc_str_buf_cat, 1);
}

Просмотреть файл

@ -0,0 +1,15 @@
require 'test/unit'
require "-test-/string/string"
class Test_StringEncStrBufCat < Test::Unit::TestCase
Bug6509 = '[ruby-dev:45688]'
def test_unknown
a8_str = "a\xBE".force_encoding(Encoding::ASCII_8BIT)
cr_unknown_str = [0x62].pack('C*')
assert_equal(true, a8_str.valid_encoding?, "an assertion for following tests")
assert_equal(:valid, Bug::String.new(a8_str).coderange, "an assertion for following tests")
assert_equal(:unknown, Bug::String.new(cr_unknown_str).coderange, "an assertion for following tests")
assert_equal(:valid, Bug::String.new(a8_str).enc_str_buf_cat(cr_unknown_str).coderange, Bug6509)
end
end