Rakefile in rbs-0.4.0 vs Rakefile in rbs-0.5.0
- old
+ new
@@ -7,14 +7,27 @@
t.test_files = FileList["test/**/*_test.rb"].reject do |path|
path =~ %r{test/stdlib/}
end
end
-multitask :default => [:test, :stdlib_test, :rubocop, :validate]
+multitask :default => [:test, :stdlib_test, :rubocop, :validate, :test_doc]
+task :test_doc => :parser do
+ files = Dir.chdir(File.expand_path('..', __FILE__)) do
+ `git ls-files -z`.split("\x0").select do |file| Pathname(file).extname == ".md" end
+ end
+
+ sh "ruby bin/run_in_md.rb #{files.join(" ")}"
+end
+
task :validate => :parser do
sh "rbs validate"
+
+ FileList["stdlib/*"].each do |path|
+ next if path =~ %r{stdlib/builtin}
+ sh "rbs -r#{File.basename(path)} validate"
+ end
end
FileList["test/stdlib/**/*_test.rb"].each do |test|
multitask test => :parser do
sh "ruby bin/test_runner.rb #{test}"
@@ -39,11 +52,11 @@
task :stdlib_test, [:class] do |_task, args|
klass = args.fetch(:class) do
raise "Class name is necessary. e.g. rake 'generate:stdlib_test[String]'"
end
- path = Pathname("test/stdlib/#{klass}_test.rb")
+ path = Pathname(ENV["RBS_GENERATE_TEST_PATH"] || "test/stdlib/#{klass}_test.rb")
raise "#{path} already exists!" if path.exist?
require "erb"
require "rbs"
@@ -51,39 +64,59 @@
attr_reader :klass, :env
def initialize(klass)
@klass = klass
- @env = Ruby::Signature::Environment.new
- Ruby::Signature::EnvironmentLoader.new.load(env: @env)
+ loader = RBS::EnvironmentLoader.new
+ Dir['stdlib/*'].each do |lib|
+ next if lib.end_with?('builtin')
+
+ loader.add(library: File.basename(lib))
+ end
+ @env = RBS::Environment.from_loader(loader).resolve_type_names
end
def call
ERB.new(<<~ERB, trim_mode: "-").result(binding)
require_relative "test_helper"
+ require 'rbs/test/test_helper'
- class <%= klass %>Test < StdlibTest
- target <%= klass %>
+ <%- unless class_methods.empty? -%>
+ class <%= klass %>SingletonTest < Minitest::Test
+ include RBS::Test::TypeAssertions
+
# library "pathname", "set", "securerandom" # Declare library signatures to load
- using hook.refinement
+ testing "singleton(::<%= klass %>)"
+
<%- class_methods.each do |method_name, definition| %>
- def test_class_method_<%= test_name_for(method_name) %>
- <%- definition.method_types.each do |method_type| -%>
- # <%= method_type %>
- <%= klass %>.<%= method_name %>
- <%- end -%>
+ def test_<%= test_name_for(method_name) %>
+ <%- definition.method_types.each do |method_type| -%>
+ assert_send_type "<%= method_type %>",
+ <%= klass %>, :<%= method_name %>
+ <%- end -%>
end
<%- end -%>
+ end
+ <%- end -%>
+
+ <%- unless instance_methods.empty? -%>
+ class <%= klass %>Test < Minitest::Test
+ include RBS::Test::TypeAssertions
+
+ # library "pathname", "set", "securerandom" # Declare library signatures to load
+ testing "::<%= klass %>"
+
<%- instance_methods.each do |method_name, definition| %>
def test_<%= test_name_for(method_name) %>
- <%- definition.method_types.each do |method_type| -%>
- # <%= method_type %>
- <%= klass %>.new.<%= method_name %>
- <%- end -%>
+ <%- definition.method_types.each do |method_type| -%>
+ assert_send_type "<%= method_type %>",
+ <%= klass %>.new, :<%= method_name %>
+ <%- end -%>
end
<%- end -%>
end
+ <%- end -%>
ERB
end
private
@@ -115,21 +148,21 @@
:~ => 'tilde'
}.fetch(method_name, method_name)
end
def type_name
- @type_name ||= Ruby::Signature::TypeName.new(name: klass.to_sym, namespace: Ruby::Signature::Namespace.new(path: [], absolute: true))
+ @type_name ||= RBS::TypeName.new(name: klass.to_sym, namespace: RBS::Namespace.new(path: [], absolute: true))
end
def class_methods
- @class_methods ||= Ruby::Signature::DefinitionBuilder.new(env: env).build_singleton(type_name).methods.select {|_, definition|
- definition.implemented_in.name.absolute! == type_name
+ @class_methods ||= RBS::DefinitionBuilder.new(env: env).build_singleton(type_name).methods.select {|_, definition|
+ definition.implemented_in == type_name
}
end
def instance_methods
- @instance_methods ||= Ruby::Signature::DefinitionBuilder.new(env: env).build_instance(type_name).methods.select {|_, definition|
- definition.implemented_in.name.absolute! == type_name
+ @instance_methods ||= RBS::DefinitionBuilder.new(env: env).build_instance(type_name).methods.select {|_, definition|
+ definition.implemented_in == type_name
}
end
end
path.write TestTemplateBuilder.new(klass).call