;;;; srcprop.test --- test Guile source properties -*- scheme -*- ;;;; ;;;; Copyright (C) 2003, 2006, 2009 Free Software Foundation, Inc. ;;;; ;;;; 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 3 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; if not, write to the Free Software ;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA (define-module (test-suite test-srcprop) :use-module (test-suite lib)) ;;; ;;; source-properties ;;; (with-test-prefix "source-properties" (pass-if "no props" (null? (source-properties (list 1 2 3)))) (read-enable 'positions) (let ((s (read (open-input-string "(1 . 2)")))) (pass-if "read properties" (not (null? (source-properties s)))))) ;;; ;;; set-source-property! ;;; (with-test-prefix "set-source-property!" (read-enable 'positions) (pass-if "setting the breakpoint property works" (let ((s (read (open-input-string "(+ 3 4)")))) (throw 'unresolved) (set-source-property! s 'breakpoint #t) (let ((current-trap-opts (evaluator-traps-interface)) (current-debug-opts (debug-options-interface)) (trap-called #f)) (trap-set! enter-frame-handler (lambda _ (set! trap-called #t))) (trap-enable 'traps) (debug-enable 'debug) (debug-enable 'breakpoints) (with-traps (lambda () (primitive-eval s))) (evaluator-traps-interface current-trap-opts) (debug-options-interface current-debug-opts) trap-called)))) ;;; ;;; set-source-properties! ;;; (with-test-prefix "set-source-properties!" (read-enable 'positions) (pass-if "setting the breakpoint property works" (let ((s (read (open-input-string "(+ 3 4)")))) (throw 'unresolved) (set-source-properties! s '((breakpoint #t))) (let ((current-trap-opts (evaluator-traps-interface)) (current-debug-opts (debug-options-interface)) (trap-called #f)) (trap-set! enter-frame-handler (lambda _ (set! trap-called #t))) (trap-enable 'traps) (debug-enable 'debug) (debug-enable 'breakpoints) (with-traps (lambda () (primitive-eval s))) (evaluator-traps-interface current-trap-opts) (debug-options-interface current-debug-opts) trap-called))) (let ((s (read (open-input-string "(1 . 2)")))) (with-test-prefix "copied props" (pass-if "visible to source-property" (let ((t (cons 3 4))) (set-source-properties! t (source-properties s)) (number? (source-property t 'line)))) (pass-if "visible to source-properties" (let ((t (cons 3 4))) (set-source-properties! t (source-properties s)) (not (null? (source-properties t))))))))