Class: Megatest::Registry
- Inherits:
-
Object
- Object
- Megatest::Registry
- Defined in:
- lib/megatest/state.rb
Instance Method Summary collapse
- #ancestors(klass) ⇒ Object
- #each_subclass_of(klass, &block) ⇒ Object
-
#initialize ⇒ Registry
constructor
A new instance of Registry.
- #register_suite(test_suite, location) ⇒ Object
- #register_test_case(test_case) ⇒ Object
- #remove_test_case(test_case) ⇒ Object
- #shared_suite(test_suite) ⇒ Object
- #suite(klass) ⇒ Object
- #test_cases ⇒ Object
- #test_cases_by_path(path = nil) ⇒ Object
- #test_suites ⇒ Object
Constructor Details
#initialize ⇒ Registry
Returns a new instance of Registry.
419 420 421 422 423 |
# File 'lib/megatest/state.rb', line 419 def initialize @test_suites = {} @shared_suites = {} @test_cases_by_location = {} end |
Instance Method Details
#ancestors(klass) ⇒ Object
433 434 435 436 437 438 439 440 441 442 |
# File 'lib/megatest/state.rb', line 433 def ancestors(klass) suites = [] klass.ancestors.each do |mod| suite = @shared_suites[mod] || @test_suites[mod] suites << suite if suite break if mod == ::Megatest::Test end suites end |
#each_subclass_of(klass, &block) ⇒ Object
449 450 451 |
# File 'lib/megatest/state.rb', line 449 def each_subclass_of(klass, &block) klass.subclasses.each(&block) end |
#register_suite(test_suite, location) ⇒ Object
445 446 447 |
# File 'lib/megatest/state.rb', line 445 def register_suite(test_suite, location) @test_suites[test_suite] ||= State::TestSuite.new(self, test_suite, location) end |
#register_test_case(test_case) ⇒ Object
468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 |
# File 'lib/megatest/state.rb', line 468 def register_test_case(test_case) path_index = @test_cases_by_location[test_case.source_file] ||= {} line_tests = path_index[test_case.source_line] ||= [] unless line_tests.empty? test_case.index = line_tests.size if line_tests.size == 1 line_tests.first.index = 0 end end line_tests << test_case each_subclass_of(test_case.klass) do |subclass| suite(subclass).inherit_test_case(test_case) end end |
#remove_test_case(test_case) ⇒ Object
486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 |
# File 'lib/megatest/state.rb', line 486 def remove_test_case(test_case) path_index = @test_cases_by_location[test_case.source_file] line_tests = path_index[test_case.source_line] remove_index = line_tests.index(test_case) line_tests.delete_at(remove_index) case line_tests.size when 0 # noop when 1 line_tests[0].index = nil else remove_index.upto(line_tests.size - 1) do |index| line_tests[index].index -= 1 end end test_cases end |
#shared_suite(test_suite) ⇒ Object
425 426 427 |
# File 'lib/megatest/state.rb', line 425 def shared_suite(test_suite) @shared_suites[test_suite] ||= State::SharedSuite.new(self, test_suite) end |
#suite(klass) ⇒ Object
429 430 431 |
# File 'lib/megatest/state.rb', line 429 def suite(klass) @shared_suites[klass] || @test_suites.fetch(klass) end |
#test_cases ⇒ Object
508 509 510 511 512 |
# File 'lib/megatest/state.rb', line 508 def test_cases @test_suites.flat_map do |_klass, suite| suite.test_cases end end |
#test_cases_by_path(path = nil) ⇒ Object
514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 |
# File 'lib/megatest/state.rb', line 514 def test_cases_by_path(path = nil) if path if index = @test_cases_by_location[path] index.values.flatten else [] end else @test_cases_by_location.transform_values do |line_index| line_index.flat_map do |_line, test_cases| test_cases end end end end |
#test_suites ⇒ Object
504 505 506 |
# File 'lib/megatest/state.rb', line 504 def test_suites @test_suites.values end |