Unbreak syntax/to-string tests

It's still unclear what the specification of syntax->string regarding whitespace
before closing parens should be. The implementation also has not dealt with
the issue. This PR therefore removes whitespace before closing parens from
the tests.

Once the discussion at
https://github.com/racket/racket/issues/3071#issuecomment-601984438
has reached a conclusion and implemented, we can add these tests back.
This commit is contained in:
Sorawee Porncharoenwase 2020-03-22 16:34:20 -07:00 committed by Sam Tobin-Hochstadt
parent d9c064d06c
commit 3c966bc297
2 changed files with 42 additions and 40 deletions

View File

@ -8,116 +8,114 @@
(check-equal? (syntax->string #'(a 'b #(a b c) c)) "a 'b #(a b c) c") (check-equal? (syntax->string #'(a 'b #(a b c) c)) "a 'b #(a b c) c")
(check-equal? (syntax->string #'((a b _ d))) "(a b _ d)") (check-equal? (syntax->string #'((a b _ d))) "(a b _ d)")
(check-equal? (syntax->string #'(( a b ))) "( a b )") (check-equal? (syntax->string #'(( a b))) "( a b)")
; we can't find where . is, default to earliest position ; we can't find where . is, default to earliest position
(check-equal? (syntax->string #'(( a b . c ))) "( a b . c )") (check-equal? (syntax->string #'(( a b . c))) "( a b . c)")
;; quote tests ;; quote tests
(check-equal? (syntax->string #'('a)) "'a") (check-equal? (syntax->string #'('a)) "'a")
(check-equal? (syntax->string #'(' a)) "' a") (check-equal? (syntax->string #'(' a)) "' a")
(check-equal? (syntax->string #'((quote a))) "(quote a)") (check-equal? (syntax->string #'((quote a))) "(quote a)")
(check-equal? (syntax->string #'(( quote a ))) "( quote a )") (check-equal? (syntax->string #'(( quote a))) "( quote a)")
(check-equal? (syntax->string #'((quote a b))) "(quote a b)") (check-equal? (syntax->string #'((quote a b))) "(quote a b)")
(check-equal? (syntax->string #'(( quote a b ))) "( quote a b )") (check-equal? (syntax->string #'(( quote a b))) "( quote a b)")
(check-equal? (syntax->string #'((quote . a))) "(quote . a)") (check-equal? (syntax->string #'((quote . a))) "(quote . a)")
(check-equal? (syntax->string #'(( quote . a ))) "( quote . a )") (check-equal? (syntax->string #'(( quote . a))) "( quote . a)")
(check-equal? (syntax->string #'((quote a b . c))) "(quote a b . c)") (check-equal? (syntax->string #'((quote a b . c))) "(quote a b . c)")
(check-equal? (syntax->string #'(( quote a b . c ))) "( quote a b . c )") (check-equal? (syntax->string #'(( quote a b . c))) "( quote a b . c)")
;; unquote tests ;; unquote tests
(check-equal? (syntax->string #'(,a)) ",a") (check-equal? (syntax->string #'(,a)) ",a")
(check-equal? (syntax->string #'(, a)) ", a") (check-equal? (syntax->string #'(, a)) ", a")
(check-equal? (syntax->string #'((unquote a))) "(unquote a)") (check-equal? (syntax->string #'((unquote a))) "(unquote a)")
(check-equal? (syntax->string #'(( unquote a ))) "( unquote a )") (check-equal? (syntax->string #'(( unquote a))) "( unquote a)")
(check-equal? (syntax->string #'((unquote a b))) "(unquote a b)") (check-equal? (syntax->string #'((unquote a b))) "(unquote a b)")
(check-equal? (syntax->string #'(( unquote a b ))) "( unquote a b )") (check-equal? (syntax->string #'(( unquote a b))) "( unquote a b)")
(check-equal? (syntax->string #'((unquote . a))) "(unquote . a)") (check-equal? (syntax->string #'((unquote . a))) "(unquote . a)")
(check-equal? (syntax->string #'(( unquote . a ))) "( unquote . a )") (check-equal? (syntax->string #'(( unquote . a))) "( unquote . a)")
(check-equal? (syntax->string #'((unquote a b . c))) "(unquote a b . c)") (check-equal? (syntax->string #'((unquote a b . c))) "(unquote a b . c)")
(check-equal? (syntax->string #'(( unquote a b . c ))) "( unquote a b . c )") (check-equal? (syntax->string #'(( unquote a b . c))) "( unquote a b . c)")
;; quasiquote tests ;; quasiquote tests
(check-equal? (syntax->string #'(`a)) "`a") (check-equal? (syntax->string #'(`a)) "`a")
(check-equal? (syntax->string #'(` a)) "` a") (check-equal? (syntax->string #'(` a)) "` a")
(check-equal? (syntax->string #'((quasiquote a))) "(quasiquote a)") (check-equal? (syntax->string #'((quasiquote a))) "(quasiquote a)")
(check-equal? (syntax->string #'(( quasiquote a ))) "( quasiquote a )") (check-equal? (syntax->string #'(( quasiquote a))) "( quasiquote a)")
(check-equal? (syntax->string #'((quasiquote a b))) "(quasiquote a b)") (check-equal? (syntax->string #'((quasiquote a b))) "(quasiquote a b)")
(check-equal? (syntax->string #'(( quasiquote a b ))) "( quasiquote a b )") (check-equal? (syntax->string #'(( quasiquote a b))) "( quasiquote a b)")
(check-equal? (syntax->string #'((quasiquote . a))) "(quasiquote . a)") (check-equal? (syntax->string #'((quasiquote . a))) "(quasiquote . a)")
(check-equal? (syntax->string #'(( quasiquote . a ))) "( quasiquote . a )") (check-equal? (syntax->string #'(( quasiquote . a))) "( quasiquote . a)")
(check-equal? (syntax->string #'((quasiquote a b . c))) "(quasiquote a b . c)") (check-equal? (syntax->string #'((quasiquote a b . c))) "(quasiquote a b . c)")
(check-equal? (syntax->string #'(( quasiquote a b . c ))) "( quasiquote a b . c )") (check-equal? (syntax->string #'(( quasiquote a b . c))) "( quasiquote a b . c)")
;; unquote-splicing tests ;; unquote-splicing tests
(check-equal? (syntax->string #'(,@a)) ",@a") (check-equal? (syntax->string #'(,@a)) ",@a")
(check-equal? (syntax->string #'(,@ a)) ",@ a") (check-equal? (syntax->string #'(,@ a)) ",@ a")
(check-equal? (syntax->string #'((unquote-splicing a))) "(unquote-splicing a)") (check-equal? (syntax->string #'((unquote-splicing a))) "(unquote-splicing a)")
(check-equal? (syntax->string #'(( unquote-splicing a ))) "( unquote-splicing a )") (check-equal? (syntax->string #'(( unquote-splicing a))) "( unquote-splicing a)")
(check-equal? (syntax->string #'((unquote-splicing a b))) "(unquote-splicing a b)") (check-equal? (syntax->string #'((unquote-splicing a b))) "(unquote-splicing a b)")
(check-equal? (syntax->string #'(( unquote-splicing a b ))) "( unquote-splicing a b )") (check-equal? (syntax->string #'(( unquote-splicing a b))) "( unquote-splicing a b)")
(check-equal? (syntax->string #'((unquote-splicing . a))) "(unquote-splicing . a)") (check-equal? (syntax->string #'((unquote-splicing . a))) "(unquote-splicing . a)")
(check-equal? (syntax->string #'(( unquote-splicing . a ))) "( unquote-splicing . a )") (check-equal? (syntax->string #'(( unquote-splicing . a))) "( unquote-splicing . a)")
(check-equal? (syntax->string #'((unquote-splicing a b . c))) "(unquote-splicing a b . c)") (check-equal? (syntax->string #'((unquote-splicing a b . c))) "(unquote-splicing a b . c)")
(check-equal? (syntax->string #'(( unquote-splicing a b . c ))) "( unquote-splicing a b . c )") (check-equal? (syntax->string #'(( unquote-splicing a b . c))) "( unquote-splicing a b . c)")
;; syntax tests ;; syntax tests
(check-equal? (syntax->string #'(#'a)) "#'a") (check-equal? (syntax->string #'(#'a)) "#'a")
(check-equal? (syntax->string #'(#' a)) "#' a") (check-equal? (syntax->string #'(#' a)) "#' a")
(check-equal? (syntax->string #'((syntax a))) "(syntax a)") (check-equal? (syntax->string #'((syntax a))) "(syntax a)")
(check-equal? (syntax->string #'(( syntax a ))) "( syntax a )") (check-equal? (syntax->string #'(( syntax a))) "( syntax a)")
(check-equal? (syntax->string #'((syntax a b))) "(syntax a b)") (check-equal? (syntax->string #'((syntax a b))) "(syntax a b)")
(check-equal? (syntax->string #'(( syntax a b ))) "( syntax a b )") (check-equal? (syntax->string #'(( syntax a b))) "( syntax a b)")
(check-equal? (syntax->string #'((syntax . a))) "(syntax . a)") (check-equal? (syntax->string #'((syntax . a))) "(syntax . a)")
(check-equal? (syntax->string #'(( syntax . a ))) "( syntax . a )") (check-equal? (syntax->string #'(( syntax . a))) "( syntax . a)")
(check-equal? (syntax->string #'((syntax a b . c))) "(syntax a b . c)") (check-equal? (syntax->string #'((syntax a b . c))) "(syntax a b . c)")
(check-equal? (syntax->string #'(( syntax a b . c ))) "( syntax a b . c )") (check-equal? (syntax->string #'(( syntax a b . c))) "( syntax a b . c)")
;; quasisyntax tests ;; quasisyntax tests
(check-equal? (syntax->string #'(#`a)) "#`a") (check-equal? (syntax->string #'(#`a)) "#`a")
(check-equal? (syntax->string #'(#` a)) "#` a") (check-equal? (syntax->string #'(#` a)) "#` a")
(check-equal? (syntax->string #'((quasisyntax a))) "(quasisyntax a)") (check-equal? (syntax->string #'((quasisyntax a))) "(quasisyntax a)")
(check-equal? (syntax->string #'(( quasisyntax a ))) "( quasisyntax a )") (check-equal? (syntax->string #'(( quasisyntax a))) "( quasisyntax a)")
(check-equal? (syntax->string #'((quasisyntax a b))) "(quasisyntax a b)") (check-equal? (syntax->string #'((quasisyntax a b))) "(quasisyntax a b)")
(check-equal? (syntax->string #'(( quasisyntax a b ))) "( quasisyntax a b )") (check-equal? (syntax->string #'(( quasisyntax a b))) "( quasisyntax a b)")
(check-equal? (syntax->string #'((quasisyntax . a))) "(quasisyntax . a)") (check-equal? (syntax->string #'((quasisyntax . a))) "(quasisyntax . a)")
(check-equal? (syntax->string #'(( quasisyntax . a ))) "( quasisyntax . a )") (check-equal? (syntax->string #'(( quasisyntax . a))) "( quasisyntax . a)")
(check-equal? (syntax->string #'((quasisyntax a b . c))) "(quasisyntax a b . c)") (check-equal? (syntax->string #'((quasisyntax a b . c))) "(quasisyntax a b . c)")
(check-equal? (syntax->string #'(( quasisyntax a b . c ))) "( quasisyntax a b . c )") (check-equal? (syntax->string #'(( quasisyntax a b . c))) "( quasisyntax a b . c)")
;; unsyntax tests ;; unsyntax tests
(check-equal? (syntax->string #'(#,a)) "#,a") (check-equal? (syntax->string #'(#,a)) "#,a")
(check-equal? (syntax->string #'(#, a)) "#, a") (check-equal? (syntax->string #'(#, a)) "#, a")
(check-equal? (syntax->string #'((unsyntax a))) "(unsyntax a)") (check-equal? (syntax->string #'((unsyntax a))) "(unsyntax a)")
(check-equal? (syntax->string #'(( unsyntax a ))) "( unsyntax a )") (check-equal? (syntax->string #'(( unsyntax a))) "( unsyntax a)")
(check-equal? (syntax->string #'((unsyntax a b))) "(unsyntax a b)") (check-equal? (syntax->string #'((unsyntax a b))) "(unsyntax a b)")
(check-equal? (syntax->string #'(( unsyntax a b ))) "( unsyntax a b )") (check-equal? (syntax->string #'(( unsyntax a b))) "( unsyntax a b)")
(check-equal? (syntax->string #'((unsyntax . a))) "(unsyntax . a)") (check-equal? (syntax->string #'((unsyntax . a))) "(unsyntax . a)")
(check-equal? (syntax->string #'(( unsyntax . a ))) "( unsyntax . a )") (check-equal? (syntax->string #'(( unsyntax . a))) "( unsyntax . a)")
(check-equal? (syntax->string #'((unsyntax a b . c))) "(unsyntax a b . c)") (check-equal? (syntax->string #'((unsyntax a b . c))) "(unsyntax a b . c)")
(check-equal? (syntax->string #'(( unsyntax a b . c ))) "( unsyntax a b . c )") (check-equal? (syntax->string #'(( unsyntax a b . c))) "( unsyntax a b . c)")
;; unsyntax tests ;; unsyntax tests
(check-equal? (syntax->string #'(#,a)) "#,a") (check-equal? (syntax->string #'(#,a)) "#,a")
(check-equal? (syntax->string #'(#, a)) "#, a") (check-equal? (syntax->string #'(#, a)) "#, a")
(check-equal? (syntax->string #'((unsyntax a))) "(unsyntax a)") (check-equal? (syntax->string #'((unsyntax a))) "(unsyntax a)")
(check-equal? (syntax->string #'(( unsyntax a ))) "( unsyntax a )") (check-equal? (syntax->string #'(( unsyntax a))) "( unsyntax a)")
(check-equal? (syntax->string #'((unsyntax a b))) "(unsyntax a b)") (check-equal? (syntax->string #'((unsyntax a b))) "(unsyntax a b)")
(check-equal? (syntax->string #'(( unsyntax a b ))) "( unsyntax a b )") (check-equal? (syntax->string #'(( unsyntax a b))) "( unsyntax a b)")
(check-equal? (syntax->string #'((unsyntax . a))) "(unsyntax . a)") (check-equal? (syntax->string #'((unsyntax . a))) "(unsyntax . a)")
(check-equal? (syntax->string #'(( unsyntax . a ))) "( unsyntax . a )") (check-equal? (syntax->string #'(( unsyntax . a))) "( unsyntax . a)")
(check-equal? (syntax->string #'((unsyntax a b . c))) "(unsyntax a b . c)") (check-equal? (syntax->string #'((unsyntax a b . c))) "(unsyntax a b . c)")
(check-equal? (syntax->string #'(( unsyntax a b . c ))) "( unsyntax a b . c )") (check-equal? (syntax->string #'(( unsyntax a b . c))) "( unsyntax a b . c)")
;; unsyntax-splicing tests ;; unsyntax-splicing tests
(check-equal? (syntax->string #'(#,@a)) "#,@a") (check-equal? (syntax->string #'(#,@a)) "#,@a")
(check-equal? (syntax->string #'(#,@ a)) "#,@ a") (check-equal? (syntax->string #'(#,@ a)) "#,@ a")
(check-equal? (syntax->string #'((unsyntax-splicing a))) "(unsyntax-splicing a)") (check-equal? (syntax->string #'((unsyntax-splicing a))) "(unsyntax-splicing a)")
(check-equal? (syntax->string #'(( unsyntax-splicing a ))) "( unsyntax-splicing a )") (check-equal? (syntax->string #'(( unsyntax-splicing a))) "( unsyntax-splicing a)")
(check-equal? (syntax->string #'((unsyntax-splicing a b))) "(unsyntax-splicing a b)") (check-equal? (syntax->string #'((unsyntax-splicing a b))) "(unsyntax-splicing a b)")
(check-equal? (syntax->string #'(( unsyntax-splicing a b ))) "( unsyntax-splicing a b )") (check-equal? (syntax->string #'(( unsyntax-splicing a b))) "( unsyntax-splicing a b)")
(check-equal? (syntax->string #'((unsyntax-splicing . a))) "(unsyntax-splicing . a)") (check-equal? (syntax->string #'((unsyntax-splicing . a))) "(unsyntax-splicing . a)")
(check-equal? (syntax->string #'(( unsyntax-splicing . a ))) "( unsyntax-splicing . a )") (check-equal? (syntax->string #'(( unsyntax-splicing . a))) "( unsyntax-splicing . a)")
(check-equal? (syntax->string #'((unsyntax-splicing a b . c))) "(unsyntax-splicing a b . c)") (check-equal? (syntax->string #'((unsyntax-splicing a b . c))) "(unsyntax-splicing a b . c)")
(check-equal? (syntax->string #'(( unsyntax-splicing a b . c ))) "( unsyntax-splicing a b . c )") (check-equal? (syntax->string #'(( unsyntax-splicing a b . c))) "( unsyntax-splicing a b . c)")

View File

@ -64,6 +64,10 @@
(hash-has-key? quotes-table (syntax-e (car (syntax-e c)))) (hash-has-key? quotes-table (syntax-e (car (syntax-e c))))
(eq? (syntax-span (car (syntax-e c))) (eq? (syntax-span (car (syntax-e c)))
(string-length (get-quote c)))) (string-length (get-quote c))))
;; The above conditions detect the shorthand form of quote and friends
;; The shorthand form will read, for instance, '<form>
;; as (quote <form>), so the result is guaranteed to be a syntax list
;; with exactly two elements in it.
(advance c init-line!) (advance c init-line!)
(printf (get-quote c)) (printf (get-quote c))
(set! col (+ col (string-length (get-quote c)))) (set! col (+ col (string-length (get-quote c))))