aboutsummaryrefslogtreecommitdiff
path: root/t/06_guile2python.t
diff options
context:
space:
mode:
Diffstat (limited to 't/06_guile2python.t')
-rw-r--r--t/06_guile2python.t143
1 files changed, 143 insertions, 0 deletions
diff --git a/t/06_guile2python.t b/t/06_guile2python.t
new file mode 100644
index 0000000..346d478
--- /dev/null
+++ b/t/06_guile2python.t
@@ -0,0 +1,143 @@
+#!/usr/bin/guile -s
+!#
+; Additional Pyguile tests - transferring data from Guile to Python.
+; Tests added to complete code coverage.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;
+; Copyright (C) 2008 Omer Zak.
+; This library is free software; you can redistribute it and/or
+; modify it under the terms of the GNU Lesser General Public
+; License as published by the Free Software Foundation; either
+; version 2.1 of the License, or (at your option) any later version.
+;
+; This library is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+; Lesser General Public License for more details.
+;
+; You should have received a copy of the GNU Lesser General Public License
+; along with this library, in a file named COPYING; if not, write to the
+; Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+; Boston, MA 02111-1307 USA
+;
+; For licensing issues, contact <w1@zak.co.il>.
+;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;
+(use-modules (guiletap))
+(use-modules (pyguile))
+
+(plan 13)
+
+(is-ok 1 "Float 1.5" "1.5"
+ (python-apply '("__builtin__" repr) '(1.5) '()))
+(is-ok 2 "Float 1000000000.5" "1000000000.5"
+ (python-apply '("__builtin__" repr) '(1000000000.5) '()))
+(is-ok 3 "Float 1e+20" "1e+20"
+ (python-apply '("__builtin__" repr) '(100000000000000000000.5) '()))
+
+(is-ok 4 "Complex" "[(1+1j), (2-3j), (-3-4j), (-4+5j)]"
+ (python-apply '("__builtin__" repr) '((1+1i 2-3i -3-4i -4+5i)) '()))
+
+;(if (equal? (effective-version) "1.6")
+; (is-ok 5 "Dash-only keyword" "''"
+; (python-apply '("__builtin__" repr) '(#:) '()))
+; (ok 5 "Dash-only keyword not supported in Guile 1.8" #t))
+(ok 5 "Dash-only keyword not supported in Guile 1.8" #t)
+
+;(if (equal? (effective-version) "1.6")
+; (is-ok 6 "String, symbol and keywords (version 1.6.x)"
+; "['abc', 'def', 'ghi', 'gh', 'g', '']"
+; (python-apply '("__builtin__" repr)
+; '(("abc" def #:ghi #:gh #:g #:))
+; '()))
+; (is-ok 6 "String, symbol and keywords (version 1.8.x)"
+; "['abc', 'def', 'ghi', 'gh', 'g']"
+; (python-apply '("__builtin__" repr)
+; '(("abc" def #:ghi #:gh #:g))
+; '())))
+(is-ok 6 "String, symbol and keywords (version 1.8 compatible)"
+ "['abc', 'def', 'ghi', 'gh', 'g']"
+ (python-apply '("__builtin__" repr)
+ '(("abc" def #:ghi #:gh #:g))
+ '()))
+
+; Illegal positional keyword arguments handling
+
+(is-ok 7 "Positional argument list is not legal list"
+ '(misc-error ("python-apply" "positional arguments conversion failure (~S)" (42) #f))
+ (catch #t
+ (lambda () (python-apply '("__builtin__" repr)
+ 42
+ '()))
+ (lambda (key . args) (list key args))))
+
+
+; Illegal keyword arguments handling
+
+(python-eval "import sys;sys.path = ['']+sys.path\n")
+(python-import "t.scripts.t4apply")
+
+(is-ok 8 "good alist" "positional: ('a',) keywords: {'arg1': 'b'}"
+ (catch #t
+ (lambda () (python-apply '("t.scripts.t4apply" return_args)
+ '("a")
+ '((#:arg1 . "b"))))
+ (lambda (key . args) (list key args))))
+
+(is-ok 9 "bad alist - not list"
+ '(wrong-type-arg ("guileassoc2pythondict"
+ "Wrong type argument in position ~A: ~S"
+ (1 "b")
+ #f))
+ (catch #t
+ (lambda () (python-apply '("t.scripts.t4apply" return_args)
+ '("a")
+ '("b")))
+ (lambda (key . args) (list key args))))
+
+(is-ok 10 "bad alist - item not pair"
+ '(wrong-type-arg ("guileassoc2pythondict"
+ "Wrong type argument in position ~A: ~S"
+ (2 "c")
+ #f))
+ (catch #t
+ (lambda () (python-apply '("t.scripts.t4apply" return_args)
+ '("a")
+ '((#:b . 3) "c" (#:d . 5))))
+ (lambda (key . args) (list key args))))
+
+(is-ok 11 "bad alist - key not string"
+ '(wrong-type-arg ("guileassoc2pythondict"
+ "Wrong type argument in position ~A: ~S"
+ (2 4)
+ #f))
+ (catch #t
+ (lambda () (python-apply '("t.scripts.t4apply" return_args)
+ '("a")
+ '((#:b . 3) (4 . "c") ("d" . 5))))
+ (lambda (key . args) (list key args))))
+
+
+(is-ok 12 "bad alist - duplicate key"
+ '(misc-error ("guileassoc2pythondict"
+ "duplicate key (~S)"
+ (#:b)
+ #f))
+ (catch #t
+ (lambda () (python-apply '("t.scripts.t4apply" return_args)
+ '("a")
+ '((#:b . 3) (#:c . 4) (#:b . 5))))
+ (lambda (key . args) (list key args))))
+
+(like 13 "bad alist - inconvertible data"
+ "^\\(wrong-type-arg \\(\"guile2python\" \"Wrong type argument in position ~A: ~S\" \\(1 #<input: [^>]*>\\) #f\\)\\)$"
+ (catch #t
+ (lambda () (python-apply '("t.scripts.t4apply" return_args)
+ '("a")
+ `((#:b . 3)
+ (#:c . 4)
+ (#:d . ,(current-input-port)))))
+ (lambda (key . args) (object->string (list key args)))))
+
+; End of 06_guile2python.t