private/tests/tests.ss
(module tests mzscheme
  (require (planet "test.ss" ("schematics" "schemeunit.plt" 1)))
  (require (planet "graphical-ui.ss" ("schematics" "schemeunit.plt" 1)))
  (require "../../nationality.ss")

  (define philippines-tests
    (make-test-suite
     "Philippines tests"
     (make-test-case "singular adjective"
       (assert-equal? (nationality-adjective "Philippines" 'singular)
                      "Philippine"))
     (make-test-case "feminine singular adjective"
       (assert-equal? (nationality-adjective "Philippines" 'feminine/singular)
                      "Philippine"))
     (make-test-case "plural adjective"
       (assert-equal? (nationality-adjective "Philippines" 'plural)
                      "Philippine"))
     (make-test-case "singular noun"
       (assert-equal? (nationality-noun "Philippines" 'singular)
                      "Filipino"))
     (make-test-case "feminine singular noun"
       (assert-equal? (nationality-noun "Philippines" 'feminine/singular)
                      "Filipina"))
     (make-test-case "plural noun"
       (assert-equal? (nationality-noun "Philippines" 'plural)
                      "Filipinos"))
     ))

  ;; TODO: Antigua, Barbuda, Bosnia, Herzegovina, Saint Kitts, Nevis,
  ;;       Trinidad, Tobago, Serbia, Montenegro

  (define two-part-country-tests
    (make-test-suite
     "two-part country tests"
     ))

  (define (has-adjective-forall-types? location)
    (and (nationality-adjective location 'singular)
         (nationality-adjective location 'feminine/singular)
         (nationality-adjective location 'plural)
         #t))

  (define general-tests
    (make-test-suite
     "general tests"
     (make-test-case "every inhabited country has an adjective for all adjective types"
       (assert-true (andmap has-adjective-forall-types? inhabited-locations)))
     (make-test-case "uninhabited location is a location"
       (assert-true (location? "Antarctica")))
     (make-test-case "uninhabited location is uninhabited"
       (assert-false (location-inhabited? "Antarctica")))
     (make-test-case "inhabited location is a location"
       (assert-true (location? "France")))
     (make-test-case "inhabited location is not uninhabited"
       (assert-true (location-inhabited? "France")))
     (make-test-case "non-location cannot be tested for being inhabited"
       (assert-exn exn? (lambda ()
                          (location-inhabited? "Boobooland"))))
     ))

  (define all-tests
    (make-test-suite
     "all nationality.plt tests"
     philippines-tests
     two-part-country-tests
     general-tests
     ))

  (test/graphical-ui all-tests)

  (provide all-tests))