1313
1414del sys .modules ["urllib3" ]# so that stub_module doesn't complain
1515
16- assets_dir = Path (__file__ ).parent / "test_frontend_assets"
16+ this_dir = Path (__file__ ).parent
17+ assets_dir = this_dir / "test_frontend_assets"
1718assets_dir .mkdir (exist_ok = True )
1819
1920
@@ -104,6 +105,21 @@ def _tests(driver):
104105>>> """ ,
105106 )
106107
108+ editor = driver .find_element_by_css_selector ("#editor textarea" )
109+ run_button = driver .find_element_by_css_selector (".editor-buttons .btn-primary" )
110+ snoop_button = driver .find_element_by_css_selector (".editor-buttons .btn-success" )
111+
112+ # Run test_steps within futurecoder!
113+ run_code (editor ,run_button ,get_test_steps_code ())
114+ driver .implicitly_wait (20 )
115+ await_result (driver ,">>>" ,">>> " )
116+ driver .implicitly_wait (5 )
117+
118+ # The above directly modifies the runner callbacks,
119+ # so we need a separate run to reset the callback and print stuff
120+ run_code (editor ,run_button ,'print(open("golden_files/None/test_transcript.json").read())' )
121+ await_result (driver ,"Introducing" , (this_dir / "golden_files/en/test_transcript.json" ).read_text ()+ "\n >>> " )
122+
107123# Reverse until at first step
108124for _ in range (10 ):
109125reverse_button .click ()
@@ -130,9 +146,6 @@ def _tests(driver):
130146 )
131147
132148# Run code in editor
133- editor = driver .find_element_by_css_selector ("#editor textarea" )
134- run_button = driver .find_element_by_css_selector (".editor-buttons .btn-primary" )
135- snoop_button = driver .find_element_by_css_selector (".editor-buttons .btn-success" )
136149run_code (editor ,run_button ,code )
137150
138151# Check result in terminal
@@ -490,3 +503,13 @@ def check_choice_status(driver, choice_index, status):
490503choice .get_attribute ("class" )
491504for choice in driver .find_elements_by_class_name ("prediction-choice" )
492505 ]
506+
507+
508+ def get_test_steps_code ():
509+ code = (this_dir / "test_steps.py" ).read_text ()
510+ code += "os.environ['FUTURECODER_LANGUAGE'] = 'None'\n "
511+ code += "os.environ['FIX_TESTS'] = '1'\n "
512+ code += "test_steps()\n "
513+ # Put all code in one line to avoid ace indentation issues
514+ code = f"exec({ code !r} , globals())"
515+ return code