diff options
| author | take_cheeze <[email protected]> | 2014-07-10 21:43:07 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-07-12 20:36:45 +0900 |
| commit | 4a6c651f82c2d416682e9729842d4fda6beee2bf (patch) | |
| tree | 890a25f96916c8eea4906f423f8ffcfc9d41f01c /test/driver.c | |
| parent | aff65afe97cc241af396ceb8df15bed27788c108 (diff) | |
| download | mruby-4a6c651f82c2d416682e9729842d4fda6beee2bf.tar.gz mruby-4a6c651f82c2d416682e9729842d4fda6beee2bf.zip | |
Run mrbgem and core tests on minimum dependencies.
Solves #2355.
In test drivers:
* Uses `mrb_t_pass_result` to check and pass test result to main `mrb_state`.
* Adds `mrb_init_test_driver` to init test `mrb_state`.
Diffstat (limited to 'test/driver.c')
| -rw-r--r-- | test/driver.c | 65 |
1 files changed, 54 insertions, 11 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); |
