;;;; Copyright 2005 Juri Pakaste ;;;; ;;;; This file is part of Lukutoukka. ;;;; ;;;; Lukutoukka is free software; you can redistribute it and/or modify ;;;; it under the terms of the GNU General Public License as published by ;;;; the Free Software Foundation; either version 2 of the License, or ;;;; (at your option) any later version. ;;;; ;;;; Lukutoukka 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 General Public License for more details. ;;;; ;;;; You should have received a copy of the GNU General Public License ;;;; along with Lukutoukka; if not, write to the Free Software ;;;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA (define-module (plain-parser-test) #:use-module (lukutoukkalib parsers defs) #:use-module (lukutoukkalib parsers common) #:use-module (lukutoukkalib parsers plain) #:use-module (unit-test) #:use-module (oop goops) #:export (create-test-suite)) (define-class ()) ; various (define (make-string-parser str) (make #:port (open-input-string str))) (define-method (test-empty-string (test-case )) (let ((result '())) (parse-port (make-string-parser "") (lambda (s) (set! result (append result (list s))))) (assert-equal '() result))) (define-method (test-one-word (test-case )) (let ((words '())) (parse-port (make-string-parser "asdf") (lambda (word) (set! words (cons word words)))) (set! words (reverse! words)) (assert-equal '("asdf") words))) (define-method (test-two-words (test-case )) (let ((words '())) (parse-port (make-string-parser "foo bar") (lambda (word) (set! words (cons word words)))) (assert-equal '("foo" "bar") (reverse! words)))) (define-method (test-many-words (test-case )) (let ((words '())) (parse-port (make-string-parser "foo bar baz quux zappa") (lambda (word) (set! words (cons word words)))) (assert-equal '("foo" "bar" "baz" "quux" "zappa") (reverse! words)))) (define-method (test-two-spaces (test-case )) (assert-equal '("foo" "bar") (let ((words '())) (parse-port (make-string-parser "foo bar") (lambda (word) (set! words (cons word words)))) (reverse! words)))) (define-method (test-start-space (test-case )) (assert-equal '("foo" "bar") (let ((words '())) (parse-port (make-string-parser " foo bar") (lambda (word) (set! words (cons word words)))) (reverse! words)))) (define-method (test-end-space (test-case )) (assert-equal '("foo" "bar") (let ((words '())) (parse-port (make-string-parser "foo bar ") (lambda (word) (set! words (cons word words)))) (reverse! words)))) (define-method (test-newline (test-case )) (assert-equal '("foo" "bar") (let ((words '())) (parse-port (make-string-parser (string-append "foo" (string #\newline) "bar")) (lambda (word) (set! words (cons word words)))) (reverse! words)))) (define-method (test-newline-and-space (test-case )) (assert-equal '("foo" "bar") (let ((words '())) (parse-port (make-string-parser (string-append "foo " (string #\newline) "bar")) (lambda (word) (set! words (cons word words)))) (reverse! words)))) (define-method (test-two-newlines (test-case )) (assert-equal '("foo" "bar") (let ((words '())) (parse-port (make-string-parser (string-append "foo" (make-string 2 #\newline) "bar")) (lambda (word) (set! words (cons word words)))) (reverse! words)))) (define-method (test-carriage-return (test-case )) (assert-equal '("foo" "bar") (let ((words '())) (parse-port (make-string-parser (string-append "foo" (string #\return) "bar")) (lambda (word) (set! words (cons word words)))) (reverse! words)))) (define-method (test-dos-break (test-case )) (assert-equal '("foo" "bar") (let ((words '())) (parse-port (make-string-parser (string-append "foo" (string #\return #\newline) "bar")) (lambda (word) (set! words (cons word words)))) (reverse! words)))) (define (create-test-suite) (let ((suite (make #:name "plain-parser-test-suite"))) (add suite (make )) suite))