henitai 0.1.8 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +86 -1
- data/README.md +18 -4
- data/lib/henitai/cli.rb +81 -3
- data/lib/henitai/configuration.rb +24 -11
- data/lib/henitai/coverage_bootstrapper.rb +24 -24
- data/lib/henitai/execution_engine.rb +3 -9
- data/lib/henitai/git_diff_analyzer.rb +34 -0
- data/lib/henitai/integration/rspec_process_runner.rb +66 -13
- data/lib/henitai/integration.rb +403 -38
- data/lib/henitai/mutant/activator.rb +14 -2
- data/lib/henitai/mutant.rb +13 -2
- data/lib/henitai/mutant_generator.rb +21 -2
- data/lib/henitai/mutant_history_store.rb +7 -22
- data/lib/henitai/mutant_identity.rb +34 -0
- data/lib/henitai/parallel_execution_runner.rb +29 -11
- data/lib/henitai/process_wakeup.rb +49 -0
- data/lib/henitai/process_worker_runner.rb +434 -0
- data/lib/henitai/reporter.rb +76 -3
- data/lib/henitai/result.rb +39 -8
- data/lib/henitai/runner.rb +203 -14
- data/lib/henitai/scenario_execution_result.rb +16 -3
- data/lib/henitai/static_filter.rb +10 -3
- data/lib/henitai/survivor_activation_cache.rb +81 -0
- data/lib/henitai/survivor_loader.rb +140 -0
- data/lib/henitai/survivor_selector.rb +36 -0
- data/lib/henitai/survivor_test_filter.rb +72 -0
- data/lib/henitai/version.rb +1 -1
- data/lib/henitai.rb +8 -0
- data/sig/henitai.rbs +205 -9
- metadata +23 -2
data/lib/henitai.rb
CHANGED
|
@@ -26,6 +26,7 @@ module Henitai
|
|
|
26
26
|
autoload :PerTestCoverageSelector, "henitai/per_test_coverage_selector"
|
|
27
27
|
autoload :Subject, "henitai/subject"
|
|
28
28
|
autoload :Mutant, "henitai/mutant"
|
|
29
|
+
autoload :MutantIdentity, "henitai/mutant_identity"
|
|
29
30
|
autoload :Operator, "henitai/operator"
|
|
30
31
|
autoload :Operators, "henitai/operators"
|
|
31
32
|
autoload :SourceParser, "henitai/source_parser"
|
|
@@ -39,6 +40,10 @@ module Henitai
|
|
|
39
40
|
autoload :EquivalenceDetector, "henitai/equivalence_detector"
|
|
40
41
|
autoload :StaticFilter, "henitai/static_filter"
|
|
41
42
|
autoload :StillbornFilter, "henitai/stillborn_filter"
|
|
43
|
+
autoload :SurvivorLoader, "henitai/survivor_loader"
|
|
44
|
+
autoload :SurvivorSelector, "henitai/survivor_selector"
|
|
45
|
+
autoload :SurvivorTestFilter, "henitai/survivor_test_filter"
|
|
46
|
+
autoload :SurvivorActivationCache, "henitai/survivor_activation_cache"
|
|
42
47
|
autoload :ScenarioExecutionResult, "henitai/scenario_execution_result"
|
|
43
48
|
autoload :CoverageFormatter, "henitai/coverage_formatter"
|
|
44
49
|
autoload :MinitestCoverageReporter, "henitai/minitest_coverage_reporter"
|
|
@@ -47,6 +52,9 @@ module Henitai
|
|
|
47
52
|
autoload :SamplingStrategy, "henitai/sampling_strategy"
|
|
48
53
|
autoload :TestPrioritizer, "henitai/test_prioritizer"
|
|
49
54
|
autoload :ExecutionEngine, "henitai/execution_engine"
|
|
55
|
+
autoload :ParallelExecutionRunner, "henitai/parallel_execution_runner"
|
|
56
|
+
autoload :ProcessWorkerRunner, "henitai/process_worker_runner"
|
|
57
|
+
autoload :ProcessWakeup, "henitai/process_wakeup"
|
|
50
58
|
autoload :Runner, "henitai/runner"
|
|
51
59
|
autoload :Reporter, "henitai/reporter"
|
|
52
60
|
autoload :Integration, "henitai/integration"
|
data/sig/henitai.rbs
CHANGED
|
@@ -73,6 +73,38 @@ module Henitai
|
|
|
73
73
|
module Operators
|
|
74
74
|
end
|
|
75
75
|
|
|
76
|
+
module Integration::ChildDebugSupport
|
|
77
|
+
private
|
|
78
|
+
|
|
79
|
+
def run_rspec_runner: (Array[String]) -> untyped
|
|
80
|
+
def build_rspec_runner: () -> untyped
|
|
81
|
+
def configure_rspec_runner: (untyped) -> void
|
|
82
|
+
def load_rspec_spec_files: (Array[String]) -> void
|
|
83
|
+
def run_rspec_specs: (untyped) -> untyped
|
|
84
|
+
def debug_child_timeout_dump: (Integer) -> void
|
|
85
|
+
def install_debug_timeout_trap: () -> void
|
|
86
|
+
def debug_child_thread_dump: (String) -> void
|
|
87
|
+
def debug_child_puts: (String) -> void
|
|
88
|
+
def debug_child?: () -> bool
|
|
89
|
+
def debug_child_rspec_trace: (
|
|
90
|
+
test_files: Array[String],
|
|
91
|
+
rspec_options: Array[String],
|
|
92
|
+
rspec_argv: Array[String]
|
|
93
|
+
) -> void
|
|
94
|
+
def debug_child_rspec_exit: (untyped) -> void
|
|
95
|
+
def debug_child_example_count: (String) -> void
|
|
96
|
+
def debug_child_activation_start: (String) -> void
|
|
97
|
+
def debug_child_activation_end: (untyped, test_files: Array[String]) -> void
|
|
98
|
+
def debug_child_mutant_meta: (Mutant) -> void
|
|
99
|
+
def debug_child_activation_check: () -> void
|
|
100
|
+
def suppress_simplecov!: () -> void
|
|
101
|
+
def suppress_coverage!: () -> void
|
|
102
|
+
def loaded_feature_map: (Array[String]) -> Array[[String, bool]]
|
|
103
|
+
def loaded_feature?: (String) -> bool
|
|
104
|
+
def rspec_world_example_count: () -> Integer?
|
|
105
|
+
def pause: (Float) -> void
|
|
106
|
+
end
|
|
107
|
+
|
|
76
108
|
class Configuration
|
|
77
109
|
DEFAULT_TIMEOUT: Float
|
|
78
110
|
DEFAULT_OPERATORS: Symbol
|
|
@@ -106,11 +138,14 @@ module Henitai
|
|
|
106
138
|
private
|
|
107
139
|
|
|
108
140
|
def load_raw_configuration: (String) -> Hash[Symbol, untyped]
|
|
141
|
+
def detect_integration: () -> String
|
|
109
142
|
def apply_defaults: (Hash[Symbol, untyped]) -> void
|
|
110
143
|
def apply_general_defaults: (Hash[Symbol, untyped]) -> void
|
|
111
144
|
def apply_mutation_defaults: (Hash[Symbol, untyped]) -> void
|
|
112
145
|
def apply_analysis_defaults: (Hash[Symbol, untyped]) -> void
|
|
113
146
|
def merge_defaults: (Hash[Symbol, untyped], Hash[Symbol, untyped]?) -> Hash[Symbol, untyped]
|
|
147
|
+
def resolve_integration_default: (untyped) -> untyped
|
|
148
|
+
def default_dashboard: (Hash[Symbol, untyped]?) -> Hash[Symbol, untyped]
|
|
114
149
|
def symbolize_keys: (untyped) -> untyped
|
|
115
150
|
end
|
|
116
151
|
|
|
@@ -171,8 +206,11 @@ module Henitai
|
|
|
171
206
|
attr_accessor duration: Float?
|
|
172
207
|
attr_accessor covered_by: Array[String]?
|
|
173
208
|
attr_accessor tests_completed: Integer?
|
|
209
|
+
attr_reader precomputed_stable_id: String?
|
|
210
|
+
attr_reader precomputed_activation_source: String?
|
|
174
211
|
|
|
175
|
-
def initialize: (subject: Subject, operator: String, nodes: Hash[Symbol, untyped], description: String, location: Hash[Symbol, untyped]) -> void
|
|
212
|
+
def initialize: (subject: Subject, operator: String, nodes: Hash[Symbol, untyped], description: String, location: Hash[Symbol, untyped], ?precomputed_stable_id: String?, ?precomputed_activation_source: String?) -> void
|
|
213
|
+
def stable_id: () -> String
|
|
176
214
|
def killed?: () -> bool
|
|
177
215
|
def survived?: () -> bool
|
|
178
216
|
def pending?: () -> bool
|
|
@@ -256,9 +294,12 @@ module Henitai
|
|
|
256
294
|
def self.for: (String) -> untyped
|
|
257
295
|
|
|
258
296
|
class Base
|
|
297
|
+
include ChildDebugSupport
|
|
298
|
+
|
|
259
299
|
def select_tests: (Subject) -> Array[String]
|
|
260
300
|
def test_files: () -> Array[String]
|
|
261
301
|
def run_mutant: (mutant: Mutant, test_files: Array[String], timeout: Float) -> ScenarioExecutionResult
|
|
302
|
+
def spawn_mutant: (mutant: Mutant, test_files: Array[String]) -> ChildHandle
|
|
262
303
|
def run_suite: (Array[String], ?timeout: Float) -> ScenarioExecutionResult
|
|
263
304
|
def per_test_coverage_supported?: () -> bool
|
|
264
305
|
def wait_with_timeout: (Integer, Float) -> untyped
|
|
@@ -268,9 +309,26 @@ module Henitai
|
|
|
268
309
|
private
|
|
269
310
|
|
|
270
311
|
def pause: (Float) -> void
|
|
312
|
+
def wait_nonblocking: (Integer) -> untyped
|
|
271
313
|
def handle_timeout: (Integer) -> Symbol
|
|
272
314
|
def cleanup_child_process: (Integer) -> void
|
|
273
|
-
def
|
|
315
|
+
def suppress_simplecov!: () -> void
|
|
316
|
+
def suppress_coverage!: () -> void
|
|
317
|
+
def run_tests: (Array[String]) -> Integer
|
|
318
|
+
def debug_child?: () -> bool
|
|
319
|
+
def debug_child_puts: (String) -> void
|
|
320
|
+
def debug_child_rspec_trace: (test_files: Array[String], rspec_options: Array[String], rspec_argv: Array[String]) -> void
|
|
321
|
+
def debug_child_rspec_exit: (untyped status) -> void
|
|
322
|
+
def debug_child_activation_start: (String mutant_id) -> void
|
|
323
|
+
def debug_child_activation_end: (untyped activation_result, test_files: Array[String]) -> void
|
|
324
|
+
def debug_child_mutant_meta: (Mutant) -> void
|
|
325
|
+
def debug_child_activation_check: () -> void
|
|
326
|
+
def debug_child_example_count: (String) -> void
|
|
327
|
+
def loaded_feature_map: (Array[String]) -> Array[[String, bool]]
|
|
328
|
+
def loaded_feature?: (String) -> bool
|
|
329
|
+
def rspec_world_example_count: () -> Integer?
|
|
330
|
+
def run_child_activation_and_tests: (mutant: Mutant, test_files: Array[String], log_paths: Hash[Symbol, String]) -> Integer
|
|
331
|
+
def with_non_interactive_stdin: () { () -> untyped } -> untyped
|
|
274
332
|
def subprocess_env: () -> Hash[String, String]
|
|
275
333
|
def scenario_log_support: () -> ScenarioLogSupport
|
|
276
334
|
def with_subprocess_env: () { () -> untyped } -> untyped
|
|
@@ -300,9 +358,25 @@ module Henitai
|
|
|
300
358
|
def stderr_stream: () -> IO
|
|
301
359
|
end
|
|
302
360
|
|
|
361
|
+
module SchedulerDiagnostics
|
|
362
|
+
def self.enabled?: () -> bool
|
|
363
|
+
def self.child_started: (Integer?) -> void
|
|
364
|
+
def self.child_ended: (Integer?) -> void
|
|
365
|
+
def self.summary: () -> Hash[Symbol, untyped]
|
|
366
|
+
def self.reset!: () -> void
|
|
367
|
+
end
|
|
368
|
+
|
|
369
|
+
class ChildHandle
|
|
370
|
+
attr_accessor pid: Integer?
|
|
371
|
+
attr_accessor log_paths: Hash[Symbol, String]
|
|
372
|
+
|
|
373
|
+
def initialize: (pid: Integer?, log_paths: Hash[Symbol, String]) -> void
|
|
374
|
+
end
|
|
375
|
+
|
|
303
376
|
class RspecProcessRunner
|
|
304
377
|
def run_mutant: (Rspec, mutant: Mutant, test_files: Array[String], timeout: Float) -> ScenarioExecutionResult
|
|
305
378
|
def run_suite: (Rspec, Array[String], timeout: Float) -> ScenarioExecutionResult
|
|
379
|
+
def spawn_mutant: (Rspec, mutant: Mutant, test_files: Array[String], log_paths: Hash[Symbol, String]) -> ChildHandle
|
|
306
380
|
end
|
|
307
381
|
|
|
308
382
|
class Rspec < Base
|
|
@@ -312,13 +386,21 @@ module Henitai
|
|
|
312
386
|
def select_tests: (Subject) -> Array[String]
|
|
313
387
|
def test_files: () -> Array[String]
|
|
314
388
|
def run_mutant: (mutant: Mutant, test_files: Array[String], timeout: Float) -> ScenarioExecutionResult
|
|
389
|
+
def spawn_mutant: (mutant: Mutant, test_files: Array[String]) -> ChildHandle
|
|
315
390
|
def run_suite: (Array[String], ?timeout: Float) -> ScenarioExecutionResult
|
|
316
391
|
def per_test_coverage_supported?: () -> bool
|
|
317
392
|
|
|
318
393
|
private
|
|
319
394
|
|
|
395
|
+
def mutant_log_name: (Mutant) -> String
|
|
320
396
|
def run_in_child: (mutant: Mutant, test_files: Array[String], log_paths: Hash[Symbol, String]) -> Integer
|
|
397
|
+
def suppress_simplecov!: () -> void
|
|
398
|
+
def suppress_coverage!: () -> void
|
|
399
|
+
def install_debug_timeout_trap: () -> void
|
|
400
|
+
def debug_child_thread_dump: (String) -> void
|
|
401
|
+
def debug_child_example_count: (String) -> void
|
|
321
402
|
def suite_command: (Array[String]) -> Array[String]
|
|
403
|
+
def rspec_suite_runner_script: () -> String
|
|
322
404
|
def build_result: (untyped, Hash[Symbol, String]) -> ScenarioExecutionResult
|
|
323
405
|
def scenario_status: (untyped) -> Symbol
|
|
324
406
|
def exit_status_for: (untyped) -> Integer?
|
|
@@ -339,13 +421,29 @@ module Henitai
|
|
|
339
421
|
def requires_source_file_transitively?: (String, String, ?Array[String]) -> bool
|
|
340
422
|
def required_files: (String) -> Array[String]
|
|
341
423
|
def resolve_required_file: (String, String, String) -> String?
|
|
424
|
+
def loaded_feature_map: (Array[String]) -> Array[[String, bool]]
|
|
425
|
+
def loaded_feature?: (String) -> bool
|
|
342
426
|
def relative_candidates: (String, String) -> Array[String]
|
|
343
427
|
def require_candidates: (String, String) -> Array[String]
|
|
344
428
|
def expand_candidates: (String, String) -> Array[String]
|
|
345
429
|
end
|
|
346
430
|
|
|
431
|
+
module CoverageRuntimeSuppressors
|
|
432
|
+
def self.suppress_simplecov!: () -> void
|
|
433
|
+
def self.suppress_coverage!: () -> void
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
module SimpleCovStartSuppressor
|
|
437
|
+
def start: (*untyped) -> nil
|
|
438
|
+
end
|
|
439
|
+
|
|
440
|
+
module CoverageStartSuppressor
|
|
441
|
+
def start: (*untyped) -> nil
|
|
442
|
+
end
|
|
443
|
+
|
|
347
444
|
class Minitest < Rspec
|
|
348
445
|
def run_mutant: (mutant: Mutant, test_files: Array[String], timeout: Float) -> ScenarioExecutionResult
|
|
446
|
+
def spawn_mutant: (mutant: Mutant, test_files: Array[String]) -> ChildHandle
|
|
349
447
|
def run_suite: (Array[String], ?timeout: Float) -> ScenarioExecutionResult
|
|
350
448
|
|
|
351
449
|
private
|
|
@@ -354,6 +452,8 @@ module Henitai
|
|
|
354
452
|
def run_tests: (Array[String]) -> Integer
|
|
355
453
|
def preload_environment: () -> void
|
|
356
454
|
def setup_load_path: () -> void
|
|
455
|
+
def suppress_minitest_autorun!: () -> nil
|
|
456
|
+
def suppress_simplecov!: () -> void
|
|
357
457
|
def subprocess_env: () -> Hash[String, String]
|
|
358
458
|
def cleanup_suite_process: (Integer?, untyped) -> void
|
|
359
459
|
def spec_files: () -> Array[String]
|
|
@@ -367,15 +467,21 @@ module Henitai
|
|
|
367
467
|
|
|
368
468
|
class GitDiffAnalyzer
|
|
369
469
|
def changed_files: (from: String, to: String, ?dir: String) -> Array[String]
|
|
470
|
+
def working_tree_changed_files: (?dir: String) -> Array[String]
|
|
471
|
+
def head_sha: (?dir: String) -> String?
|
|
370
472
|
end
|
|
371
473
|
|
|
372
474
|
class MutantGenerator
|
|
373
475
|
def generate: (Array[Subject], Array[untyped], ?config: untyped) -> Array[Mutant]
|
|
374
476
|
end
|
|
375
477
|
|
|
478
|
+
module MutantIdentity
|
|
479
|
+
def self.stable_id: (Mutant) -> String
|
|
480
|
+
end
|
|
481
|
+
|
|
376
482
|
class MutantHistoryStore
|
|
377
483
|
def initialize: (path: String) -> void
|
|
378
|
-
def record: (
|
|
484
|
+
def record: (untyped, version: String, ?recorded_at: Time) -> void
|
|
379
485
|
def trend_report: () -> Hash[Symbol, untyped]
|
|
380
486
|
end
|
|
381
487
|
|
|
@@ -415,6 +521,16 @@ module Henitai
|
|
|
415
521
|
def run: (Array[Mutant], untyped, untyped, untyped, ?Hash[Symbol, untyped]) -> void
|
|
416
522
|
end
|
|
417
523
|
|
|
524
|
+
class ProcessWorkerRunner
|
|
525
|
+
SCHEDULER_POLL_INTERVAL: Float
|
|
526
|
+
PROCESS_DRAIN_WINDOW: Float
|
|
527
|
+
|
|
528
|
+
Slot: untyped
|
|
529
|
+
|
|
530
|
+
def initialize: (worker_count: Integer) -> void
|
|
531
|
+
def run: (Array[Mutant], untyped, untyped, untyped?, ?Hash[Symbol, untyped]) -> Array[ScenarioExecutionResult]
|
|
532
|
+
end
|
|
533
|
+
|
|
418
534
|
class StaticFilter
|
|
419
535
|
def initialize: (?coverage_report_reader: CoverageReportReader) -> void
|
|
420
536
|
def apply: (Array[Mutant], untyped) -> Array[Mutant]
|
|
@@ -436,9 +552,7 @@ module Henitai
|
|
|
436
552
|
def parallel_execution?: (untyped, Array[Mutant]) -> bool
|
|
437
553
|
def worker_count: (untyped) -> Integer
|
|
438
554
|
def run_linear: (Array[Mutant], untyped, untyped, untyped?, untyped) -> void
|
|
439
|
-
def run_parallel: (Array[Mutant], untyped, untyped, untyped
|
|
440
|
-
def pipe_stdin?: () -> bool
|
|
441
|
-
def start_stdin_watcher: () { () -> void } -> Thread
|
|
555
|
+
def run_parallel: (Array[Mutant], untyped, untyped, untyped?) -> void
|
|
442
556
|
def process_mutant: (Mutant, untyped, untyped, untyped?, ?untyped) -> void
|
|
443
557
|
def prioritized_tests_for: (Mutant, untyped, untyped) -> Array[String]
|
|
444
558
|
def test_prioritizer: () -> TestPrioritizer
|
|
@@ -452,6 +566,7 @@ module Henitai
|
|
|
452
566
|
SERIALIZER_METHODS: Hash[Symbol, Symbol]
|
|
453
567
|
|
|
454
568
|
def self.activate!: (untyped) -> Symbol?
|
|
569
|
+
def self.activation_source_for: (Mutant) -> String?
|
|
455
570
|
def initialize: () -> void
|
|
456
571
|
def activate!: (untyped) -> Symbol?
|
|
457
572
|
|
|
@@ -507,7 +622,10 @@ module Henitai
|
|
|
507
622
|
private
|
|
508
623
|
|
|
509
624
|
def report_lines: (Result) -> Array[String]
|
|
510
|
-
def summary_lines: (
|
|
625
|
+
def summary_lines: (untyped) -> Array[String]
|
|
626
|
+
def full_summary_lines: (untyped) -> Array[String]
|
|
627
|
+
def partial_summary_lines: (untyped) -> Array[String]
|
|
628
|
+
def append_survivor_stats: (Array[String], untyped) -> void
|
|
511
629
|
def survived_detail_lines: (Result) -> Array[String]
|
|
512
630
|
def survived_mutant_lines: (Mutant) -> Array[String]
|
|
513
631
|
def survived_mutant_header: (Mutant) -> String
|
|
@@ -531,6 +649,13 @@ module Henitai
|
|
|
531
649
|
|
|
532
650
|
private
|
|
533
651
|
|
|
652
|
+
def write_canonical: (Hash[Symbol, untyped]) -> void
|
|
653
|
+
def write_session_snapshot: (Hash[Symbol, untyped]) -> void
|
|
654
|
+
def write_activation_recipes: (untyped) -> void
|
|
655
|
+
def survived_mutants_for: (untyped) -> Array[Mutant]
|
|
656
|
+
def session_snapshot_path: (String) -> String
|
|
657
|
+
def session_recipe_path: (String) -> String
|
|
658
|
+
def canonical_path: () -> String
|
|
534
659
|
def report_path: () -> String
|
|
535
660
|
def write_history_report: () -> void
|
|
536
661
|
def history_store_path: () -> String
|
|
@@ -590,8 +715,12 @@ module Henitai
|
|
|
590
715
|
attr_reader started_at: Time
|
|
591
716
|
attr_reader finished_at: Time
|
|
592
717
|
attr_reader thresholds: Hash[Symbol, Integer]
|
|
718
|
+
attr_reader survivor_stats: Hash[Symbol, untyped]?
|
|
719
|
+
attr_reader session_id: String
|
|
720
|
+
attr_reader git_sha: String?
|
|
593
721
|
|
|
594
|
-
def initialize: (mutants: Array[Mutant], started_at: Time, finished_at: Time, ?thresholds: Hash[Symbol, Integer]?) -> void
|
|
722
|
+
def initialize: (mutants: Array[Mutant], started_at: Time, finished_at: Time, ?thresholds: Hash[Symbol, Integer]?, ?partial_rerun: bool, ?survivor_stats: Hash[Symbol, untyped]?, ?session_id: String, ?git_sha: String?) -> void
|
|
723
|
+
def partial_rerun?: () -> bool
|
|
595
724
|
def killed: () -> Integer
|
|
596
725
|
def survived: () -> Integer
|
|
597
726
|
def equivalent: () -> Integer
|
|
@@ -604,6 +733,8 @@ module Henitai
|
|
|
604
733
|
|
|
605
734
|
private
|
|
606
735
|
|
|
736
|
+
def base_schema: () -> Hash[Symbol, untyped]
|
|
737
|
+
def unmatched_survivor_ids: () -> Array[String]
|
|
607
738
|
def build_files_section: () -> Hash[Symbol, untyped]
|
|
608
739
|
def mutant_to_schema: (Mutant) -> Hash[Symbol, untyped]
|
|
609
740
|
def coverage_schema: (Mutant) -> Hash[Symbol, untyped]
|
|
@@ -615,11 +746,56 @@ module Henitai
|
|
|
615
746
|
def stryker_status: (Symbol) -> String
|
|
616
747
|
end
|
|
617
748
|
|
|
749
|
+
class SurvivorLoader
|
|
750
|
+
FileNotFoundError: singleton(StandardError)
|
|
751
|
+
InvalidReportError: singleton(StandardError)
|
|
752
|
+
ScopeMismatchError: singleton(StandardError)
|
|
753
|
+
|
|
754
|
+
class Report
|
|
755
|
+
attr_reader survivor_ids: Array[String]
|
|
756
|
+
attr_reader coverage_map: Hash[String, Array[String]]
|
|
757
|
+
attr_reader git_sha: String?
|
|
758
|
+
|
|
759
|
+
def initialize: (survivor_ids: Array[String], coverage_map: Hash[String, Array[String]], git_sha: String?) -> void
|
|
760
|
+
end
|
|
761
|
+
|
|
762
|
+
def initialize: (String, ?include_paths: Array[String]) -> void
|
|
763
|
+
def load: () -> Report
|
|
764
|
+
end
|
|
765
|
+
|
|
766
|
+
class SurvivorTestFilter
|
|
767
|
+
def initialize: (
|
|
768
|
+
coverage_map: Hash[String, Array[String]],
|
|
769
|
+
git_sha: String?,
|
|
770
|
+
?dirty_source_files: bool,
|
|
771
|
+
?worktree_changed_files: Array[String],
|
|
772
|
+
?diff_analyzer: GitDiffAnalyzer
|
|
773
|
+
) -> void
|
|
774
|
+
def apply: (Array[Mutant]) -> Hash[Symbol, Array[Mutant]]
|
|
775
|
+
end
|
|
776
|
+
|
|
777
|
+
class SurvivorSelector
|
|
778
|
+
DRIFT_THRESHOLD: Float
|
|
779
|
+
|
|
780
|
+
def initialize: (survivor_ids: Array[String]) -> void
|
|
781
|
+
def select: (Array[Mutant]) -> Array[Mutant]
|
|
782
|
+
def unmatched_ids: () -> Array[String]
|
|
783
|
+
def drift_warning?: () -> bool
|
|
784
|
+
end
|
|
785
|
+
|
|
786
|
+
class SurvivorActivationCache
|
|
787
|
+
FILENAME: String
|
|
788
|
+
|
|
789
|
+
def self.compute: (Array[Mutant]) -> Hash[String, Hash[String, untyped]]
|
|
790
|
+
def self.load: (String) -> Hash[String, Hash[String, untyped]]?
|
|
791
|
+
def self.write: (String, Hash[String, Hash[String, untyped]]) -> void
|
|
792
|
+
end
|
|
793
|
+
|
|
618
794
|
class Runner
|
|
619
795
|
attr_reader config: Configuration
|
|
620
796
|
attr_reader result: untyped
|
|
621
797
|
|
|
622
|
-
def initialize: (?config: Configuration, ?subjects: Array[Subject], ?since: String) -> void
|
|
798
|
+
def initialize: (?config: Configuration, ?subjects: Array[Subject], ?since: String, ?survivors_from: String?) -> void
|
|
623
799
|
def run: () -> Result
|
|
624
800
|
def resolve_subjects: (?Array[String]) -> untyped
|
|
625
801
|
def generate_mutants: (untyped) -> untyped
|
|
@@ -651,6 +827,26 @@ module Henitai
|
|
|
651
827
|
def mutants_for: (Array[Subject], Array[String]) -> Array[Mutant]
|
|
652
828
|
def with_reports_dir: () { () -> untyped } -> untyped
|
|
653
829
|
def result_thresholds: () -> Hash[Symbol, Integer]?
|
|
830
|
+
def survivor_rerun?: () -> bool
|
|
831
|
+
def apply_survivor_selection: (Array[Mutant]) -> Array[Mutant]
|
|
832
|
+
def try_recipe_run: () -> Array[Mutant]?
|
|
833
|
+
def load_survivor_report: () -> SurvivorLoader::Report
|
|
834
|
+
def run_from_recipes: (SurvivorLoader::Report, Array[String]?) -> Array[Mutant]?
|
|
835
|
+
def recipe_fast_path_safe?: (SurvivorLoader::Report, Array[String]?) -> bool
|
|
836
|
+
def recipe_selector_and_stubs: (Array[String], Hash[String, Hash[String, untyped]]) -> [SurvivorSelector, Array[Mutant]]
|
|
837
|
+
def load_activation_recipes: (Array[String]) -> Hash[String, Hash[String, untyped]]?
|
|
838
|
+
def build_stub_mutant: (String, Hash[String, untyped]) -> Mutant
|
|
839
|
+
def stub_subject_from_recipe: (Hash[String, untyped]) -> Subject
|
|
840
|
+
def recipe_location: (Hash[String, untyped]?) -> Hash[Symbol, untyped]
|
|
841
|
+
def finalize_survivor_split: (SurvivorSelector, Array[Mutant], Hash[Symbol, Array[Mutant]]) -> Array[Mutant]
|
|
842
|
+
def dirty_worktree_changed_files: () -> Array[String]?
|
|
843
|
+
def dirty_source_files?: (Array[String]?, ?git_sha: String?) -> bool
|
|
844
|
+
def committed_changed_files: (String?) -> Array[String]
|
|
845
|
+
def in_include_root?: (String, Array[String]) -> bool
|
|
846
|
+
def warn_survivor_drift: (SurvivorSelector) -> void
|
|
847
|
+
def build_survivor_stats: (SurvivorSelector, Array[Mutant], Hash[Symbol, Array[Mutant]]) -> Hash[Symbol, untyped]
|
|
848
|
+
def test_filter: (SurvivorLoader::Report, ?dirty_source_files: bool) -> SurvivorTestFilter
|
|
849
|
+
def safe_head_sha: () -> String?
|
|
654
850
|
end
|
|
655
851
|
|
|
656
852
|
class CoverageBootstrapper
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: henitai
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Martin Otten
|
|
@@ -9,6 +9,20 @@ bindir: exe
|
|
|
9
9
|
cert_chain: []
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: minitest
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - "~>"
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '5.25'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - "~>"
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '5.25'
|
|
12
26
|
- !ruby/object:Gem::Dependency
|
|
13
27
|
name: prism
|
|
14
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -108,6 +122,7 @@ files:
|
|
|
108
122
|
- lib/henitai/mutant/activator.rb
|
|
109
123
|
- lib/henitai/mutant_generator.rb
|
|
110
124
|
- lib/henitai/mutant_history_store.rb
|
|
125
|
+
- lib/henitai/mutant_identity.rb
|
|
111
126
|
- lib/henitai/operator.rb
|
|
112
127
|
- lib/henitai/operators.rb
|
|
113
128
|
- lib/henitai/operators/arithmetic_operator.rb
|
|
@@ -133,6 +148,8 @@ files:
|
|
|
133
148
|
- lib/henitai/parser_current.rb
|
|
134
149
|
- lib/henitai/per_test_coverage_collector.rb
|
|
135
150
|
- lib/henitai/per_test_coverage_selector.rb
|
|
151
|
+
- lib/henitai/process_wakeup.rb
|
|
152
|
+
- lib/henitai/process_worker_runner.rb
|
|
136
153
|
- lib/henitai/reporter.rb
|
|
137
154
|
- lib/henitai/result.rb
|
|
138
155
|
- lib/henitai/rspec_coverage_formatter.rb
|
|
@@ -144,6 +161,10 @@ files:
|
|
|
144
161
|
- lib/henitai/stillborn_filter.rb
|
|
145
162
|
- lib/henitai/subject.rb
|
|
146
163
|
- lib/henitai/subject_resolver.rb
|
|
164
|
+
- lib/henitai/survivor_activation_cache.rb
|
|
165
|
+
- lib/henitai/survivor_loader.rb
|
|
166
|
+
- lib/henitai/survivor_selector.rb
|
|
167
|
+
- lib/henitai/survivor_test_filter.rb
|
|
147
168
|
- lib/henitai/syntax_validator.rb
|
|
148
169
|
- lib/henitai/test_prioritizer.rb
|
|
149
170
|
- lib/henitai/unparse_helper.rb
|
|
@@ -160,7 +181,7 @@ metadata:
|
|
|
160
181
|
changelog_uri: https://github.com/martinotten/henitai/blob/main/CHANGELOG.md
|
|
161
182
|
documentation_uri: https://github.com/martinotten/henitai/blob/main/README.md
|
|
162
183
|
homepage_uri: https://github.com/martinotten/henitai
|
|
163
|
-
source_code_uri: https://github.com/martinotten/henitai/tree/v0.1.
|
|
184
|
+
source_code_uri: https://github.com/martinotten/henitai/tree/v0.1.10
|
|
164
185
|
rubygems_mfa_required: 'true'
|
|
165
186
|
rdoc_options: []
|
|
166
187
|
require_paths:
|