Class: Henitai::Reporter::Json

Inherits:
Base
  • Object
show all
Defined in:
lib/henitai/reporter.rb,
sig/henitai.rbs

Overview

JSON reporter.

Instance Attribute Summary

Attributes inherited from Base

#config, #history_store

Instance Method Summary collapse

Methods inherited from Base

#authoritative?, #canonical_path, #initialize

Constructor Details

This class inherits a constructor from Henitai::Reporter::Base

Instance Method Details

#default_history_storeMutantHistoryStore

Returns:



390
391
392
393
394
# File 'lib/henitai/reporter.rb', line 390

def default_history_store
  MutantHistoryStore.new(
    path: File.join(config.reports_dir, Henitai::HISTORY_STORE_FILENAME)
  )
end

#history_report_pathString

Returns:

  • (String)


396
397
398
# File 'lib/henitai/reporter.rb', line 396

def history_report_path
  File.join(config.reports_dir, "mutation-history.json")
end

#report(result) ⇒ void

This method returns an undefined value.

Parameters:



332
333
334
335
336
337
338
# File 'lib/henitai/reporter.rb', line 332

def report(result)
  schema = result.to_stryker_schema
  write_canonical(schema, authoritative: authoritative?(result))
  write_session_snapshot(schema)
  write_activation_recipes(result)
  write_history_report
end

#session_recipe_path(session_id) ⇒ String

Parameters:

  • (String)

Returns:

  • (String)


378
379
380
# File 'lib/henitai/reporter.rb', line 378

def session_recipe_path(session_id)
  File.join(config.reports_dir, "sessions", session_id, SurvivorActivationCache::FILENAME)
end

#session_snapshot_path(session_id) ⇒ String

Parameters:

  • (String)

Returns:

  • (String)


374
375
376
# File 'lib/henitai/reporter.rb', line 374

def session_snapshot_path(session_id)
  File.join(config.reports_dir, "sessions", session_id, "mutation-report.json")
end

#survived_mutants_for(result) ⇒ Array[Mutant]

Parameters:

  • (Object)

Returns:



368
369
370
371
372
# File 'lib/henitai/reporter.rb', line 368

def survived_mutants_for(result)
  return [] unless result.respond_to?(:mutants)

  result.mutants.select(&:survived?)
end

#write_activation_recipes(result) ⇒ void

This method returns an undefined value.

Parameters:

  • (Object)


355
356
357
358
359
360
361
362
363
364
365
366
# File 'lib/henitai/reporter.rb', line 355

def write_activation_recipes(result)
  session_id = result.session_id if result.respond_to?(:session_id)
  return unless session_id

  survived = survived_mutants_for(result)
  return if survived.empty?

  recipes = SurvivorActivationCache.compute(survived)
  return if recipes.empty?

  SurvivorActivationCache.write(session_recipe_path(session_id), recipes)
end

#write_canonical(schema, authoritative:) ⇒ void

This method returns an undefined value.

Parameters:

  • (Hash[Symbol, untyped])
  • authoritative: (Boolean)


342
343
344
# File 'lib/henitai/reporter.rb', line 342

def write_canonical(schema, authoritative:)
  CanonicalReportWriter.write(schema, path: canonical_path, authoritative:)
end

#write_history_reportvoid

This method returns an undefined value.



382
383
384
385
386
387
388
# File 'lib/henitai/reporter.rb', line 382

def write_history_report
  store = history_store || default_history_store
  return unless File.exist?(store.path)

  FileUtils.mkdir_p(File.dirname(history_report_path))
  File.write(history_report_path, JSON.pretty_generate(store.trend_report))
end

#write_session_snapshot(schema) ⇒ void

This method returns an undefined value.

Parameters:

  • (Hash[Symbol, untyped])


346
347
348
349
350
351
352
353
# File 'lib/henitai/reporter.rb', line 346

def write_session_snapshot(schema)
  session_id = schema[:sessionId]
  return unless session_id

  path = session_snapshot_path(session_id)
  FileUtils.mkdir_p(File.dirname(path))
  File.write(path, JSON.pretty_generate(schema))
end