Class: Tryouts

Inherits:
Object
  • Object
show all
Extended by:
ClassMethods
Defined in:
lib/tryouts/version.rb,
lib/tryouts.rb,
lib/tryouts/cli.rb,
lib/tryouts/console.rb,
lib/tryouts/cli/opts.rb,
lib/tryouts/test_case.rb,
lib/tryouts/test_batch.rb,
lib/tryouts/test_runner.rb,
lib/tryouts/test_executor.rb,
lib/tryouts/file_processor.rb,
lib/tryouts/parser_warning.rb,
lib/tryouts/cli/tty_detector.rb,
lib/tryouts/cli/modes/inspect.rb,
lib/tryouts/failure_collector.rb,
lib/tryouts/cli/modes/generate.rb,
lib/tryouts/cli/formatters/base.rb,
lib/tryouts/parsers/base_parser.rb,
lib/tryouts/cli/formatters/agent.rb,
lib/tryouts/cli/formatters/quiet.rb,
lib/tryouts/cli/line_spec_parser.rb,
lib/tryouts/parsers/legacy_parser.rb,
lib/tryouts/cli/formatters/compact.rb,
lib/tryouts/cli/formatters/factory.rb,
lib/tryouts/cli/formatters/verbose.rb,
lib/tryouts/parsers/shared_methods.rb,
lib/tryouts/test_result_aggregator.rb,
lib/tryouts/parsers/enhanced_parser.rb,
lib/tryouts/cli/formatters/token_budget.rb,
lib/tryouts/expectation_evaluators/base.rb,
lib/tryouts/expectation_evaluators/true.rb,
lib/tryouts/expectation_evaluators/false.rb,
lib/tryouts/translators/rspec_translator.rb,
lib/tryouts/cli/formatters/output_manager.rb,
lib/tryouts/cli/formatters/test_run_state.rb,
lib/tryouts/expectation_evaluators/output.rb,
lib/tryouts/expectation_evaluators/boolean.rb,
lib/tryouts/expectation_evaluators/non_nil.rb,
lib/tryouts/expectation_evaluators/regular.rb,
lib/tryouts/expectation_evaluators/registry.rb,
lib/tryouts/translators/minitest_translator.rb,
lib/tryouts/expectation_evaluators/exception.rb,
lib/tryouts/cli/formatters/tty_status_display.rb,
lib/tryouts/cli/formatters/live_status_manager.rb,
lib/tryouts/expectation_evaluators/regex_match.rb,
lib/tryouts/expectation_evaluators/result_type.rb,
lib/tryouts/expectation_evaluators/performance_time.rb,
lib/tryouts/expectation_evaluators/expectation_result.rb,
lib/tryouts/expectation_evaluators/intentional_failure.rb

Overview

lib/tryouts/expectation_evaluators/expectation_result.rb

Defined Under Namespace

Modules: ClassMethods, Console, ExpectationEvaluators, Parsers, Translators Classes: CLI, EnhancedParser, FailureCollector, FileProcessor, FreshContextFactory, LegacyParser, TestBatch, TestExecutor, TestResultAggregator, TestRunner, TryoutSyntaxError

Constant Summary collapse

VERSION =
'3.7.1'
TestCase =

Core data structures

Data.define(:description, :code, :expectations, :line_range, :path, :source_lines, :first_expectation_line) do
  def empty?
    code.empty?
  end

  def expectations?
    !expectations.empty?
  end

  def exception_expectations?
    expectations.any?(&:exception?)
  end

  def regular_expectations
    expectations.filter(&:regular?)
  end

  def exception_expectations
    expectations.filter(&:exception?)
  end
end
Expectation =
Data.define(:content, :type) do
  def regular? = type == :regular
  def exception? = type == :exception
  def boolean? = type == :boolean
  def true? = type == :true
  def false? = type == :false
  def result_type? = type == :result_type
  def regex_match? = type == :regex_match
  def performance_time? = type == :performance_time
  def intentional_failure? = type == :intentional_failure
  def output? = type == :output
end
OutputExpectation =

Special expectation type for output capturing with pipe information

Data.define(:content, :type, :pipe) do
  def regular? = type == :regular
  def exception? = type == :exception
  def boolean? = type == :boolean
  def true? = type == :true
  def false? = type == :false
  def result_type? = type == :result_type
  def regex_match? = type == :regex_match
  def performance_time? = type == :performance_time
  def intentional_failure? = type == :intentional_failure
  def output? = type == :output

  def stdout? = pipe == 1
  def stderr? = pipe == 2
end
Setup =
Data.define(:code, :line_range, :path) do
  def empty?
    code.empty?
  end
end
Teardown =
Data.define(:code, :line_range, :path) do
  def empty?
    code.empty?
  end
end
Testrun =
Data.define(:setup, :test_cases, :teardown, :source_file, :metadata, :warnings) do
  def total_tests
    test_cases.size
  end

  def empty?
    test_cases.empty?
  end
end
TestCaseResultPacket =

Test case result packet for formatters Replaces the simple Hash aggregation with a rich, immutable data structure containing all execution context and results needed by formatters

Data.define(
  :test_case,          # TestCase object
  :status,             # :passed, :failed, :error
  :result_value,       # Actual execution result
  :actual_results,     # Array of actual values from expectations
  :expected_results,   # Array of expected values from expectations
  :error,              # Exception object (if any)
  :captured_output,    # Captured stdout/stderr content
  :elapsed_time,       # Execution timing (future use)
  :metadata,            # Hash for future extensibility
) do
  def passed?
    status == :passed
  end

  def failed?
    status == :failed
  end

  def error?
    status == :error
  end

  def has_output?
    captured_output && !captured_output.empty?
  end

  def has_error?
    !error.nil?
  end

  # Helper for formatter access to first actual/expected values
  def first_actual
    actual_results&.first
  end

  def first_expected
    expected_results&.first
  end

  # Create a basic result packet for successful tests
  def self.from_success(test_case, result_value, actual_results, expected_results, captured_output: nil, elapsed_time: nil, metadata: {})
    new(
      test_case: test_case,
      status: :passed,
      result_value: result_value,
      actual_results: actual_results,
      expected_results: expected_results,
      error: nil,
      captured_output: captured_output,
      elapsed_time: elapsed_time,
      metadata: ,
    )
  end

  # Create a result packet for failed tests
  def self.from_failure(test_case, result_value, actual_results, expected_results, captured_output: nil, elapsed_time: nil, metadata: {})
    new(
      test_case: test_case,
      status: :failed,
      result_value: result_value,
      actual_results: actual_results,
      expected_results: expected_results,
      error: nil,
      captured_output: captured_output,
      elapsed_time: elapsed_time,
      metadata: ,
    )
  end

  # Create a result packet for error cases
  def self.from_error(test_case, error, captured_output: nil, elapsed_time: nil, metadata: {})
    error_message = error ? error.message : '<exception is nil>'

    # Include backtrace in error message when stack traces are enabled
    error_display = if error && Tryouts.stack_traces?
      backtrace_preview = Console.pretty_backtrace(error.backtrace, limit: 3).join("\n    ")
      "(#{error.class}) #{error_message}\n    #{backtrace_preview}"
    else
      "(#{error.class}) #{error_message}"
    end

    new(
      test_case: test_case,
      status: :error,
      result_value: nil,
      actual_results: [error_display],
      expected_results: [],
      error: error,
      captured_output: captured_output,
      elapsed_time: elapsed_time,
      metadata: ,
    )
  end
end
ParserWarning =

Data structure for parser warnings

Data.define(:type, :message, :line_number, :context, :suggestion) do
  def self.unnamed_test(line_number:, context:)
    new(
      type: :unnamed_test,
      message: "Test case without explicit description",
      line_number: line_number,
      context: context,
      suggestion: "Add a test description using '## Description' prefix"
    )
  end

  def self.ambiguous_test_boundary(line_number:, context:)
    new(
      type: :ambiguous_boundary,
      message: "Ambiguous test case boundary detected",
      line_number: line_number,
      context: context,
      suggestion: "Use explicit '## Description' to clarify test structure"
    )
  end

  def self.malformed_expectation(line_number:, syntax:, context:)
    new(
      type: :malformed_expectation,
      message: "Malformed expectation syntax '#=#{syntax}>' at line #{line_number}",
      line_number: line_number,
      context: context,
      suggestion: "Use valid expectation syntax like #=>, #==>, #=:>, #=!>, etc."
    )
  end
end

Instance Attribute Summary

Attributes included from ClassMethods

#cases, #container, #debug, #fails, #noisy, #quiet, #stack_traces, #testcase_io

Method Summary

Methods included from ClassMethods

batch_stopping_error?, classify_error, debug?, stack_traces?, test_stopping_error?, trace, update_load_path