Skip to content

Commit a20fbe5

Browse files
committed
mrbgems/mruby-test/mrbgem.rake: stop mrb isolation for each test file
It reduces the number of `mrb_state` initialization in `mrbtest`. But at the same time, each test in a gem shares states (classes, methods, etc.)
1 parent a67f325 commit a20fbe5

File tree

1 file changed

+24
-27
lines changed

1 file changed

+24
-27
lines changed

mrbgems/mruby-test/mrbgem.rake

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -66,33 +66,27 @@ MRuby::Gem::Specification.new('mruby-test') do |spec|
6666
f.puts %Q[void mrb_t_pass_result(mrb_state *dst, mrb_state *src);]
6767
f.puts %Q[void GENERATED_TMP_mrb_#{g.funcname}_gem_test(mrb_state *mrb) {]
6868
unless g.test_rbfiles.empty?
69-
f.puts %Q[ mrb_state *mrb2;]
7069
unless g.test_args.empty?
7170
f.puts %Q[ mrb_value test_args_hash;]
7271
end
72+
f.puts %Q[ mrb_state *mrb2 = mrb_open_core(mrb_default_allocf, NULL);]
73+
f.puts %Q[ if (mrb2 == NULL) {]
74+
f.puts %Q[ fprintf(stderr, "Invalid mrb_state, exiting \%s", __func__);]
75+
f.puts %Q[ exit(EXIT_FAILURE);]
76+
f.puts %Q[ }]
77+
f.puts %Q[ mrb_const_set(mrb2, mrb_obj_value(mrb2->object_class), mrb_intern_lit(mrb2, "GEMNAME"), mrb_str_new(mrb2, "#{g.name}", #{g.name.length}));]
78+
if test_preload.nil?
79+
f.puts %Q[ mrb_load_irep(mrb2, mrbtest_assert_irep);]
80+
else
81+
f.puts %Q[ mrb_load_irep(mrb2, gem_test_irep_#{g.funcname}_preload);]
82+
end
83+
dep_list.each do |d|
84+
f.puts %Q[ GENERATED_TMP_mrb_#{d.funcname}_gem_init(mrb2);]
85+
f.puts %Q[ mrb_state_atexit(mrb2, GENERATED_TMP_mrb_#{d.funcname}_gem_final);]
86+
end
87+
f.puts %Q[ mrb_init_test_driver(mrb2, mrb_test(mrb_gv_get(mrb, mrb_intern_lit(mrb, "$mrbtest_verbose"))));]
88+
f.puts %Q[ ]
7389
g.test_rbfiles.count.times do |i|
74-
f.puts %Q[ mrb2 = mrb_open_core(mrb_default_allocf, NULL);]
75-
f.puts %Q[ if (mrb2 == NULL) {]
76-
f.puts %Q[ fprintf(stderr, "Invalid mrb_state, exiting \%s", __func__);]
77-
f.puts %Q[ exit(EXIT_FAILURE);]
78-
f.puts %Q[ }]
79-
dep_list.each do |d|
80-
f.puts %Q[ GENERATED_TMP_mrb_#{d.funcname}_gem_init(mrb2);]
81-
f.puts %Q[ mrb_state_atexit(mrb2, GENERATED_TMP_mrb_#{d.funcname}_gem_final);]
82-
end
83-
f.puts %Q[ mrb_init_test_driver(mrb2, mrb_test(mrb_gv_get(mrb, mrb_intern_lit(mrb, "$mrbtest_verbose"))));]
84-
if test_preload.nil?
85-
f.puts %Q[ mrb_load_irep(mrb2, mrbtest_assert_irep);]
86-
else
87-
f.puts %Q[ mrb_load_irep(mrb2, gem_test_irep_#{g.funcname}_preload);]
88-
end
89-
f.puts %Q[ if (mrb2->exc) {]
90-
f.puts %Q[ mrb_print_error(mrb2);]
91-
f.puts %Q[ mrb_close(mrb2);]
92-
f.puts %Q[ exit(EXIT_FAILURE);]
93-
f.puts %Q[ }]
94-
f.puts %Q[ mrb_const_set(mrb2, mrb_obj_value(mrb2->object_class), mrb_intern_lit(mrb2, "GEMNAME"), mrb_str_new(mrb2, "#{g.name}", #{g.name.length}));]
95-
9690
unless g.test_args.empty?
9791
f.puts %Q[ test_args_hash = mrb_hash_new_capa(mrb2, #{g.test_args.length}); ]
9892
g.test_args.each do |arg_name, arg_value|
@@ -104,13 +98,16 @@ MRuby::Gem::Specification.new('mruby-test') do |spec|
10498
end
10599

106100
f.puts %Q[ mrb_#{g.funcname}_gem_test(mrb2);] if g.custom_test_init?
107-
108101
f.puts %Q[ mrb_load_irep(mrb2, gem_test_irep_#{g.funcname}_#{i});]
102+
f.puts %Q[ if (mrb2->exc) {]
103+
f.puts %Q[ mrb_print_error(mrb2);]
104+
f.puts %Q[ mrb_close(mrb2);]
105+
f.puts %Q[ exit(EXIT_FAILURE);]
106+
f.puts %Q[ }]
109107
f.puts %Q[ ]
110-
111-
f.puts %Q[ mrb_t_pass_result(mrb, mrb2);]
112-
f.puts %Q[ mrb_close(mrb2);]
113108
end
109+
f.puts %Q[ mrb_t_pass_result(mrb, mrb2);]
110+
f.puts %Q[ mrb_close(mrb2);]
114111
end
115112
f.puts %Q[}]
116113
end

0 commit comments

Comments
 (0)