summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-struct
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2015-12-26 15:46:49 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2015-12-26 15:46:49 +0900
commitd3c6fafaf3fe61961a46338f4ced4d99918a8f35 (patch)
tree855a9852647c2fc6facda2a5f39b289d90cfdf53 /mrbgems/mruby-struct
parent825ced12ded147fabff1b9abd624ed9fad1c4d2b (diff)
parente6a263a16212b3d8c4768c0d3808eaafcb2e7f60 (diff)
downloadmruby-d3c6fafaf3fe61961a46338f4ced4d99918a8f35.tar.gz
mruby-d3c6fafaf3fe61961a46338f4ced4d99918a8f35.zip
Merge pull request #2331 from take-cheeze/struct_test
Improve `Struct` test.
Diffstat (limited to 'mrbgems/mruby-struct')
-rw-r--r--mrbgems/mruby-struct/src/struct.c8
-rw-r--r--mrbgems/mruby-struct/test/struct.rb37
2 files changed, 28 insertions, 17 deletions
diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c
index 17455c155..ea91a0436 100644
--- a/mrbgems/mruby-struct/src/struct.c
+++ b/mrbgems/mruby-struct/src/struct.c
@@ -455,7 +455,7 @@ struct_aref_sym(mrb_state *mrb, mrb_value s, mrb_sym id)
return ptr[i];
}
}
- mrb_raisef(mrb, E_INDEX_ERROR, "no member '%S' in struct", mrb_sym2str(mrb, id));
+ mrb_name_error(mrb, id, "no member '%S' in struct", mrb_sym2str(mrb, id));
return mrb_nil_value(); /* not reached */
}
@@ -503,7 +503,7 @@ mrb_struct_aref(mrb_state *mrb, mrb_value s)
mrb_value sym = mrb_check_intern_str(mrb, idx);
if (mrb_nil_p(sym)) {
- mrb_raisef(mrb, E_INDEX_ERROR, "no member '%S' in struct", idx);
+ mrb_name_error(mrb, mrb_intern_str(mrb, idx), "no member '%S' in struct", idx);
}
idx = sym;
}
@@ -535,7 +535,7 @@ mrb_struct_aset_sym(mrb_state *mrb, mrb_value s, mrb_sym id, mrb_value val)
return val;
}
}
- mrb_raisef(mrb, E_INDEX_ERROR, "no member '%S' in struct", mrb_sym2str(mrb, id));
+ mrb_name_error(mrb, id, "no member '%S' in struct", mrb_sym2str(mrb, id));
return val; /* not reach */
}
@@ -574,7 +574,7 @@ mrb_struct_aset(mrb_state *mrb, mrb_value s)
mrb_value sym = mrb_check_intern_str(mrb, idx);
if (mrb_nil_p(sym)) {
- mrb_raisef(mrb, E_INDEX_ERROR, "no member '%S' in struct", idx);
+ mrb_name_error(mrb, mrb_intern_str(mrb, idx), "no member '%S' in struct", idx);
}
idx = sym;
}
diff --git a/mrbgems/mruby-struct/test/struct.rb b/mrbgems/mruby-struct/test/struct.rb
index 2db8f5d32..0307bb1db 100644
--- a/mrbgems/mruby-struct/test/struct.rb
+++ b/mrbgems/mruby-struct/test/struct.rb
@@ -2,42 +2,55 @@
# Struct ISO Test
assert('Struct', '15.2.18') do
- Struct.class == Class
+ assert_equal Class, Struct.class
end
assert('Struct.new', '15.2.18.3.1') do
c = Struct.new(:m1, :m2)
- c.superclass == Struct and
- c.members == [:m1,:m2]
+ assert_equal Struct, c.superclass
+ assert_equal [:m1, :m2], c.members
end
# Check crash bug with Struc.new and no params.
assert('Struct.new', '15.2.18.3.1') do
c = Struct.new()
- c.superclass == Struct and c.members == []
+ assert_equal Struct, c.superclass
+ assert_equal [], c.members
end
assert('Struct#==', '15.2.18.4.1') do
c = Struct.new(:m1, :m2)
cc1 = c.new(1,2)
cc2 = c.new(1,2)
- cc1 == cc2
+ assert_true cc1 == cc2
end
assert('Struct#[]', '15.2.18.4.2') do
c = Struct.new(:m1, :m2)
cc = c.new(1,2)
- cc[:m1] == 1 and cc["m2"] == 2
+ assert_equal 1, cc[:m1]
+ assert_equal 2, cc["m2"]
+ assert_equal 1, cc[0]
+ assert_equal 2, cc[-1]
+ assert_raise(TypeError) { cc[[]] }
+ assert_raise(IndexError) { cc[2] }
+ assert_raise(NameError) { cc['tama'] }
end
assert('Struct#[]=', '15.2.18.4.3') do
c = Struct.new(:m1, :m2)
cc = c.new(1,2)
cc[:m1] = 3
- cc[:m1] == 3
+ assert_equal 3, cc[:m1]
cc["m2"] = 3
assert_equal 3, cc["m2"]
+ cc[0] = 4
+ assert_equal 4, cc[0]
+ cc[-1] = 5
+ assert_equal 5, cc[-1]
assert_raise(TypeError) { cc[[]] = 3 }
+ assert_raise(IndexError) { cc[2] = 7 }
+ assert_raise(NameError) { cc['pochi'] = 8 }
end
assert('Struct#each', '15.2.18.4.4') do
@@ -47,7 +60,7 @@ assert('Struct#each', '15.2.18.4.4') do
cc.each{|x|
a << x
}
- a[0] == 1 and a[1] == 2
+ assert_equal [1, 2], a
end
assert('Struct#each_pair', '15.2.18.4.5') do
@@ -57,19 +70,17 @@ assert('Struct#each_pair', '15.2.18.4.5') do
cc.each_pair{|k,v|
a << [k,v]
}
- a[0] == [:m1, 1] and a[1] == [:m2, 2]
+ assert_equal [[:m1, 1], [:m2, 2]], a
end
assert('Struct#members', '15.2.18.4.6') do
c = Struct.new(:m1, :m2)
- cc = c.new(1,2)
- cc.members == [:m1,:m2]
+ assert_equal [:m1, :m2], c.new(1,2).members
end
assert('Struct#select', '15.2.18.4.7') do
c = Struct.new(:m1, :m2)
- cc = c.new(1,2)
- cc.select{|v| v % 2 == 0} == [2]
+ assert_equal([2]) { c.new(1,2).select{|v| v % 2 == 0} }
end
assert('large struct') do