aboutsummaryrefslogtreecommitdiff
path: root/tests/test/cpp/cpp-environment.scm
blob: e59940dabd6987a7704a90d44a1a4d5b4ecb054b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
(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-into-if e (if-status active))))
    (test-equal "Enter works" '(active 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)))
  )