# Path: sampletester/testenv.py
# class Base:
#   def __init__(self, name='#Base', description=''):
#   def name(self):
#   def setup(self):
#   def teardown(self):
#   def get_call(self, *args, **kwargs):
#   def get_symbol(self, symbol):
#   def get_testcase_settings(self):
# def process_args(*args, **kwargs):
# def quote(s: str):


import copy
import logging
import os
import re
import subprocess
import traceback
import uuid
from datetime import datetime
from sampletester import testenv
    self.end_time = None

    # The key is the external binding available through `code` and directly through yaml keys.
    #
    # The value is a pair. The first element is the test variable or
    # function. The second element, if not None, is the "yaml_prep" function
    # that returns a pair of ([arguments], {kwargs}) for passing to the function; if
    # the yaml_prep returns None, the test function is not called (this is
    # useful to provide an alternate representation in the YAML)
    self.builtins = {
        ### Variables: meta info about the test case, last output
        "testcase_num": (self.idx, None),
        "testcase_id": (self.label, None),
        "_last_call_output": (self.last_call_output, None),

        ### Functions to execute processes
        "call": (self.call_no_error, self.params_for_call),
        "call_may_fail": (self.call_allow_error, self.params_for_call),
        "shell": (self.shell, self.yaml_args_string),

        ### Other functions available to the test suite
        "uuid": (self.get_uuid, self.yaml_get_uuid),
        "env": (self.get_env, self.yaml_get_env),
        "log": (self.print_out, self.yaml_args_string),
        "extract_match": (self.extract_match, self.yaml_extract_match),

        ### Code
        "code": (self.execute, lambda p: ([p], {})),

        # Functions to fail the test: these are intended for code only

# Path: sampletester/testenv.py
# class Base:
#   def __init__(self, name='#Base', description=''):
#   def name(self):
#   def setup(self):
#   def teardown(self):
#   def get_call(self, *args, **kwargs):
#   def get_symbol(self, symbol):
#   def get_testcase_settings(self):
# def process_args(*args, **kwargs):
# def quote(s: str):


# Path: sampletester/caserunner.py
import copy
import logging
import os
import re
import subprocess
import traceback
import uuid
from datetime import datetime
from sampletester import testenv

    self.end_time = None

    # The key is the external binding available through `code` and directly through yaml keys.
    #
    # The value is a pair. The first element is the test variable or
    # function. The second element, if not None, is the "yaml_prep" function
    # that returns a pair of ([arguments], {kwargs}) for passing to the function; if
    # the yaml_prep returns None, the test function is not called (this is
    # useful to provide an alternate representation in the YAML)
    self.builtins = {
        ### Variables: meta info about the test case, last output
        "testcase_num": (self.idx, None),
        "testcase_id": (self.label, None),
        "_last_call_output": (self.last_call_output, None),

        ### Functions to execute processes
        "call": (self.call_no_error, self.params_for_call),
        "call_may_fail": (self.call_allow_error, self.params_for_call),
        "shell": (self.shell, self.yaml_args_string),

        ### Other functions available to the test suite
        "uuid": (self.get_uuid, self.yaml_get_uuid),
        "env": (self.get_env, self.yaml_get_env),
        "log": (self.print_out, self.yaml_args_string),
        "extract_match": (self.extract_match, self.yaml_extract_match),

        ### Code
        "code": (self.execute, lambda p: ([p], {})),

        # Functions to fail the test: these are intended for code only

        "fail": (self.fail, None),