lib/sus/it.rb
# frozen_string_literal: true # Released under the MIT License. # Copyright, 2021-2022, by Samuel Williams. require_relative 'context' module Sus module It def self.build(parent, description = nil, &block) base = Class.new(parent) base.extend(It) base.description = description base.identity = Identity.nested(parent.identity, base.description) if block_given? base.define_method(:call, &block) end return base end def leaf? true end def print(output) self.superclass.print(output) if description = self.description output.write(" it ", :it, description, :reset, " ", :identity, self.identity.to_s, :reset) else output.write(" and ", :identity, self.identity.to_s, :reset) end end def call(assertions) assertions.nested(self, identity: self.identity, isolated: true, measure: true) do |assertions| instance = self.new(assertions) instance.around do instance.call end end end end module Context def it(...) add It.build(self, ...) end end end