diff --git a/scribble-html-lib/scribble/html.rkt b/scribble-html-lib/scribble/html.rkt
index 1d4cefec..7d69f7c0 100644
--- a/scribble-html-lib/scribble/html.rkt
+++ b/scribble-html-lib/scribble/html.rkt
@@ -2,171 +2,3 @@
(require "html/main.rkt")
(provide (all-from-out "html/main.rkt"))
-
-(module test racket/base
-
- ;; Check that the HTML tags provided by scribble/html/html
- ;; and scribble/html/extra
- ;; match a master list of HTML tags (defined in this file)
- ;; Also check that `scribble/html/html` is disjoint from `racket/base`
-
- (require rackunit racket/set)
-
- (define (phase0-provides m) ; Symbol -> [Setof Symbol]
- (parameterize ([current-namespace (make-base-namespace)])
- (dynamic-require m #f)
- (let-values ([(e1* e2*) (module->exports m)])
- (for*/seteq ([export* (in-list (list e1* e2*))]
- [tag+exp (in-list export*)]
- #:when (or (not (car tag+exp)) (zero? (car tag+exp)))
- [exp (in-list (cdr tag+exp))])
- (car exp)))))
-
- (define (expected-disjoint m1 m2)
- (format "'~a' and '~a' should provide disjoint sets of identifiers" m1 m2))
-
- (define (expected-overlap m1 m2)
- (format "expected '~a' and '~a' to provide overlapping sets of identifiers" m1 m2))
-
- (define html-provides (phase0-provides 'scribble/html/html))
- (define extra-provides (phase0-provides 'scribble/html/extra))
- (define base-provides (phase0-provides 'racket/base))
-
- (check-pred set-empty?
- (set-intersect html-provides extra-provides)
- (expected-disjoint 'scribble/html/html 'scribble/html/extra))
-
- ;; note: 'racket' and 'scribble/html/html' both provide "link"
- (check-pred set-empty?
- (set-intersect html-provides base-provides)
- (expected-disjoint 'scribble/html/html 'racket/base))
-
- (check-pred positive?
- (set-count (set-intersect extra-provides base-provides))
- (expected-overlap 'scribble/html/extra 'racket/base))
-
- ;; From: https://html.spec.whatwg.org/multipage/#toc-semantics
- (define whatwg-master (list->seteq '(
- html
- head
- title
- base
- link
- meta
- style
- body
- article
- section
- nav
- aside
- h1 h2 h3 h4 h5 h6
- hgroup
- header
- footer
- address
- p
- hr
- pre
- blockquote
- ol
- ul
- li
- dl
- dt
- dd
- figure
- figcaption
- main
- div
- a
- em
- strong
- small
- s
- cite
- q
- dfn
- abbr
- ruby
- rt
- rp
- data
- time
- code
- var
- samp
- kbd
- sub sup
- i
- b
- u
- mark
- bdi
- bdo
- span
- br
- wbr
- ins
- del
- picture
- source
- img
- iframe
- embed
- object
- param
- video
- audio
- track
- map
- area
- table
- caption
- colgroup
- col
- tbody
- thead
- tfoot
- tr
- td
- th
- form
- label
- input
- button
- select
- datalist
- optgroup
- option
- textarea
- keygen
- output
- progress
- meter
- fieldset
- legend
- details
- summary
- menu
- menuitem
- dialog
- script
- noscript
- template
- slot
- canvas)))
-
- (let ([scribble-master (set-union html-provides extra-provides)])
- (check-true (subset? whatwg-master scribble-master))
- ;; Uncomment to debug scribble provides vs. whatwg master
- #;(void
- (displayln "checking MASTER vs SCRIBBLE")
- (for ([m (in-set whatwg-master)]
- #:when (not (set-member? scribble-master m)))
- (displayln m))
- (newline)
- (displayln "checking SCRIBBLE vs MASTER")
- (for ([s (in-set scribble-master)]
- #:when (not (set-member? whatwg-master s)))
- (displayln s))))
-)
diff --git a/scribble-test/tests/scribble/html.rkt b/scribble-test/tests/scribble/html.rkt
new file mode 100644
index 00000000..e791b38d
--- /dev/null
+++ b/scribble-test/tests/scribble/html.rkt
@@ -0,0 +1,166 @@
+#lang racket/base
+
+;; Check that the HTML tags provided by scribble/html/html
+;; and scribble/html/extra
+;; match a master list of HTML tags (defined in this file)
+;; Also check that `scribble/html/html` is disjoint from `racket/base`
+
+(require rackunit racket/set)
+
+(define (phase0-provides m) ; Symbol -> [Setof Symbol]
+ (parameterize ([current-namespace (make-base-namespace)])
+ (dynamic-require m #f)
+ (let-values ([(e1* e2*) (module->exports m)])
+ (for*/seteq ([export* (in-list (list e1* e2*))]
+ [tag+exp (in-list export*)]
+ #:when (or (not (car tag+exp)) (zero? (car tag+exp)))
+ [exp (in-list (cdr tag+exp))])
+ (car exp)))))
+
+(define (expected-disjoint m1 m2)
+ (format "'~a' and '~a' should provide disjoint sets of identifiers" m1 m2))
+
+(define (expected-overlap m1 m2)
+ (format "expected '~a' and '~a' to provide overlapping sets of identifiers" m1 m2))
+
+(define html-provides (phase0-provides 'scribble/html/html))
+(define extra-provides (phase0-provides 'scribble/html/extra))
+(define base-provides (phase0-provides 'racket/base))
+
+(check-pred set-empty?
+ (set-intersect html-provides extra-provides)
+ (expected-disjoint 'scribble/html/html 'scribble/html/extra))
+
+;; note: 'racket' and 'scribble/html/html' both provide "link"
+(check-pred set-empty?
+ (set-intersect html-provides base-provides)
+ (expected-disjoint 'scribble/html/html 'racket/base))
+
+(check-pred positive?
+ (set-count (set-intersect extra-provides base-provides))
+ (expected-overlap 'scribble/html/extra 'racket/base))
+
+;; From: https://html.spec.whatwg.org/multipage/#toc-semantics
+(define whatwg-master (list->seteq '(
+ html
+ head
+ title
+ base
+ link
+ meta
+ style
+ body
+ article
+ section
+ nav
+ aside
+ h1 h2 h3 h4 h5 h6
+ hgroup
+ header
+ footer
+ address
+ p
+ hr
+ pre
+ blockquote
+ ol
+ ul
+ li
+ dl
+ dt
+ dd
+ figure
+ figcaption
+ main
+ div
+ a
+ em
+ strong
+ small
+ s
+ cite
+ q
+ dfn
+ abbr
+ ruby
+ rt
+ rp
+ data
+ time
+ code
+ var
+ samp
+ kbd
+ sub sup
+ i
+ b
+ u
+ mark
+ bdi
+ bdo
+ span
+ br
+ wbr
+ ins
+ del
+ picture
+ source
+ img
+ iframe
+ embed
+ object
+ param
+ video
+ audio
+ track
+ map
+ area
+ table
+ caption
+ colgroup
+ col
+ tbody
+ thead
+ tfoot
+ tr
+ td
+ th
+ form
+ label
+ input
+ button
+ select
+ datalist
+ optgroup
+ option
+ textarea
+ keygen
+ output
+ progress
+ meter
+ fieldset
+ legend
+ details
+ summary
+ menu
+ menuitem
+ dialog
+ script
+ noscript
+ template
+ slot
+ canvas)))
+
+(let ([scribble-master (set-union html-provides extra-provides)])
+ (check-true (subset? whatwg-master scribble-master))
+ ;; Uncomment to debug scribble provides vs. whatwg master
+ #;(void
+ (displayln "checking MASTER vs SCRIBBLE")
+ (for ([m (in-set whatwg-master)]
+ #:when (not (set-member? scribble-master m)))
+ (displayln m))
+ (newline)
+ (displayln "checking SCRIBBLE vs MASTER")
+ (for ([s (in-set scribble-master)]
+ #:when (not (set-member? whatwg-master s)))
+ (displayln s))))