shard-spectator/src/spectator/config.cr

60 lines
1.8 KiB
Crystal
Raw Normal View History

2020-09-12 21:58:54 +00:00
require "./example_filter"
require "./formatting"
2021-05-09 04:51:54 +00:00
require "./run_flags"
2020-09-12 21:58:54 +00:00
module Spectator
# Provides customization and describes specifics for how Spectator will run and report tests.
class Config
2019-03-23 23:00:21 +00:00
@formatters : Array(Formatting::Formatter)
2018-12-13 21:16:49 +00:00
2021-05-09 04:51:54 +00:00
# Flags indicating how the spec should run.
getter run_flags : RunFlags
2019-03-24 01:43:41 +00:00
2020-10-18 03:39:41 +00:00
# Seed used for random number generation.
2020-10-18 04:11:04 +00:00
getter random_seed : UInt64
2020-07-27 16:36:53 +00:00
2018-12-13 21:16:49 +00:00
# Creates a new configuration.
2020-10-18 04:11:04 +00:00
# Properties are pulled from *source*.
# Typically, *source* is a `ConfigBuilder`.
2020-10-18 04:12:47 +00:00
def initialize(source)
@formatters = source.formatters
2021-05-09 04:51:54 +00:00
@run_flags = source.run_flags
2020-10-18 04:12:47 +00:00
@random_seed = source.random_seed
@example_filter = source.example_filter
2018-12-13 21:16:49 +00:00
end
2019-03-23 23:00:21 +00:00
2020-10-18 04:11:04 +00:00
# Shuffles the items in an array using the configured random settings.
# If `#randomize?` is true, the *items* are shuffled and returned as a new array.
# Otherwise, the items are left alone and returned as-is.
# The array of *items* is never modified.
def shuffle(items)
2021-05-09 04:51:54 +00:00
return items unless run_flags.randomize?
2020-10-18 04:11:04 +00:00
items.shuffle(random)
end
# Shuffles the items in an array using the configured random settings.
# If `#randomize?` is true, the *items* are shuffled and returned.
# Otherwise, the items are left alone and returned as-is.
# The array of *items* is modified, the items are shuffled in-place.
def shuffle!(items)
2021-05-09 04:51:54 +00:00
return items unless run_flags.randomize?
2020-10-18 04:11:04 +00:00
items.shuffle!(random)
end
2019-03-23 23:00:21 +00:00
# Yields each formatter that should be reported to.
def each_formatter
@formatters.each do |formatter|
yield formatter
end
end
2020-10-18 04:11:04 +00:00
# Retrieves the configured random number generator.
# This will produce the same generator with the same seed every time.
private def random
Random.new(random_seed)
end
end
end