From 4a8896256db2205da8c6ff8e4b0853b0308b7eb2 Mon Sep 17 00:00:00 2001 From: Andy Waite <13400+andyw8@users.noreply.github.com> Date: Tue, 5 Nov 2024 18:18:33 -0500 Subject: [PATCH] wip --- Gemfile | 1 + Gemfile.lock | 2 + Rakefile | 10 +++- test/ruby_lsp_rails/addon_test.rb | 2 +- test/ruby_lsp_rails/code_lens_test.rb | 4 +- test/ruby_lsp_rails/definition_test.rb | 2 +- test/ruby_lsp_rails/document_symbol_test.rb | 2 +- test/ruby_lsp_rails/hover_test.rb | 2 +- .../indexing_enhancement_test.rb | 2 +- test/ruby_lsp_rails/launch_test.rb | 2 +- test/ruby_lsp_rails/runner_client_test.rb | 12 +++-- test/ruby_lsp_rails/server_test.rb | 12 ++++- .../support/location_builder_test.rb | 2 +- test/ruby_lsp_rails_test.rb | 2 +- test/test_helper.rb | 46 ++++++++++++++----- 15 files changed, 73 insertions(+), 30 deletions(-) diff --git a/Gemfile b/Gemfile index cd3451b9..81d6374f 100644 --- a/Gemfile +++ b/Gemfile @@ -18,6 +18,7 @@ gem "sorbet-static-and-runtime", platforms: :ruby gem "tapioca", "~> 0.13", require: false, platforms: :ruby gem "psych", "~> 5.1", require: false gem "rails", "8.0.0.beta1" +gem "test_declarative" platforms :mingw, :x64_mingw, :mswin, :jruby do gem "tzinfo" diff --git a/Gemfile.lock b/Gemfile.lock index 826582cf..42c1a65e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -250,6 +250,7 @@ GEM spoom (>= 1.2.0) thor (>= 1.2.0) yard-sorbet + test_declarative (0.0.6) thor (1.3.2) timeout (0.4.1) tzinfo (2.0.6) @@ -289,6 +290,7 @@ DEPENDENCIES sorbet-static-and-runtime sqlite3 tapioca (~> 0.13) + test_declarative tzinfo tzinfo-data diff --git a/Rakefile b/Rakefile index e766e653..0e187347 100644 --- a/Rakefile +++ b/Rakefile @@ -13,7 +13,13 @@ require "rake/testtask" Rake::TestTask.new(:test) do |t| t.libs << "test" t.libs << "lib" - t.test_files = FileList["test/**/*_test.rb"] + t.test_files = FileList["test/**/*_test.rb"] - ["test/ruby_lsp_rails/server_test.rb"] end -task default: [:"db:setup", :test] +Rake::TestTask.new("test:server") do |t| + t.libs << "test" + t.libs << "lib" + t.test_files = ["test/ruby_lsp_rails/server_test.rb"] +end + +task default: [:"db:setup", :test, "test:server"] diff --git a/test/ruby_lsp_rails/addon_test.rb b/test/ruby_lsp_rails/addon_test.rb index 63213552..2ba1bf74 100644 --- a/test/ruby_lsp_rails/addon_test.rb +++ b/test/ruby_lsp_rails/addon_test.rb @@ -5,7 +5,7 @@ module RubyLsp module Rails - class AddonTest < ActiveSupport::TestCase + class AddonTest < Minitest::Test test "name returns add-on name" do addon = Addon.new assert_equal("Ruby LSP Rails", addon.name) diff --git a/test/ruby_lsp_rails/code_lens_test.rb b/test/ruby_lsp_rails/code_lens_test.rb index 30a769d2..2a1ede75 100644 --- a/test/ruby_lsp_rails/code_lens_test.rb +++ b/test/ruby_lsp_rails/code_lens_test.rb @@ -5,8 +5,8 @@ module RubyLsp module Rails - class CodeLensTest < ActiveSupport::TestCase - setup do + class CodeLensTest < Minitest::Test + def setup GlobalState.any_instance.stubs(:test_library).returns("rails") @ruby = Gem.win_platform? ? "ruby.exe" : "ruby" end diff --git a/test/ruby_lsp_rails/definition_test.rb b/test/ruby_lsp_rails/definition_test.rb index 581cb10a..26da6d7f 100644 --- a/test/ruby_lsp_rails/definition_test.rb +++ b/test/ruby_lsp_rails/definition_test.rb @@ -5,7 +5,7 @@ module RubyLsp module Rails - class DefinitionTest < ActiveSupport::TestCase + class DefinitionTest < Minitest::Test test "recognizes model callback with multiple symbol arguments" do response = generate_definitions_for_source(<<~RUBY, { line: 3, character: 18 }) # typed: false diff --git a/test/ruby_lsp_rails/document_symbol_test.rb b/test/ruby_lsp_rails/document_symbol_test.rb index 9896519f..2172878b 100644 --- a/test/ruby_lsp_rails/document_symbol_test.rb +++ b/test/ruby_lsp_rails/document_symbol_test.rb @@ -5,7 +5,7 @@ module RubyLsp module Rails - class DocumentSymbolTest < ActiveSupport::TestCase + class DocumentSymbolTest < Minitest::Test test "recognizes Rails Active Support test cases" do response = generate_document_symbols_for_source(<<~RUBY) class Test < ActiveSupport::TestCase diff --git a/test/ruby_lsp_rails/hover_test.rb b/test/ruby_lsp_rails/hover_test.rb index 90861fec..97d06181 100644 --- a/test/ruby_lsp_rails/hover_test.rb +++ b/test/ruby_lsp_rails/hover_test.rb @@ -5,7 +5,7 @@ module RubyLsp module Rails - class HoverTest < ActiveSupport::TestCase + class HoverTest < Minitest::Test test "hook returns model column information" do expected_response = { schema_file: "#{dummy_root}/db/schema.rb", diff --git a/test/ruby_lsp_rails/indexing_enhancement_test.rb b/test/ruby_lsp_rails/indexing_enhancement_test.rb index b6c7b66b..76210054 100644 --- a/test/ruby_lsp_rails/indexing_enhancement_test.rb +++ b/test/ruby_lsp_rails/indexing_enhancement_test.rb @@ -5,7 +5,7 @@ module RubyLsp module Rails - class IndexingEnhancementTest < ActiveSupport::TestCase + class IndexingEnhancementTest < Minitest::Test class << self # For these tests, it's convenient to have the index fully populated with Rails information, but we don't have # to reindex on every single example or that will be too slow diff --git a/test/ruby_lsp_rails/launch_test.rb b/test/ruby_lsp_rails/launch_test.rb index 32b833ce..2b745b67 100644 --- a/test/ruby_lsp_rails/launch_test.rb +++ b/test/ruby_lsp_rails/launch_test.rb @@ -5,7 +5,7 @@ module RubyLsp module Rails - class LaunchTest < ActiveSupport::TestCase + class LaunchTest < Minitest::Test test "launching the client succeeds" do outgoing_queue = Thread::Queue.new diff --git a/test/ruby_lsp_rails/runner_client_test.rb b/test/ruby_lsp_rails/runner_client_test.rb index 20720593..5b69c8a3 100644 --- a/test/ruby_lsp_rails/runner_client_test.rb +++ b/test/ruby_lsp_rails/runner_client_test.rb @@ -6,13 +6,13 @@ module RubyLsp module Rails - class RunnerClientTest < ActiveSupport::TestCase - setup do + class RunnerClientTest < Minitest::Test + def setup @outgoing_queue = Thread::Queue.new @client = T.let(RunnerClient.new(@outgoing_queue), RunnerClient) end - teardown do + def teardown @client.shutdown # On Windows, the server process sometimes takes a lot longer to shutdown and may end up getting force killed, @@ -156,8 +156,10 @@ def execute(request, params) end end - class NullClientTest < ActiveSupport::TestCase - setup { @client = NullClient.new } + class NullClientTest < Minitest::Test + def setup + @client = NullClient.new + end test "#shutdown is a no-op" do assert_nothing_raised { @client.shutdown } diff --git a/test/ruby_lsp_rails/server_test.rb b/test/ruby_lsp_rails/server_test.rb index 55fbc7ab..fe24ca13 100644 --- a/test/ruby_lsp_rails/server_test.rb +++ b/test/ruby_lsp_rails/server_test.rb @@ -2,10 +2,18 @@ # frozen_string_literal: true require "test_helper" + +# Configure Rails Environment +ENV["RAILS_ENV"] = "test" + +require_relative "../dummy/config/environment" +ActiveRecord::Migrator.migrations_paths = [File.expand_path("../test/dummy/db/migrate", __dir__)] +ActiveRecord::Migrator.migrations_paths << File.expand_path("../db/migrate", __dir__) + require "ruby_lsp/ruby_lsp_rails/server" -class ServerTest < ActiveSupport::TestCase - setup do +class ServerTest < Minitest::Test + def setup @stdout = StringIO.new @server = RubyLsp::Rails::Server.new(stdout: @stdout, override_default_output_device: false) end diff --git a/test/ruby_lsp_rails/support/location_builder_test.rb b/test/ruby_lsp_rails/support/location_builder_test.rb index 4e3f3e25..838dc88a 100644 --- a/test/ruby_lsp_rails/support/location_builder_test.rb +++ b/test/ruby_lsp_rails/support/location_builder_test.rb @@ -6,7 +6,7 @@ module RubyLsp module Rails module Support - class LocationBuilderTest < ActiveSupport::TestCase + class LocationBuilderTest < Minitest::Test test "line_location_from_s raises argument error if invalid string given" do assert_raises(ArgumentError) { LocationBuilder.line_location_from_s("banana") } end diff --git a/test/ruby_lsp_rails_test.rb b/test/ruby_lsp_rails_test.rb index a056a71e..b6960c0c 100644 --- a/test/ruby_lsp_rails_test.rb +++ b/test/ruby_lsp_rails_test.rb @@ -4,7 +4,7 @@ require "test_helper" module RubyLsp - class RailsTest < ActiveSupport::TestCase + class RailsTest < Minitest::Test test "it has a version number" do assert RubyLsp::Rails::VERSION end diff --git a/test/test_helper.rb b/test/test_helper.rb index ca2195c5..ae981502 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,16 +1,10 @@ # typed: true # frozen_string_literal: true -# Configure Rails Environment -ENV["RAILS_ENV"] = "test" - -require_relative "../test/dummy/config/environment" -ActiveRecord::Migrator.migrations_paths = [File.expand_path("../test/dummy/db/migrate", __dir__)] -ActiveRecord::Migrator.migrations_paths << File.expand_path("../db/migrate", __dir__) -require "sorbet-runtime" -require "rails/test_help" -require "mocha/minitest" require "ruby_lsp/internal" +require "minitest/autorun" +require "test_declarative" +require "mocha/minitest" require "ruby_lsp/test_helper" require "ruby_lsp/ruby_lsp_rails/addon" @@ -26,8 +20,8 @@ # Tapioca (and thus Spoom) is not available on Windows end -module ActiveSupport - class TestCase +module Minitest + class Test extend T::Sig include RubyLsp::TestHelper @@ -63,5 +57,35 @@ def pop_message(outgoing_queue, &block) message = outgoing_queue.pop until block.call(message) message end + + # Copied from Rails + def assert_nothing_raised(*args) + msg = if Module === args.last + nil + else + args.pop + end + begin + line = __LINE__ + yield + rescue MiniTest::Skip + raise + rescue Exception => e # rubocop:disable Lint/RescueException + bt = e.backtrace + as = e.instance_of?(MiniTest::Assertion) + if as + ans = /\A#{Regexp.quote(__FILE__)}:#{line}:in / + bt.reject! { |ln| ans =~ ln } + end + if (args.empty? && !as) || + args.any? { |a| a.instance_of?(Module) ? e.is_a?(a) : e.class == a } + msg = message(msg) { "Exception raised:\n<#{mu_pp(e)}>" } + raise MiniTest::Assertion, msg.call, bt + else + raise + end + end + nil + end end end