Author: Juergen Boemmels <[email protected]>
Branch:
Changeset: r4:afd4189fb68b
Date: 2011-09-04 21:49 +0200
http://bitbucket.org/pypy/lang-scheme/changeset/afd4189fb68b/
Log: Implement display & newline
Mostly just uncommenting the implementation. Added tests for display
and newline
diff --git a/scheme/procedure.py b/scheme/procedure.py
--- a/scheme/procedure.py
+++ b/scheme/procedure.py
@@ -357,18 +357,28 @@
##
# Input/Output procedures
##
-#class Display(W_Procedure):
-# _symbol_name = "display"
-#
-# def procedure(self, ctx, lst):
-# if len(lst) == 1:
-# obj = lst[0]
-# elif len(lst) == 2:
-# (obj, port) = lst
-# raise NotImplementedError
-# else:
-# raise WrongArgsNumber
-#
-# print obj.to_string()
-# return w_undefined
+class Display(W_Procedure):
+ _symbol_name = "display"
+ def procedure(self, ctx, lst):
+ if len(lst) == 1:
+ obj = lst[0]
+ elif len(lst) == 2:
+ (obj, port) = lst
+ raise NotImplementedError
+ else:
+ raise WrongArgsNumber
+
+ print obj.to_string(),
+ return w_undefined
+
+class Newline(W_Procedure):
+ _symbol_name = "newline"
+
+ def procedure(self, ctx, lst):
+ if len(lst) != 0:
+ raise WrongArgsNumber
+
+ print
+ return w_undefined
+
diff --git a/scheme/test/test_output.py b/scheme/test/test_output.py
new file mode 100644
--- /dev/null
+++ b/scheme/test/test_output.py
@@ -0,0 +1,35 @@
+
+import sys
+from StringIO import StringIO
+from scheme.ssparser import parse
+from scheme.execution import ExecutionContext
+
+
+def capture_output(func):
+ s = StringIO()
+ so = sys.stdout
+ sys.stdout = s
+ try:
+ func()
+ finally:
+ sys.stdout = so
+ res = s.getvalue()
+ s.close()
+ return res
+
+def eval_noctx(expr):
+ return parse(expr)[0].eval(ExecutionContext())
+
+def test_display():
+ tests = [("(display 'foobar)", "foobar"),
+ ("(display 42)", "42"),
+ ("(display \"Hello World!\")", "Hello World!"),
+ ("(display '(1 2 3))", "(1 2 3)"),
+ ]
+ for code, expected in tests:
+ out = capture_output(lambda: eval_noctx(code))
+ assert out == expected
+
+def test_newline():
+ out = capture_output(lambda: eval_noctx("(newline)"))
+ assert out == "\n"
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit