test(compiler-worker): regression test stdin passthrough untuk Python input() dan C scanf()
This commit is contained in:
parent
1aef334d59
commit
a14eb70038
|
|
@ -0,0 +1,80 @@
|
|||
"""Regression tests for compiler_worker stdin passthrough.
|
||||
|
||||
compiler_worker/ is NOT a Python package — app.py is a standalone Flask
|
||||
module. It is loaded via importlib from its absolute path.
|
||||
"""
|
||||
|
||||
import os
|
||||
import importlib.util
|
||||
|
||||
_HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
_APP_PATH = os.path.join(os.path.dirname(_HERE), "app.py")
|
||||
|
||||
spec = importlib.util.spec_from_file_location("worker_app", _APP_PATH)
|
||||
worker_app = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(worker_app)
|
||||
|
||||
|
||||
# --- Python input() ---------------------------------------------------------
|
||||
|
||||
|
||||
def test_python_input_single_line_with_stdin():
|
||||
code = 'nama = input("Siapa nama kamu? ")\nprint(f"Halo, {nama}!")\n'
|
||||
result = worker_app.run_python_code(code, stdin="Budi\n")
|
||||
assert result["success"] is True
|
||||
assert "Halo, Budi!" in result["output"]
|
||||
|
||||
|
||||
def test_python_input_multiple_lines_with_stdin():
|
||||
code = (
|
||||
'nama = input("Nama: ")\n'
|
||||
'umur = input("Umur: ")\n'
|
||||
'print(f"{nama} berumur {umur} tahun")\n'
|
||||
)
|
||||
result = worker_app.run_python_code(code, stdin="Budi\n17\n")
|
||||
assert result["success"] is True
|
||||
assert "Budi berumur 17 tahun" in result["output"]
|
||||
|
||||
|
||||
def test_python_input_empty_stdin_raises_eoferror():
|
||||
code = 'nama = input("Siapa nama kamu? ")\nprint(f"Halo, {nama}!")\n'
|
||||
result = worker_app.run_python_code(code, stdin="")
|
||||
# Worker reports success even when the child process exits with an error
|
||||
# (subprocess returncode is not checked); the traceback lands in stderr.
|
||||
assert result["success"] is True
|
||||
assert "EOFError" in result["error"]
|
||||
|
||||
|
||||
# --- C scanf() --------------------------------------------------------------
|
||||
|
||||
|
||||
def test_c_scanf_single_line_with_stdin():
|
||||
code = (
|
||||
"#include <stdio.h>\n"
|
||||
"int main() {\n"
|
||||
" char nama[32];\n"
|
||||
" scanf(\"%31s\", nama);\n"
|
||||
" printf(\"Halo, %s!\\n\", nama);\n"
|
||||
" return 0;\n"
|
||||
"}\n"
|
||||
)
|
||||
result = worker_app.run_c_code(code, stdin="Budi\n")
|
||||
assert result["success"] is True
|
||||
assert "Halo, Budi!" in result["output"]
|
||||
|
||||
|
||||
def test_c_scanf_empty_stdin_returns_no_output():
|
||||
code = (
|
||||
"#include <stdio.h>\n"
|
||||
"int main() {\n"
|
||||
" char nama[32] = \"\";\n"
|
||||
" if (scanf(\"%31s\", nama) != 1) {\n"
|
||||
" return 1;\n"
|
||||
" }\n"
|
||||
" printf(\"Halo, %s!\\n\", nama);\n"
|
||||
" return 0;\n"
|
||||
"}\n"
|
||||
)
|
||||
result = worker_app.run_c_code(code, stdin="")
|
||||
assert result["success"] is True
|
||||
assert "Halo," not in result["output"]
|
||||
Loading…
Reference in New Issue