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:



400
401
402
403
404
# File 'lib/henitai/reporter.rb', line 400

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

#history_report_pathString

Returns:

  • (String)


406
407
408
# File 'lib/henitai/reporter.rb', line 406

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

#report(result) ⇒ void

This method returns an undefined value.

Parameters:



342
343
344
345
346
347
348
# File 'lib/henitai/reporter.rb', line 342

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)


388
389
390
# File 'lib/henitai/reporter.rb', line 388

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)


384
385
386
# File 'lib/henitai/reporter.rb', line 384

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:



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

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)


365
366
367
368
369
370
371
372
373
374
375
376
# File 'lib/henitai/reporter.rb', line 365

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)


352
353
354
# File 'lib/henitai/reporter.rb', line 352

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

#write_history_reportvoid

This method returns an undefined value.



392
393
394
395
396
397
398
# File 'lib/henitai/reporter.rb', line 392

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])


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

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