diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-07-12 17:50:44 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-07-12 17:50:44 +0900 |
| commit | a16a53b5ebc0fb6a7dc448130ea8f34575d85a3d (patch) | |
| tree | 890a25f96916c8eea4906f423f8ffcfc9d41f01c /test | |
| parent | 4f66de36c4531783da624a6ff0b8bfb22d083efd (diff) | |
| parent | 03866f25f86a4f0d0f924b664414fedaac31319d (diff) | |
| download | mruby-a16a53b5ebc0fb6a7dc448130ea8f34575d85a3d.tar.gz mruby-a16a53b5ebc0fb6a7dc448130ea8f34575d85a3d.zip | |
Merge pull request #2458 from take-cheeze/min_dep_test
Support minimum dependency test.
Diffstat (limited to 'test')
| -rw-r--r-- | test/driver.c | 65 | ||||
| -rw-r--r-- | test/init_mrbtest.c | 13 | ||||
| -rw-r--r-- | test/mrbtest.rake | 11 | ||||
| -rw-r--r-- | test/no_mrb_open_test_dummy.rb | 2 |
4 files changed, 70 insertions, 21 deletions
diff --git a/test/driver.c b/test/driver.c index 7fd8ef720..c696262bf 100644 --- a/test/driver.c +++ b/test/driver.c @@ -16,6 +16,7 @@ #include "mruby/compile.h" #include "mruby/string.h" #include "mruby/variable.h" +#include "mruby/array.h" void mrb_init_mrbtest(mrb_state *); @@ -81,12 +82,62 @@ mrb_t_printstr(mrb_state *mrb, mrb_value self) return argv; } +void +mrb_init_test_driver(mrb_state *mrb) +{ + struct RClass *krn, *mrbtest; + + krn = mrb->kernel_module; + mrb_define_method(mrb, krn, "__t_printstr__", mrb_t_printstr, MRB_ARGS_REQ(1)); + + mrbtest = mrb_define_module(mrb, "Mrbtest"); + + mrb_define_const(mrb, mrbtest, "FIXNUM_MAX", mrb_fixnum_value(MRB_INT_MAX)); + mrb_define_const(mrb, mrbtest, "FIXNUM_MIN", mrb_fixnum_value(MRB_INT_MIN)); + mrb_define_const(mrb, mrbtest, "FIXNUM_BIT", mrb_fixnum_value(MRB_INT_BIT)); +} + +void +mrb_t_pass_result(mrb_state *mrb_dst, mrb_state *mrb_src) +{ + mrb_value res_src; + + if (mrb_src->exc) { + mrb_print_error(mrb_src); + exit(EXIT_FAILURE); + } + +#define TEST_COUNT_PASS(name) \ + do { \ + res_src = mrb_gv_get(mrb_src, mrb_intern_lit(mrb_src, "$" #name)); \ + if (mrb_fixnum_p(res_src)) { \ + mrb_value res_dst = mrb_gv_get(mrb_dst, mrb_intern_lit(mrb_dst, "$" #name)); \ + mrb_gv_set(mrb_dst, mrb_intern_lit(mrb_dst, "$" #name), mrb_fixnum_value(mrb_fixnum(res_dst) + mrb_fixnum(res_src))); \ + } \ + } while (FALSE) \ + + TEST_COUNT_PASS(ok_test); + TEST_COUNT_PASS(ko_test); + TEST_COUNT_PASS(kill_test); + +#undef TEST_COUNT_PASS + + res_src = mrb_gv_get(mrb_src, mrb_intern_lit(mrb_src, "$asserts")); + + if (mrb_array_p(res_src)) { + mrb_int i; + mrb_value res_dst = mrb_gv_get(mrb_dst, mrb_intern_lit(mrb_dst, "$asserts")); + for (i = 0; i < RARRAY_LEN(res_src); ++i) { + mrb_value val_src = RARRAY_PTR(res_src)[i]; + mrb_ary_push(mrb_dst, res_dst, mrb_str_new(mrb_dst, RSTRING_PTR(val_src), RSTRING_LEN(val_src))); + } + } +} + int main(int argc, char **argv) { mrb_state *mrb; - struct RClass *krn; - struct RClass *mrbtest; int ret; print_hint(); @@ -103,15 +154,7 @@ main(int argc, char **argv) mrb_gv_set(mrb, mrb_intern_lit(mrb, "$mrbtest_verbose"), mrb_true_value()); } - krn = mrb->kernel_module; - mrb_define_method(mrb, krn, "__t_printstr__", mrb_t_printstr, MRB_ARGS_REQ(1)); - - mrbtest = mrb_define_module(mrb, "Mrbtest"); - - mrb_define_const(mrb, mrbtest, "FIXNUM_MAX", mrb_fixnum_value(MRB_INT_MAX)); - mrb_define_const(mrb, mrbtest, "FIXNUM_MIN", mrb_fixnum_value(MRB_INT_MIN)); - mrb_define_const(mrb, mrbtest, "FIXNUM_BIT", mrb_fixnum_value(MRB_INT_BIT)); - + mrb_init_test_driver(mrb); mrb_init_mrbtest(mrb); ret = eval_test(mrb); mrb_close(mrb); diff --git a/test/init_mrbtest.c b/test/init_mrbtest.c index 3ce42f661..3a61a6f39 100644 --- a/test/init_mrbtest.c +++ b/test/init_mrbtest.c @@ -6,15 +6,26 @@ extern const uint8_t mrbtest_assert_irep[]; extern const uint8_t mrbtest_irep[]; void mrbgemtest_init(mrb_state* mrb); +void mrb_init_test_driver(mrb_state* mrb); +void mrb_t_pass_result(mrb_state *mrb_dst, mrb_state *mrb_src); void mrb_init_mrbtest(mrb_state *mrb) { + mrb_state *core_test; + mrb_load_irep(mrb, mrbtest_assert_irep); - mrb_load_irep(mrb, mrbtest_irep); + + core_test = mrb_open_core(mrb_default_allocf, NULL); + mrb_init_test_driver(core_test); + mrb_load_irep(core_test, mrbtest_assert_irep); + mrb_load_irep(core_test, mrbtest_irep); + mrb_t_pass_result(mrb, core_test); + #ifndef DISABLE_GEMS mrbgemtest_init(mrb); #endif + if (mrb->exc) { mrb_print_error(mrb); exit(EXIT_FAILURE); diff --git a/test/mrbtest.rake b/test/mrbtest.rake index c28cf3577..21afad946 100644 --- a/test/mrbtest.rake +++ b/test/mrbtest.rake @@ -12,11 +12,12 @@ MRuby.each_target do ass_lib = ass_c.ext(exts.object) mrbtest_lib = libfile("#{current_build_dir}/mrbtest") - gem_test_files = gems.select { |g| g.run_test_in_other_mrb_state? }.map { |g| g.test_rbireps.ext(exts.object) } - file mrbtest_lib => [mlib, ass_lib, gems.map(&:test_objs), gem_test_files].flatten do |t| + mrbtest_objs = gems.map do |v| + v.test_objs + [v.test_rbireps.ext(exts.object)] + end + file mrbtest_lib => [mlib, ass_lib] + mrbtest_objs do |t| archiver.run t.name, t.prerequisites end - file mrbtest_lib => "#{build_dir}/test/no_mrb_open_test.c".ext(exts.object) unless build_mrbtest_lib_only? driver_obj = objfile("#{current_build_dir}/driver") @@ -55,16 +56,12 @@ MRuby.each_target do f.puts IO.read(init) mrbc.run f, mrbs, 'mrbtest_irep' gems.each do |g| - next unless g.run_test_in_other_mrb_state? f.puts %Q[void GENERATED_TMP_mrb_#{g.funcname}_gem_test(mrb_state *mrb);] end - f.puts %Q[void no_mrb_open_mrbgem_test(mrb_state *mrb);] f.puts %Q[void mrbgemtest_init(mrb_state* mrb) {] gems.each do |g| - next unless g.run_test_in_other_mrb_state? f.puts %Q[ GENERATED_TMP_mrb_#{g.funcname}_gem_test(mrb);] end - f.puts %Q[ no_mrb_open_mrbgem_test(mrb);] f.puts %Q[}] end end diff --git a/test/no_mrb_open_test_dummy.rb b/test/no_mrb_open_test_dummy.rb deleted file mode 100644 index 5181c0a45..000000000 --- a/test/no_mrb_open_test_dummy.rb +++ /dev/null @@ -1,2 +0,0 @@ -#dummy - |
