class Tryouts::ExpectationEvaluators::Regular
-
Enables expectations like: #=> result.upcase, #=> _.first, #=> result * 2
- ‘_`: shorthand alias for the same actual result value
- `result`: contains the actual test result value
VARIABLE ACCESS:
- Serves as fallback when no specialized evaluator applies
- Part of unified #= prefix convention for all expectation types
- Evaluated expected display prevents confusion with literal text content
- Uses #=> syntax as the canonical expectation notation
- Expression evaluation enables dynamic expectations (result.length, etc.)
- Standard equality provides intuitive testing behavior
DESIGN DECISIONS:
- Most flexible evaluator supporting arbitrary Ruby expressions
- Actual display shows the test result value
- Expected display shows the evaluated expression result (not raw content)
- Expression has access to `result` and `_` variables (actual_result)
IMPLEMENTATION DETAILS:
- Reference-independent: compares values not object identity
- Type-sensitive: 2 != “2”, [1] != 1, nil != false
- Supports all Ruby types: primitives, collections, objects
- Uses Ruby’s == operator for equality comparison
EQUALITY SEMANTICS:
1 + 1 #=> result # Pass: 2 == 2 (result variable access)
{ a: 1 } #=> { a: 1 } # Pass: hash equality
[1, 2, 3] #=> result.sort # Pass: [1,2,3] == [1,2,3]
“hello” #=> “hello” # Pass: string equality
[1, 2, 3] #=> [1, 2, 3] # Pass: array equality
[1, 2, 3] #=> result.length # Pass: [1,2,3] == 3 (fails, different types)
1 + 1 #=> 2 # Pass: 2 == 2
Examples:
SYNTAX: #=> expression
- Serves as the default and most commonly used expectation type
- Provides the fundamental equality-based testing mechanism
- Validates that test result equals the evaluated expectation expression
PURPOSE:
Evaluator for standard equality expectations using syntax: #=> expression
def self.handles?(expectation_type)
def self.handles?(expectation_type) expectation_type == :regular end
def evaluate(actual_result = nil)
def evaluate(actual_result = nil) expectation_result = ExpectationResult.from_result(actual_result) expected_value = eval_expectation_content(@expectation.content, expectation_result) build_result( passed: actual_result == expected_value, actual: actual_result, expected: expected_value, ) rescue StandardError => ex handle_evaluation_error(ex, actual_result) end