File: normalize_test.cljc

package info (click to toggle)
lambdaisland-uri-clojure 1.13.95-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 240 kB
  • sloc: xml: 88; sh: 28; makefile: 12
file content (50 lines) | stat: -rw-r--r-- 1,990 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
(ns lambdaisland.uri.normalize-test
  (:require [lambdaisland.uri :as uri]
            [lambdaisland.uri.normalize :as n]
            [clojure.test :refer [deftest testing is are]]))

(deftest normalize-test
  (are [x y] (= (-> x uri/parse n/normalize str) y)
    "http://example.com/a b c"     "http://example.com/a%20b%20c"
    "http://example.com/a%20b%20c" "http://example.com/a%20b%20c"
    "/𝍖"                          "/%F0%9D%8D%96"
    "http://foo.bar/?x=%20" "http://foo.bar/?x=%20"
    "https://example.com?text=You are welcome 🙂" "https://example.com?text=You%20are%20welcome%20%F0%9F%99%82" )

  (are [x y] (= (-> x n/normalize str) y)
    (uri/map->URI {:query "x=y"}) "?x=y"
    (uri/map->URI {:query "x=?y#"}) "?x=?y%23"
    (uri/map->URI {:query "foo=bar"}) "?foo=bar"
    (uri/map->URI {:query "foo=b%61r"}) "?foo=bar"
    (uri/map->URI {:query "foo=bar%3Dbaz"}) "?foo=bar%3Dbaz"
    (uri/map->URI {:query "foo=%20%2B%26xxx%3D123"}) "?foo=%20%2B%26xxx%3D123"
    (uri/map->URI {:query "text=You are welcome 🙂"}) "?text=You%20are%20welcome%20%F0%9F%99%82"
    ))

(deftest char-seq-test
  (let [long-string (->> "s"
                         ;; Long enough to trigger StackOverflow in non-tail recursive cases.
                         (repeat 5000)
                         (apply str))
        long-string-len (count long-string)
        cs (n/char-seq long-string)]
    (is (= long-string-len (count cs)))
    (is (every? #{"s"} cs))))

(deftest normalize-path-test
  (are [x y] (= (n/normalize-path x) y)
    "/abc" "/abc"
    "𝍖" "%F0%9D%8D%96"))

(deftest percent-encode-test
  (are [class comp result] (= (n/percent-encode comp class) result)
    :alpha "abcAbc" "abcAbc"
    :alpha "abc123" "abc%31%32%33"
    :path  "abc/123" "abc/123"
    :path  "abc/123:/#" "abc/123:/%23"
    :path  "𝍖" "%F0%9D%8D%96"))

(deftest percent-decode-test
  (are [in out] (= (n/percent-decode in) out)
    "%61%62%63" "abc"
    "%F0%9F%99%88%F0%9F%99%89" "🙈🙉"))