[py-configparser-cvs] r11 - trunk/tests

ehuelsmann at common-lisp.net ehuelsmann at common-lisp.net
Sat Jan 19 13:57:31 UTC 2008


Author: ehuelsmann
Date: Sat Jan 19 08:57:30 2008
New Revision: 11

Added:
   trunk/tests/
   trunk/tests/py-configparser-tests.asd
   trunk/tests/tests.lisp
Log:
Add tests.

Added: trunk/tests/py-configparser-tests.asd
==============================================================================
--- (empty file)
+++ trunk/tests/py-configparser-tests.asd	Sat Jan 19 08:57:30 2008
@@ -0,0 +1,17 @@
+
+
+(in-package #:cl-user)
+
+(defpackage #:py-configparser-tests-system
+    (:use #:cl #:asdf))
+
+(in-package #:py-configparser-tests-system)
+
+(defsystem py-configparser-tests
+    :name "py-configparser-tests"
+    :author "Erik Huelsmann"
+    :version "1.0-dev"
+    :license "MIT"
+    :description "Tests for 'Common Lisp implementation of the Python ConfigParser module'"
+    :depends-on (#:py-configparser)
+    :components ((:file "tests")))

Added: trunk/tests/tests.lisp
==============================================================================
--- (empty file)
+++ trunk/tests/tests.lisp	Sat Jan 19 08:57:30 2008
@@ -0,0 +1,304 @@
+
+(defpackage #:py-configparser-tests
+	(:use (#:cl #:py-configparser #:rt)))
+
+(in-package :py-configparser-tests)
+
+;; test 1
+;; should succeed
+(deftest basic.parser
+  (typep (with-input-from-string (s "[n]
+p=q
+z=%(p)s
+")
+  (read-stream (make-config) s)) 'config)
+  T)
+
+(deftest basic.get-option.1
+ (with-input-from-string (s "[n]
+p=q
+z=%(p)s
+ and some more
+")
+  (equal (get-option (read-stream (make-config) s) "n" "z")
+         "q and some more"))
+  T)
+
+(deftest basic.get-option.2
+ (with-input-from-string (s "[n]
+p=q
+delta=%(gamma)s
+z=%(p)s
+ and some more
+")
+  (equal (get-option (read-stream (make-config) s) "n" "delta" :defaults '(("gamma" . "the gamma value")))
+         "the gamma value"))
+  T)
+
+(deftest basic.get-option.3
+ (with-input-from-string (s "[n]
+p=15
+delta=%(gamma)s
+z=%(p)s
+ and some more
+")
+  (equal (get-option (read-stream (make-config) s) "n" "p" :type :number)
+         15))
+  T)
+
+(deftest basic.get-option.4
+ (with-input-from-string (s "[n]
+p=yes
+delta=%(gamma)s
+z=%(p)s
+ and some more
+")
+  (equal (get-option (read-stream (make-config) s) "n" "p" :type :boolean)
+         T))
+  T)
+
+(deftest basic.get-option.5
+ (with-input-from-string (s "[n]
+p=q
+delta=%(gamma)s
+z=%(p)s
+ and some more
+
+[DEFAULT]
+gamma=the gamma value
+")
+  (equal (get-option (read-stream (make-config) s) "n" "delta")
+         "the gamma value"))
+  T)
+
+
+(deftest basic.sections
+         (with-input-from-string (s "[n] post-section header gunk ignored
+p=q
+z=%(p)s
+")
+  (equal (sections (read-stream (make-config) s))
+         '("n")))
+         T)
+
+(deftest basic.comments-only
+         (typep (with-input-from-string (s "#comments only
+")
+                  (read-stream (make-config) s)) 'config)
+         T)
+
+(deftest basic.no-newline
+         (typep (with-input-from-string (s "#comments without trailing \#Newline")
+                  (read-stream (make-config) s))
+                'config)
+         T)
+
+(deftest basic.with-defaults
+         (equal (with-input-from-string (s "[DEFAULT]
+def-option = options without trailing newline")
+                  (get-option (read-stream (make-config) s) "DEFAULT" "def-option"))
+                "options without trailing newline")
+         T)
+
+;; newlines only
+(deftest basic.newlines-only
+         (with-input-from-string (s "
+
+
+")
+           (typep (get-option read-stream (make-config) s)
+                 'config))
+         T)
+
+;; options
+(deftest basic.options
+  (equal (with-input-from-string (s "[n]
+p=q
+z=%(p)s
+")
+           (options (read-stream (make-config) s) "n")) '("z" "p"))
+  T)
+
+;; items
+(deftest basic.items.1
+         (equal (with-inputfrom-string (s "[n]
+p=q
+z=%(p)s
+")
+           (items (read-stream (make-config) s) "n" :expand nil)) '(("z" "%(p)s") ("p" . "q")))
+  T)
+
+(deftest basic.items.2
+         (equal (with-input-from-string (s "[n]
+p=q
+z=%(p)s
+")
+           (items (read-stream (make-config) s) "n" :expand t)) '(("z" . "q") ("p" . "q")))
+  T)
+
+(deftest basic.items.3
+         (equal (with-input-from-string (s "[n]
+p=q
+delta=%(gamma)s
+z=%(p)s
+")
+           (items (read-stream (make-config) s) "n" :expand t
+                                                    :defaults '(("gamma" . "the gamma"))))
+           '(("z" . "q") ("delta" . "the gamma") ("p" . "q")))
+  T)
+
+
+;; sections
+(deftest basic.sections.1
+         (equal (with-input-from-string (s "[n]
+p=q
+z=%(p)s
+
+[v]
+[t]
+")
+           (sections (read-stream (make-config) s))) '("t" "v" "n"))
+  T)
+
+(deftest basic.sections.2
+         (equal (with-input-from-string (s "[n]
+p=q
+z=%(p)s
+
+[v]
+[t]
+
+[DEFAULT]
+p=t
+")
+           (sections (read-stream (make-config) s))) '("t" "v" "n"))
+  T)
+
+;; add-section
+(deftest basic.add-section
+         (with-input-from-string (s "[n]
+p=q
+z=%(p)s
+
+[t]
+
+")
+           (let ((c (read-stream (make-config) s)))
+             (unless (has-section-p c "v")
+               (add-section c "v")
+               (not (null (has-section-p c "v"))))))
+  T)
+
+;; set-option
+(deftest basic.set-option.1
+         (with-input-from-string (s "[n]
+p=q
+z=%(p)s
+
+[t]
+
+")
+           (let ((c (read-stream (make-config) s)))
+             (unless (has-option-p c "t" "b")
+               (set-option c "t" "b" "ok")
+               (equal (get-option c "t" "b") "ok"))))
+  T)
+
+(deftest basic.set-option.2
+         (with-input-from-string (s "[n]
+p=q
+z=%(p)s
+
+[t]
+
+")
+           (let ((c (read-stream (make-config) s)))
+             (set-option c "n" "p" "ok")
+             (equal (get-option c "n" "p") "ok")))
+  T)
+
+;; remove-option
+(deftest basic.remove-option
+         (with-input-from-string (s "[n]
+p=q
+z=%(p)s
+
+[t]
+
+")
+           (let ((c (read-stream (make-config) s)))
+             (when (has-option-p c "n" "p")
+               (remove-option c "n" "p")
+               (null (has-option-p c "n" "p")))))
+  T)
+
+;; remove-section
+(deftest basic.remove-section
+         (with-input-from-string (s "[n]
+p=q
+z=%(p)s
+
+[t]
+
+")
+           (let ((c (read-stream (make-config) s)))
+             (when (has-section-p c "t")
+               (remove-section c "t")
+               (null (has-section-p c "t")))))
+  T)
+
+
+
+;; now the tests that fail
+(deftest failures.no-header
+         (with-input-from-string (s "option-before = section
+[header]")
+           (handler-case
+               (progn
+                 (read-stream (make-config) s)
+                 nil)
+             (missing-section-header-error () T)))
+         T)
+
+(deftest failures.no-spaced-option-names
+         (with-input-from-string (s "[n]
+option with space = not allowed
+")
+           (handler-case
+               (progn
+                 (read-stream (make-config) s)
+                 nil)
+             (parsing-error () T)))
+         T)
+
+(deftest failures.recursion
+         (with-input-from-string (s "[n]
+p=%(z)s
+z=%(p)s
+")
+           (handler-case
+               (get-option (read-stream (make-config) s)
+                           "n" ;; section
+                           "p" ;; option
+                           :expand t)
+             (interpolation-depth-error () T)))
+         T)
+
+;; non-erroring non-parsing tests
+(deftest miscelaneous
+         (with-input-from-string (s "[n]
+p=%(__name__)s
+q=%(z)s
+z=hello
+")
+           (let ((p (read-stream (make-config) s)))
+             (unless (string= (get-option p "n" "p" :expand t) "n")
+               (error "Unexpected output"))
+             (unless (string= (get-option p "n" "q" :expand nil) "%(z)s")
+               (error "Unexpected output"))
+             (unless (string= (get-option p "n" "q" :expand t) "hello")
+               (error "Unexpected output"))
+             (unless (string= (get-option p "n" "z") "hello")
+               (error "Unexpected output"))
+             NIL))
+         NIL)
\ No newline at end of file



More information about the Py-configparser-cvs mailing list