39 lines
1.7 KiB
Crystal
39 lines
1.7 KiB
Crystal
require "./context"
|
|
require "./example"
|
|
require "./location"
|
|
require "./metadata"
|
|
require "./node_builder"
|
|
|
|
module Spectator
|
|
# Constructs examples.
|
|
# Call `#build` to produce an `Example`.
|
|
class ExampleBuilder < NodeBuilder
|
|
@name : Proc(Example, String) | String?
|
|
|
|
# Creates the builder.
|
|
# A proc provided by *context_builder* is used to create a unique `Context` for each example produced by `#build`.
|
|
# The *entrypoint* indicates the proc used to invoke the test code in the example.
|
|
# The *name*, *location*, and *metadata* will be applied to the `Example` produced by `#build`.
|
|
def initialize(@context_builder : -> Context, @entrypoint : Example ->,
|
|
@name : String? = nil, @location : Location? = nil, @metadata : Metadata? = nil)
|
|
end
|
|
|
|
# Creates the builder.
|
|
# A proc provided by *context_builder* is used to create a unique `Context` for each example produced by `#build`.
|
|
# The *entrypoint* indicates the proc used to invoke the test code in the example.
|
|
# The *name* is an interpolated string that runs in the context of the example.
|
|
# *location*, and *metadata* will be applied to the `Example` produced by `#build`.
|
|
def initialize(@context_builder : -> Context, @entrypoint : Example ->,
|
|
@name : Example -> String, @location : Location? = nil, @metadata : Metadata? = nil)
|
|
end
|
|
|
|
# Constructs an example with previously defined attributes and context.
|
|
# The *parent* is an already constructed example group to nest the new example under.
|
|
# It can be nil if the new example won't have a parent.
|
|
def build(parent = nil)
|
|
context = @context_builder.call
|
|
Example.new(context, @entrypoint, @name, @location, parent, @metadata)
|
|
end
|
|
end
|
|
end
|