Fix "hy -c CMD" to show lex errors; add tests

* tells you there's a lex error, but doesn't tell you much else
* adds tests for all new bin/hy functionality
This commit is contained in:
Will Kahn-Greene 2013-04-24 09:21:42 -04:00
parent 760774afde
commit 07dec18dc3
2 changed files with 47 additions and 6 deletions

View File

@ -37,7 +37,7 @@ from hy.lex.states import Idle, LexException
from hy.lex.machine import Machine
from hy.compiler import hy_compile
from hy.core import process
from hy.importer import ast_compile
from hy.importer import ast_compile, import_buffer_to_module
import hy.completer
@ -137,8 +137,13 @@ def ideas_macro(tree):
def run_command(source):
hr = HyREPL()
hr.runsource(source, filename='<input>', symbol='single')
try:
import_buffer_to_module("__main__", source)
except LexException as exc:
# TODO: This would be better if we had line, col info.
print(source)
print(repr(exc))
return 1
return 0

View File

@ -1,8 +1,44 @@
import subprocess
def test_bin_hy():
p = subprocess.Popen("echo | bin/hy",
def run_cmd(cmd):
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
shell=True)
p.wait()
assert p.returncode == 0
return p.returncode, p.stdout, p.stderr
def test_bin_hy():
ret = run_cmd("echo | bin/hy")
assert ret[0] == 0
def test_bin_hy_stdin():
ret = run_cmd("echo \"(koan)\" | bin/hy")
assert ret[0] == 0
assert "monk" in ret[1].read().decode("utf-8")
def test_bin_hy_cmd():
ret = run_cmd("bin/hy -c \"(koan)\"")
assert ret[0] == 0
assert "monk" in ret[1].read().decode("utf-8")
ret = run_cmd("bin/hy -c \"(koan\"")
assert ret[0] == 1
assert "LexException" in ret[1].read().decode("utf-8")
def test_bin_hy_icmd():
ret = run_cmd("echo \"(ideas)\" | bin/hy -i \"(koan)\"")
assert ret[0] == 0
output = ret[1].read().decode("utf-8")
assert "monk" in output
assert "figlet" in output
def test_bin_hy_file():
ret = run_cmd("bin/hy eg/nonfree/halting-problem/halting.hy")
assert ret[0] == 0
assert "27" in ret[1].read().decode("utf-8")