From 79f802365f02c242fd104664e97431bd8f18001c Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Tue, 29 Jan 2013 21:54:03 -0500 Subject: Add ability to pass parameters from mrbgem.rake spec into test scripts. --- examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake | 3 +++ examples/mrbgems/c_extension_example/mrbgem.rake | 3 +++ examples/mrbgems/ruby_extension_example/mrbgem.rake | 3 +++ tasks/mrbgem_spec.rake | 4 +++- tasks/mrbgems_test.rake | 10 +++++++++- 5 files changed, 21 insertions(+), 2 deletions(-) diff --git a/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake b/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake index 88f7b31f6..067aa2cba 100644 --- a/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake +++ b/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake @@ -17,4 +17,7 @@ MRuby::Gem::Specification.new('c_and_ruby_extension_example') do |spec| # spec.test_rbfiles = Dir.glob("#{dir}/test/*.rb") # spec.test_objs = Dir.glob("#{dir}/test/*.{c,cpp,m,asm,S}").map { |f| objfile(f.relative_path_from(dir).pathmap("#{build_dir}/%X")) } # spec.test_preload = 'test/assert.rb' + + # Values accessible as $test_args inside test scripts + # spec.test_args = {'tmp_dir' => Dir::tmpdir} end diff --git a/examples/mrbgems/c_extension_example/mrbgem.rake b/examples/mrbgems/c_extension_example/mrbgem.rake index e19121df4..f56564222 100644 --- a/examples/mrbgems/c_extension_example/mrbgem.rake +++ b/examples/mrbgems/c_extension_example/mrbgem.rake @@ -17,4 +17,7 @@ MRuby::Gem::Specification.new('c_extension_example') do |spec| # spec.test_rbfiles = Dir.glob("#{dir}/test/*.rb") # spec.test_objs = Dir.glob("#{dir}/test/*.{c,cpp,m,asm,S}").map { |f| objfile(f.relative_path_from(dir).pathmap("#{build_dir}/%X")) } # spec.test_preload = 'test/assert.rb' + + # Values accessible as $test_args inside test scripts + # spec.test_args = {'tmp_dir' => Dir::tmpdir} end diff --git a/examples/mrbgems/ruby_extension_example/mrbgem.rake b/examples/mrbgems/ruby_extension_example/mrbgem.rake index da0ad73a8..4429460e9 100644 --- a/examples/mrbgems/ruby_extension_example/mrbgem.rake +++ b/examples/mrbgems/ruby_extension_example/mrbgem.rake @@ -17,4 +17,7 @@ MRuby::Gem::Specification.new('ruby_extension_example') do |spec| # spec.test_rbfiles = Dir.glob("#{dir}/test/*.rb") # spec.test_objs = Dir.glob("#{dir}/test/*.{c,cpp,m,asm,S}").map { |f| objfile(f.relative_path_from(dir).pathmap("#{build_dir}/%X")) } # spec.test_preload = 'test/assert.rb' + + # Values accessible as $test_args inside test scripts + # spec.test_args = {'tmp_dir' => Dir::tmpdir} end diff --git a/tasks/mrbgem_spec.rake b/tasks/mrbgem_spec.rake index 49e45bbc9..daf4410de 100644 --- a/tasks/mrbgem_spec.rake +++ b/tasks/mrbgem_spec.rake @@ -22,7 +22,7 @@ module MRuby alias :author= :authors= attr_accessor :rbfiles, :objs - attr_accessor :test_objs, :test_rbfiles + attr_accessor :test_objs, :test_rbfiles, :test_args attr_accessor :test_preload attr_block MRuby::Build::COMMANDS @@ -54,6 +54,7 @@ module MRuby objfile(f.relative_path_from(dir).to_s.pathmap("#{build_dir}/%X")) end @test_preload = 'test/assert.rb' + @test_args = {} instance_eval(&@initializer) @@ -140,6 +141,7 @@ module MRuby f.puts %Q[#include "mruby/proc.h"] f.puts %Q[#include "mruby/variable.h"] f.puts %Q[#include "mruby/array.h"] + f.puts %Q[#include "mruby/hash.h"] end end # Specification diff --git a/tasks/mrbgems_test.rake b/tasks/mrbgems_test.rake index cb00aba57..bc263c80e 100644 --- a/tasks/mrbgems_test.rake +++ b/tasks/mrbgems_test.rake @@ -32,7 +32,15 @@ MRuby.each_target do f.puts %Q[ exit(0);] f.puts %Q[ }] f.puts %Q[ mrb_const_set(mrb2, mrb_obj_value(mrb2->object_class), mrb_intern(mrb2, "GEMNAME"), mrb_str_new(mrb2, "#{g.name}", #{g.name.length}));] - + + if not g.test_args.empty? + f.puts %Q[ mrb_value test_args_hash = mrb_hash_new_capa(mrb, #{g.test_args.length}); ] + g.test_args.each do |arg_name, arg_value| + f.puts %Q[ mrb_hash_set(mrb2, test_args_hash, mrb_str_new(mrb2, "#{arg_name.to_s}", #{arg_name.to_s.length}), mrb_str_new(mrb2, "#{arg_value.to_s}", #{arg_value.to_s.length})); ] + end + f.puts %Q[ mrb_gv_set(mrb2, mrb_intern(mrb2, "$test_args"), test_args_hash); ] + end + f.puts %Q[ mrb_#{g.funcname}_gem_test(mrb2);] unless g.test_objs.empty? f.puts %Q[ mrb_load_irep(mrb2, gem_test_irep_#{g.funcname}_#{i});] -- cgit v1.2.3 From 33081f52ab7f3363f5811ae4101ee81fbf0e86fd Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Wed, 30 Jan 2013 05:27:42 -0500 Subject: Make sure quotes and escapes get escaped. --- tasks/mrbgems_test.rake | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tasks/mrbgems_test.rake b/tasks/mrbgems_test.rake index bc263c80e..b1c318556 100644 --- a/tasks/mrbgems_test.rake +++ b/tasks/mrbgems_test.rake @@ -36,7 +36,9 @@ MRuby.each_target do if not g.test_args.empty? f.puts %Q[ mrb_value test_args_hash = mrb_hash_new_capa(mrb, #{g.test_args.length}); ] g.test_args.each do |arg_name, arg_value| - f.puts %Q[ mrb_hash_set(mrb2, test_args_hash, mrb_str_new(mrb2, "#{arg_name.to_s}", #{arg_name.to_s.length}), mrb_str_new(mrb2, "#{arg_value.to_s}", #{arg_value.to_s.length})); ] + escaped_arg_name = arg_name.gsub('\\', '\\\\\\\\').gsub('"', '\"') + escaped_arg_value = arg_value.gsub('\\', '\\\\\\\\').gsub('"', '\"') + f.puts %Q[ mrb_hash_set(mrb2, test_args_hash, mrb_str_new(mrb2, "#{escaped_arg_name.to_s}", #{escaped_arg_name.to_s.length}), mrb_str_new(mrb2, "#{escaped_arg_value.to_s}", #{escaped_arg_value.to_s.length})); ] end f.puts %Q[ mrb_gv_set(mrb2, mrb_intern(mrb2, "$test_args"), test_args_hash); ] end -- cgit v1.2.3 From c1ca6621700fcc486daed1209d0a9b0440a985bf Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Wed, 30 Jan 2013 05:36:03 -0500 Subject: Changed variable $test_args to constant TEST_ARGS --- examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake | 2 +- examples/mrbgems/c_extension_example/mrbgem.rake | 2 +- examples/mrbgems/ruby_extension_example/mrbgem.rake | 2 +- tasks/mrbgems_test.rake | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake b/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake index 067aa2cba..35dbe5e18 100644 --- a/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake +++ b/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake @@ -18,6 +18,6 @@ MRuby::Gem::Specification.new('c_and_ruby_extension_example') do |spec| # spec.test_objs = Dir.glob("#{dir}/test/*.{c,cpp,m,asm,S}").map { |f| objfile(f.relative_path_from(dir).pathmap("#{build_dir}/%X")) } # spec.test_preload = 'test/assert.rb' - # Values accessible as $test_args inside test scripts + # Values accessible as TEST_ARGS inside test scripts # spec.test_args = {'tmp_dir' => Dir::tmpdir} end diff --git a/examples/mrbgems/c_extension_example/mrbgem.rake b/examples/mrbgems/c_extension_example/mrbgem.rake index f56564222..8c132b233 100644 --- a/examples/mrbgems/c_extension_example/mrbgem.rake +++ b/examples/mrbgems/c_extension_example/mrbgem.rake @@ -18,6 +18,6 @@ MRuby::Gem::Specification.new('c_extension_example') do |spec| # spec.test_objs = Dir.glob("#{dir}/test/*.{c,cpp,m,asm,S}").map { |f| objfile(f.relative_path_from(dir).pathmap("#{build_dir}/%X")) } # spec.test_preload = 'test/assert.rb' - # Values accessible as $test_args inside test scripts + # Values accessible as TEST_ARGS inside test scripts # spec.test_args = {'tmp_dir' => Dir::tmpdir} end diff --git a/examples/mrbgems/ruby_extension_example/mrbgem.rake b/examples/mrbgems/ruby_extension_example/mrbgem.rake index 4429460e9..3a80b5cd7 100644 --- a/examples/mrbgems/ruby_extension_example/mrbgem.rake +++ b/examples/mrbgems/ruby_extension_example/mrbgem.rake @@ -18,6 +18,6 @@ MRuby::Gem::Specification.new('ruby_extension_example') do |spec| # spec.test_objs = Dir.glob("#{dir}/test/*.{c,cpp,m,asm,S}").map { |f| objfile(f.relative_path_from(dir).pathmap("#{build_dir}/%X")) } # spec.test_preload = 'test/assert.rb' - # Values accessible as $test_args inside test scripts + # Values accessible as TEST_ARGS inside test scripts # spec.test_args = {'tmp_dir' => Dir::tmpdir} end diff --git a/tasks/mrbgems_test.rake b/tasks/mrbgems_test.rake index b1c318556..80c309c44 100644 --- a/tasks/mrbgems_test.rake +++ b/tasks/mrbgems_test.rake @@ -40,7 +40,7 @@ MRuby.each_target do escaped_arg_value = arg_value.gsub('\\', '\\\\\\\\').gsub('"', '\"') f.puts %Q[ mrb_hash_set(mrb2, test_args_hash, mrb_str_new(mrb2, "#{escaped_arg_name.to_s}", #{escaped_arg_name.to_s.length}), mrb_str_new(mrb2, "#{escaped_arg_value.to_s}", #{escaped_arg_value.to_s.length})); ] end - f.puts %Q[ mrb_gv_set(mrb2, mrb_intern(mrb2, "$test_args"), test_args_hash); ] + f.puts %Q[ mrb_const_set(mrb2, mrb_obj_value(mrb2->object_class), mrb_intern(mrb2, "TEST_ARGS"), test_args_hash); ] end f.puts %Q[ mrb_#{g.funcname}_gem_test(mrb2);] unless g.test_objs.empty? -- cgit v1.2.3