class Tryouts::ExpectationEvaluators::False

  • Uses #=/=> syntax to visually distinguish from true expectations
    - Part of unified #= prefix convention for all expectation types
    - Expression evaluation provides flexible boolean logic testing
    - Clear expected display explains the exact requirement
    - Strict false matching prevents accidental falsy value acceptance
    DESIGN DECISIONS:
    - Distinguishes from regular expectations through strict false matching
    - Actual display shows the evaluated expression result
    - Expected display shows ‘false (exactly)’ for clarity
    - Expression has access to ‘result` and `_` variables (actual_result)
    IMPLEMENTATION DETAILS:
    - Encourages explicit boolean expressions in documentation
    - Uses Ruby’s === comparison for exact boolean matching
    - Fails for true, nil, 0, “”, [], {}, or any non-false value
    - Only passes when expression evaluates to exactly false (not falsy)
    BOOLEAN STRICTNESS:
    [] #=/=> result.first # Fail: expression is nil (falsy but not false)
    [1, 2, 3] #=/=> result.first # Fail: expression is 1 (truthy but not false)
    [] #=/=> result.empty? # Fail: expression is true
    [] #=/=> result.include?(1) # Pass: expression is false
    [1, 2, 3] #=/=> result.include?(5) # Pass: expression is false
    [1, 2, 3] #=/=> result.empty? # Pass: expression is false
    Examples:
    SYNTAX: #=/=> boolean_expression
    - Distinguishes between true/false and truthy/falsy values
    - Provides explicit boolean validation for documentation-style tests
    - Validates that an expression evaluates to exactly false (not falsy)
    PURPOSE:
    Evaluator for boolean false expectations using syntax: #=/=> expression

def self.handles?(expectation_type)

def self.handles?(expectation_type)
  expectation_type == :false # rubocop:disable Lint/BooleanSymbol
end

def evaluate(actual_result = nil)

def evaluate(actual_result = nil)
  expectation_result = ExpectationResult.from_result(actual_result)
  expression_result  = eval_expectation_content(@expectation.content, expectation_result)
  build_result(
    passed: expression_result == false,
    actual: expression_result,
    expected: false,
  )
rescue StandardError => ex
  handle_evaluation_error(ex, actual_result)
end