summaryrefslogtreecommitdiff
path: root/dev/examples.el
diff options
context:
space:
mode:
Diffstat (limited to 'dev/examples.el')
-rw-r--r--dev/examples.el432
1 files changed, 432 insertions, 0 deletions
diff --git a/dev/examples.el b/dev/examples.el
new file mode 100644
index 0000000..66d4dcb
--- /dev/null
+++ b/dev/examples.el
@@ -0,0 +1,432 @@
+;; -*- lexical-binding: t; eval: (font-lock-add-keywords nil '(("defexamples\\|def-example-group\\| => " (0 'font-lock-keyword-face)))); -*-
+
+;; Only the first three examples per function are shown in the docs,
+;; so make those good.
+
+(require 's)
+(require 'assoc)
+
+(def-example-group "Tweak whitespace"
+ (defexamples s-trim
+ (s-trim "trim ") => "trim"
+ (s-trim " this") => "this"
+ (s-trim " only trims beg and end ") => "only trims beg and end")
+
+ (defexamples s-trim-left
+ (s-trim-left "trim ") => "trim "
+ (s-trim-left " this") => "this")
+
+ (defexamples s-trim-right
+ (s-trim-right "trim ") => "trim"
+ (s-trim-right " this") => " this")
+
+ (defexamples s-chomp
+ (s-chomp "no newlines\n") => "no newlines"
+ (s-chomp "no newlines\r\n") => "no newlines"
+ (s-chomp "some newlines\n\n") => "some newlines\n")
+
+ (defexamples s-collapse-whitespace
+ (s-collapse-whitespace "only one space please") => "only one space please"
+ (s-collapse-whitespace "collapse \n all \t sorts of \r whitespace") => "collapse all sorts of whitespace")
+
+ (defexamples s-word-wrap
+ (s-word-wrap 10 "This is too long") => "This is\ntoo long"
+ (s-word-wrap 10 "This is way way too long") => "This is\nway way\ntoo long"
+ (s-word-wrap 10 "It-wraps-words-but-does-not-break-them") => "It-wraps-words-but-does-not-break-them")
+
+ (defexamples s-center
+ (s-center 5 "a") => " a "
+ (s-center 5 "ab") => " ab "
+ (s-center 1 "abc") => "abc"
+ (s-center 6 "ab") => " ab ")
+
+ (defexamples s-pad-left
+ (s-pad-left 3 "0" "3") => "003"
+ (s-pad-left 3 "0" "23") => "023"
+ (s-pad-left 3 "0" "1234") => "1234")
+
+ (defexamples s-pad-right
+ (s-pad-right 3 "." "3") => "3.."
+ (s-pad-right 3 "." "23") => "23."
+ (s-pad-right 3 "." "1234") => "1234"))
+
+(def-example-group "To shorter string"
+ (defexamples s-truncate
+ (s-truncate 6 "This is too long") => "Thi..."
+ (s-truncate 16 "This is also too long") => "This is also ..."
+ (s-truncate 16 "But this is not!") => "But this is not!")
+
+ (defexamples s-left
+ (s-left 3 "lib/file.js") => "lib"
+ (s-left 3 "li") => "li")
+
+ (defexamples s-right
+ (s-right 3 "lib/file.js") => ".js"
+ (s-right 3 "li") => "li")
+
+ (defexamples s-chop-suffix
+ (s-chop-suffix "-test.js" "penguin-test.js") => "penguin"
+ (s-chop-suffix "\n" "no newlines\n") => "no newlines"
+ (s-chop-suffix "\n" "some newlines\n\n") => "some newlines\n")
+
+ (defexamples s-chop-suffixes
+ (s-chop-suffixes '("_test.js" "-test.js" "Test.js") "penguin-test.js") => "penguin"
+ (s-chop-suffixes '("\r" "\n") "penguin\r\n") => "penguin\r"
+ (s-chop-suffixes '("\n" "\r") "penguin\r\n") => "penguin")
+
+ (defexamples s-chop-prefix
+ (s-chop-prefix "/tmp" "/tmp/file.js") => "/file.js"
+ (s-chop-prefix "/tmp" "/tmp/tmp/file.js") => "/tmp/file.js")
+
+ (defexamples s-chop-prefixes
+ (s-chop-prefixes '("/tmp" "/my") "/tmp/my/file.js") => "/file.js"
+ (s-chop-prefixes '("/my" "/tmp") "/tmp/my/file.js") => "/my/file.js")
+
+ (defexamples s-shared-start
+ (s-shared-start "bar" "baz") => "ba"
+ (s-shared-start "foobar" "foo") => "foo"
+ (s-shared-start "bar" "foo") => ""
+ (s-shared-start "" "foo") => ""
+ (s-shared-start "foo" "foo") => "foo"
+ (s-shared-start "" "") => "")
+
+ (defexamples s-shared-end
+ (s-shared-end "bar" "var") => "ar"
+ (s-shared-end "foo" "foo") => "foo"
+ (s-shared-end "bar" "foo") => ""
+ (s-shared-end "" "foo") => ""
+ (s-shared-end "" "") => ""))
+
+(def-example-group "To longer string"
+ (defexamples s-repeat
+ (s-repeat 10 " ") => " "
+ (s-concat (s-repeat 8 "Na") " Batman!") => "NaNaNaNaNaNaNaNa Batman!")
+
+ (defexamples s-concat
+ (s-concat "abc" "def" "ghi") => "abcdefghi")
+
+ (defexamples s-prepend
+ (s-prepend "abc" "def") => "abcdef")
+
+ (defexamples s-append
+ (s-append "abc" "def") => "defabc")
+
+ (defexamples s-wrap
+ (s-wrap "[" "]" "foobar") => "[foobar]"
+ (s-wrap "(" "" "foobar") => "(foobar"
+ (s-wrap "" ")" "foobar") => "foobar)"))
+
+(def-example-group "To and from lists"
+ (defexamples s-lines
+ (s-lines "abc\ndef\nghi") => '("abc" "def" "ghi")
+ (s-lines "abc\rdef\rghi") => '("abc" "def" "ghi")
+ (s-lines "abc\r\ndef\r\nghi") => '("abc" "def" "ghi"))
+
+ (defexamples s-match
+ (s-match "^def" "abcdefg") => nil
+ (s-match "^abc" "abcdefg") => '("abc")
+ (s-match "^/.*/\\([a-z]+\\)\\.\\([a-z]+\\)" "/some/weird/file.html") => '("/some/weird/file.html" "file" "html")
+ (s-match "^/.*/\\([a-z]+\\)\\.\\([a-z]+\\)" "/some/weird/file.org") => '("/some/weird/file.org" "file" "org")
+ (s-match "^\\(abc\\)\\(def\\)?" "abcdef") => '("abcdef" "abc" "def")
+ (s-match "^\\(abc\\)\\(def\\)?" "abc") => '("abc" "abc")
+ (s-match "^\\(abc\\)\\(def\\)?\\(ghi\\)" "abcghi") => '("abcghi" "abc" nil "ghi")
+ (s-match "abc" "abcdef" 1) => nil
+ (s-match "abc" "abcdefabc" 2) => '("abc"))
+
+ (defexamples s-match-strings-all
+ (s-match-strings-all
+ "{\\([^}]+\\)}" "x is {x} and y is {y}") => '(("{x}" "x") ("{y}" "y"))
+ (s-match-strings-all "ab." "abXabY") => '(("abX") ("abY"))
+ (s-match-strings-all "\\<" "foo bar baz") => '(("") ("") ("")))
+
+ (defexamples s-matched-positions-all
+ (s-matched-positions-all "l+" "{{Hello}} World, {{Emacs}}!" 0) => '((4 . 6) (13 . 14))
+ (s-matched-positions-all "{{\\(.+?\\)}}" "{{Hello}} World, {{Emacs}}!" 0) => '((0 . 9) (17 . 26))
+ (s-matched-positions-all "{{\\(.+?\\)}}" "{{Hello}} World, {{Emacs}}!" 1) => '((2 . 7) (19 . 24))
+ (s-matched-positions-all "l" "{{Hello}} World, {{Emacs}}!" 0) => '((4 . 5) (5 . 6) (13 . 14))
+ (s-matched-positions-all "abc" "{{Hello}} World, {{Emacs}}!") => nil)
+
+ (defexamples s-slice-at
+ (s-slice-at "-" "abc") => '("abc")
+ (s-slice-at "-" "abc-def") => '("abc" "-def")
+ (s-slice-at "[\.#]" "abc.def.ghi#id") => '("abc" ".def" ".ghi" "#id")
+ (s-slice-at "-" "abc-def-") => '("abc" "-def" "-"))
+
+ (defexamples s-split
+ (s-split "|" "a|bc|12|3") => '("a" "bc" "12" "3")
+ (s-split ":" "a,c,d") => '("a,c,d")
+ (s-split "\n" "z\nefg\n") => '("z" "efg" "")
+ (s-split "\n" "z\nefg\n" t) => '("z" "efg")
+ (s-split "ö" "xyöözeföklmö") => '("xy" "" "zef" "klm" "")
+ (s-split "ö" "xyöözeföklmö" t) => '("xy" "zef" "klm"))
+
+ (defexamples s-split-up-to
+ (s-split-up-to "\\s-*-\\s-*" "Author - Track-number-one" 1) => '("Author" "Track-number-one")
+ (s-split-up-to "\\s-*-\\s-*" "Author - Track-number-one" 2) => '("Author" "Track" "number-one")
+ (s-split-up-to "|" "foo||bar|baz|qux" 3 t) => '("foo" "bar" "baz|qux")
+ (s-split-up-to "|" "foo||bar|baz|qux" 3) => '("foo" "" "bar" "baz|qux")
+ (s-split-up-to ":" "a,b,c" 1) => '("a,b,c")
+ (s-split-up-to ":" "a,b,c" 10) => '("a,b,c")
+ (s-split-up-to "\n" "z\nefg\n" 5) => '("z" "efg" "")
+ (s-split-up-to "\n" "z\nefg\n" 5 t) => '("z" "efg")
+ (s-split-up-to "|" "foo||bar|baz|qux" 10) => '("foo" "" "bar" "baz" "qux")
+ (s-split-up-to "|" "foo||bar|baz|qux" 10 t) => '("foo" "bar" "baz" "qux")
+ (s-split-up-to "|" "foo|bar|baz|" 2) => '("foo" "bar" "baz|")
+ (s-split-up-to "|" "foo|bar|baz|" 2 t) => '("foo" "bar" "baz|")
+ (s-split-up-to "|" "foo|bar|baz|qux|" 2) => '("foo" "bar" "baz|qux|"))
+
+ (defexamples s-join
+ (s-join "+" '("abc" "def" "ghi")) => "abc+def+ghi"
+ (s-join "\n" '("abc" "def" "ghi")) => "abc\ndef\nghi"))
+
+(def-example-group "Predicates"
+ (defexamples s-equals?
+ (s-equals? "abc" "ABC") => nil
+ (s-equals? "abc" "abc") => t)
+
+ (defexamples s-less?
+ (s-less? "abc" "abd") => t
+ (s-less? "abd" "abc") => nil
+ (s-less? "abc" "abc") => nil)
+
+ (defexamples s-matches?
+ (s-matches? "^[0-9]+$" "123") => t
+ (s-matches? "^[0-9]+$" "a123") => nil
+ (s-matches? "1" "1a" 1) => nil
+ (s-matches? "1" "1a1" 1) => t)
+
+ (defexamples s-blank?
+ (s-blank? "") => t
+ (s-blank? nil) => t
+ (s-blank? " ") => nil)
+
+ (defexamples s-present?
+ (s-present? "") => nil
+ (s-present? nil) => nil
+ (s-present? " ") => t)
+
+ (defexamples s-ends-with?
+ (s-ends-with? ".md" "readme.md") => t
+ (s-ends-with? ".MD" "readme.md") => nil
+ (s-ends-with? ".MD" "readme.md" t) => t
+ (s-ends-with? ".md" "md") => nil
+ (s-suffix? ".md" "readme.md") => t)
+
+ (defexamples s-starts-with?
+ (s-starts-with? "lib/" "lib/file.js") => t
+ (s-starts-with? "LIB/" "lib/file.js") => nil
+ (s-starts-with? "LIB/" "lib/file.js" t) => t
+ (s-starts-with? "lib/" "lib") => nil
+ (s-prefix? "lib/" "lib/file.js") => t)
+
+ (defexamples s-contains?
+ (s-contains? "file" "lib/file.js") => t
+ (s-contains? "nope" "lib/file.js") => nil
+ (s-contains? "^a" "it's not ^a regexp") => t
+ (s-contains? "FILE" "lib/file.js") => nil
+ (s-contains? "FILE" "lib/file.js" t) => t)
+
+ (defexamples s-lowercase?
+ (s-lowercase? "file") => t
+ (s-lowercase? "File") => nil
+ (s-lowercase? "filä") => t
+ (s-lowercase? "filÄ") => nil
+ (s-lowercase? "123?") => t)
+
+ (defexamples s-uppercase?
+ (s-uppercase? "HULK SMASH") => t
+ (s-uppercase? "Bruce no smash") => nil
+ (s-uppercase? "FöB") => nil
+ (s-uppercase? "FÖB") => t
+ (s-uppercase? "123?") => t)
+
+ (defexamples s-mixedcase?
+ (s-mixedcase? "HULK SMASH") => nil
+ (s-mixedcase? "Bruce no smash") => t
+ (s-mixedcase? "BRÜCE") => nil
+ (s-mixedcase? "BRüCE") => t
+ (s-mixedcase? "123?") => nil)
+
+ (defexamples s-capitalized?
+ (s-capitalized? "Capitalized") => t
+ (s-capitalized? "I am capitalized") => t
+ (s-capitalized? "I Am Titleized") => nil
+ (s-capitalized? "lower") => nil
+ (s-capitalized? "UPPER") => nil
+ (s-capitalized? "Привет") => t)
+
+ (defexamples s-numeric?
+ (s-numeric? "123") => t
+ (s-numeric? "onetwothree") => nil
+ (s-numeric? "7a") => nil
+ (s-numeric? "a89") => nil))
+
+(def-example-group "The misc bucket"
+ (defexamples s-replace
+ (s-replace "file" "nope" "lib/file.js") => "lib/nope.js"
+ (s-replace "^a" "\\1" "it's not ^a regexp") => "it's not \\1 regexp")
+
+ (defexamples s-replace-all
+ (s-replace-all '(("lib" . "test") ("file" . "file_test")) "lib/file.js") => "test/file_test.js"
+ (s-replace-all '(("lib" . "test") ("test" . "lib")) "lib/test.js") => "test/lib.js")
+
+ (defexamples s-downcase
+ (s-downcase "ABC") => "abc")
+
+ (defexamples s-upcase
+ (s-upcase "abc") => "ABC")
+
+ (defexamples s-capitalize
+ (s-capitalize "abc DEF") => "Abc def"
+ (s-capitalize "abc.DEF") => "Abc.def")
+
+ (defexamples s-titleize
+ (s-titleize "abc DEF") => "Abc Def"
+ (s-titleize "abc.DEF") => "Abc.Def")
+
+ (defexamples s-with
+ (s-with " hulk smash " s-trim s-upcase) => "HULK SMASH"
+ (s-with "My car is a Toyota" (s-replace "car" "name") (s-replace "a Toyota" "Bond") (s-append ", James Bond")) => "My name is Bond, James Bond"
+ (s-with "abc \ndef \nghi" s-lines (mapcar 's-trim) (s-join "-") s-reverse) => "ihg-fed-cba")
+
+ (defexamples s-index-of
+ (s-index-of "abc" "abcdef") => 0
+ (s-index-of "CDE" "abcdef" t) => 2
+ (s-index-of "n.t" "not a regexp") => nil)
+
+ (defexamples s-reverse
+ (s-reverse "abc") => "cba"
+ (s-reverse "ab xyz") => "zyx ba"
+ (s-reverse "") => ""
+ (s-reverse "résumé") => "émusér"
+ ;; Two combining marks on a single character
+ (s-reverse "Ęyǫgwędę́hte⁷") => "⁷ethę́dęwgǫyĘ")
+
+ (defexamples s-presence
+ (s-presence nil) => nil
+ (s-presence "") => nil
+ (s-presence "foo") => "foo")
+
+ (defexamples s-format
+ ;; One with an alist works
+ (s-format
+ "help ${name}! I'm ${malady}"
+ 'aget
+ '(("name" . "nic") ("malady" . "on fire")))
+ => "help nic! I'm on fire"
+
+ ;; One with a function works
+ (s-format "hello ${name}, nice day" (lambda (var-name) "nic"))
+ => "hello nic, nice day"
+
+ ;; One with a list works
+ (s-format "hello $0, nice $1" 'elt '("nic" "day"))
+ => "hello nic, nice day"
+
+ ;; Two with a hash-table works
+ (s-format
+ "help ${name}! I'm ${malady}"
+ 'gethash
+ #s(hash-table test equal data ("name" "nic" "malady" "on fire")))
+ => "help nic! I'm on fire"
+
+ ;; Replacing case has no effect on s-format
+ (let ((case-replace t))
+ (s-format "help ${NAME}!" 'aget '(("NAME" . "Nick"))))
+ => "help Nick!"
+
+ (let ((case-replace nil))
+ (s-format "help ${NAME}!" 'aget '(("NAME" . "Nick"))))
+ => "help Nick!"
+
+ (let ((case-replace nil))
+ (s-format "help ${name}!" 'aget '(("name" . "Nick"))))
+ => "help Nick!"
+
+ ;; What happens when we have literal slashes?
+ (s-format "$0" 'elt '("Hello\\nWorld"))
+ => "Hello\\nWorld"
+
+ ;; What happens when we don't have the elements? with hash...
+ (condition-case err
+ (s-format
+ "help ${name}! I'm ${malady}"
+ 'gethash
+ #s(hash-table test equal data ("name" "nic" )))
+ (s-format-resolve (car err)))
+ => 's-format-resolve)
+
+ (defexamples s-lex-format
+ ;; lexical stuff
+ (let ((x 1))
+ (s-lex-format "x is ${x}"))
+ => "x is 1"
+
+ (let ((str1 "this")
+ (str2 "that"))
+ (s-lex-format "${str1} and ${str2}"))
+ => "this and that"
+
+ ;; Have a litteral \ in the replacement
+ (let ((foo "Hello\\nWorld"))
+ (s-lex-format "${foo}"))
+ => "Hello\\nWorld"
+ )
+
+ (defexamples s-count-matches
+ (s-count-matches "a" "aba") => 2
+ (s-count-matches "a" "aba" 0 2) => 1
+ (s-count-matches "\\w\\{2\\}[0-9]+" "ab1bab2frobinator") => 2)
+
+ (defexamples s-wrap
+ (s-wrap "foo" "\"") => "\"foo\""
+ (s-wrap "foo" "(" ")") => "(foo)"
+ (s-wrap "foo" "bar") => "barfoobar"))
+
+(def-example-group "Pertaining to words"
+ (defexamples s-split-words
+ (s-split-words "under_score") => '("under" "score")
+ (s-split-words "some-dashed-words") => '("some" "dashed" "words")
+ (s-split-words "evenCamelCase") => '("even" "Camel" "Case")
+ (s-split-words "!map (fn list)") => '("map" "fn" "list")
+ (s-split-words "Привет, мир") => '("Привет" "мир")
+ (s-split-words "e é è e") => '("e" "é" "è" "e")
+ (s-split-words "MANYUpperCases") => '("MANY" "Upper" "Cases")
+ (s-split-words "Приве́т") => '("Приве́т")
+ (s-split-words "漢語") => '("漢語"))
+
+ (defexamples s-lower-camel-case
+ (s-lower-camel-case "some words") => "someWords"
+ (s-lower-camel-case "dashed-words") => "dashedWords"
+ (s-lower-camel-case "under_scored_words") => "underScoredWords")
+
+ (defexamples s-upper-camel-case
+ (s-upper-camel-case "some words") => "SomeWords"
+ (s-upper-camel-case "dashed-words") => "DashedWords"
+ (s-upper-camel-case "under_scored_words") => "UnderScoredWords")
+
+ (defexamples s-snake-case
+ (s-snake-case "some words") => "some_words"
+ (s-snake-case "dashed-words") => "dashed_words"
+ (s-snake-case "camelCasedWords") => "camel_cased_words")
+
+ (defexamples s-dashed-words
+ (s-dashed-words "some words") => "some-words"
+ (s-dashed-words "under_scored_words") => "under-scored-words"
+ (s-dashed-words "camelCasedWords") => "camel-cased-words")
+
+ (defexamples s-capitalized-words
+ (s-capitalized-words "some words") => "Some words"
+ (s-capitalized-words "under_scored_words") => "Under scored words"
+ (s-capitalized-words "camelCasedWords") => "Camel cased words")
+
+ (defexamples s-titleized-words
+ (s-titleized-words "some words") => "Some Words"
+ (s-titleized-words "under_scored_words") => "Under Scored Words"
+ (s-titleized-words "camelCasedWords") => "Camel Cased Words")
+
+ (defexamples s-word-initials
+ (s-word-initials "some words") => "sw"
+ (s-word-initials "under_scored_words") => "usw"
+ (s-word-initials "camelCasedWords") => "cCW"
+ (s-word-initials "dashed-words") => "dw"))