class Tryouts::ExpectationEvaluators::Base
Base class for all expectation evaluators
def self.handles?(expectation_type)
-
(Boolean)
- whether this evaluator can handle the given expectation type
Parameters:
-
expectation_type
(Symbol
) -- the type of expectation to check
def self.handles?(expectation_type) raise NotImplementedError, "#{self} must implement handles? class method" end
def build_result(passed:, actual:, expected:, expectation: @expectation.content, error: nil)
def build_result(passed:, actual:, expected:, expectation: @expectation.content, error: nil) result = { passed: passed, actual: actual, expected: expected, expectation: expectation, } result[:error] = error if error result end
def eval_expectation_content(content, expectation_result = nil)
-
(Object)
- the result of evaluating the content
Parameters:
-
expectation_result
(ExpectationResult
) -- container with actual_result and timing data -
content
(String
) -- the expectation code to evaluate
def eval_expectation_content(content, expectation_result = nil) path = @test_case.path range = @test_case.line_range if expectation_result # For performance expectations, timing data takes precedence for result/_ if expectation_result.execution_time_ns timing_ms = expectation_result.execution_time_ms @context.define_singleton_method(:result) { timing_ms } @context.define_singleton_method(:_) { timing_ms } elsif expectation_result.actual_result # For regular expectations, use actual_result @context.define_singleton_method(:result) { expectation_result.actual_result } @context.define_singleton_method(:_) { expectation_result.actual_result } end end @context.instance_eval(content, path, range.first + 1) end
def evaluate(actual_result = nil)
-
(Hash)
- evaluation result with passed status and details
Parameters:
-
actual_result
(Object
) -- the result to evaluate against the expectation
def evaluate(actual_result = nil) raise NotImplementedError, "#{self.class} must implement evaluate method" end
def handle_evaluation_error(error, actual_result)
def handle_evaluation_error(error, actual_result) build_result( passed: false, actual: actual_result, expected: "EXPECTED: #{error.message}", expectation: @expectation.content, error: error, ) end
def initialize(expectation, test_case, context)
-
context
(Object
) -- the context in which to evaluate expectations -
test_case
(Object
) -- the test case being evaluated -
expectation
(Object
) -- the expectation object containing content and metadata
def initialize(expectation, test_case, context) @expectation = expectation @test_case = test_case @context = context end