From a4eddbd63da1750efb619fcb94e65f1dba382f7b Mon Sep 17 00:00:00 2001 From: Ryan Culpepper Date: Sun, 1 Apr 2018 01:41:20 +0200 Subject: [PATCH] tests for wrap-expr/c, no build-time paths --- .../tests/syntax/contract/client1-1.rkt | 9 +++++++ .../tests/syntax/contract/client1-2.rkt | 9 +++++++ .../tests/syntax/contract/macro1.rkt | 22 ++++++++++++++++ .../tests/syntax/contract/macro2.rkt | 25 +++++++++++++++++++ .../syntax/contract/test-exprc-paths.rkt | 24 ++++++++++++++++++ 5 files changed, 89 insertions(+) create mode 100644 pkgs/racket-test/tests/syntax/contract/client1-1.rkt create mode 100644 pkgs/racket-test/tests/syntax/contract/client1-2.rkt create mode 100644 pkgs/racket-test/tests/syntax/contract/macro1.rkt create mode 100644 pkgs/racket-test/tests/syntax/contract/macro2.rkt create mode 100644 pkgs/racket-test/tests/syntax/contract/test-exprc-paths.rkt diff --git a/pkgs/racket-test/tests/syntax/contract/client1-1.rkt b/pkgs/racket-test/tests/syntax/contract/client1-1.rkt new file mode 100644 index 0000000000..1ac96e88f0 --- /dev/null +++ b/pkgs/racket-test/tests/syntax/contract/client1-1.rkt @@ -0,0 +1,9 @@ +#lang racket/base +(require tests/syntax/contract/macro1) +(provide go) + +(define (go) + (m 'not-a-string)) + +(module+ test + (void)) diff --git a/pkgs/racket-test/tests/syntax/contract/client1-2.rkt b/pkgs/racket-test/tests/syntax/contract/client1-2.rkt new file mode 100644 index 0000000000..59470850fe --- /dev/null +++ b/pkgs/racket-test/tests/syntax/contract/client1-2.rkt @@ -0,0 +1,9 @@ +#lang racket/base +(require "macro1.rkt") +(provide go) + +(define (go) + (m 'not-a-string)) + +(module+ test + (void)) diff --git a/pkgs/racket-test/tests/syntax/contract/macro1.rkt b/pkgs/racket-test/tests/syntax/contract/macro1.rkt new file mode 100644 index 0000000000..5ae6666367 --- /dev/null +++ b/pkgs/racket-test/tests/syntax/contract/macro1.rkt @@ -0,0 +1,22 @@ +#lang racket/base +(require (for-syntax racket/base syntax/contract)) +(provide m go) + +(define-syntax (m stx) + (syntax-case stx () + [(_ e1) + (with-syntax ([c1 (wrap-expr/c #'string? #'e1 + #:context stx + #:positive 'use-site + #:negative 'from-macro)]) + #'(string-length c1))])) + +(define (go) + (m 'not-a-string)) + +(module+ main + ;; (go) + (m 'also-not-a-string)) + +(module+ test + (void)) diff --git a/pkgs/racket-test/tests/syntax/contract/macro2.rkt b/pkgs/racket-test/tests/syntax/contract/macro2.rkt new file mode 100644 index 0000000000..75b17ba268 --- /dev/null +++ b/pkgs/racket-test/tests/syntax/contract/macro2.rkt @@ -0,0 +1,25 @@ +#lang racket/base +(provide go) + +(module defmac racket/base + (require (for-syntax racket/base syntax/contract)) + (provide m) + + (define-syntax (m stx) + (syntax-case stx () + [(_ e1) + (with-syntax ([c1 (wrap-expr/c #'string? #'e1 + #:context stx + #:positive 'use-site + #:negative 'from-macro)]) + #'(string-length c1))]))) +(require 'defmac) + +(define (go) + (m 'not-a-string)) + +(module+ main + (m 'also-not-a-string)) + +(module+ test + (void)) diff --git a/pkgs/racket-test/tests/syntax/contract/test-exprc-paths.rkt b/pkgs/racket-test/tests/syntax/contract/test-exprc-paths.rkt new file mode 100644 index 0000000000..eeaf208c56 --- /dev/null +++ b/pkgs/racket-test/tests/syntax/contract/test-exprc-paths.rkt @@ -0,0 +1,24 @@ +#lang racket/base +(require (for-syntax racket/base) + racket/file + rackunit + racket/runtime-path) + +;; Check that the compiled example files (macro*.rkt, client*.rkt) do +;; not contain absolute paths. In particular, we look for the fragment +;; "pkgs/racket-test". + +(define bad (path->bytes (build-path "pkgs" "racket-test"))) +(define bad-rx (regexp-quote bad)) + +(define-runtime-path compiled "compiled") +(define test-files + '("macro1_rkt.zo" "client1-1_rkt.zo" "client1-2_rkt.zo" "macro2_rkt.zo")) + +(for ([file0 test-files]) + (define file (build-path compiled file0)) + (cond [(file-exists? file) + (define code-b (file->bytes file)) + (check-false (regexp-match bad-rx code-b))] + [else + (printf "skipping ~e, does not exist\n" file)]))