(define-module (test cpp cpp-environmunt) :use-module (srfi srfi-64) :use-module (srfi srfi-88) :use-module (c cpp-environment) :use-module ((c lex2) :select (lex)) :use-module (c cpp-environment object-like-macro) ) (let ((e (make-environment))) (test-equal '(outside) (cpp-if-status e)) (let ((e* (enter-active-if e))) (test-equal "Enter works" '(active-if outside) (cpp-if-status e*)) (test-equal "Original object remainins unmodified" '(outside) (cpp-if-status e)))) (define cpp-file-stack (@@ (c cpp-environment) cpp-file-stack)) (let ((e (make-environment))) (test-equal "Default file stack" '(("*outside*" . 1)) (cpp-file-stack e)) (let ((e* (enter-file e "test.c"))) (test-equal "File stack after entering file" '(("test.c" . 1) ("*outside*" . 1)) (cpp-file-stack e*)) (let ((e** (bump-line e*))) (test-equal 2 (current-line e**))))) (let ((e (make-environment))) (let ((e* (add-identifier e "key" (object-like-macro identifier: "key" body: (lex "value"))))) (let ((result (get-identifier e* "key"))) (test-assert (cpp-macro? result)) (test-equal (lex "value") (macro-body result))))) (let ((e (make-environment))) (let ((result (get-identifier e "key"))) (test-assert "Missing identifier returns #f" (not result))) )