feat: add cJSON and SQLite amalgamation source files under deps/
Add the cJSON library (cJSON.c, cJSON.h) and SQLite amalgamation (sqlite3.c, sqlite3.h, sqlite3ext.h, shell.c) as vendored dependencies in the deps/ directory for use by the project build system.
This commit is contained in:
Vendored
+18
@@ -0,0 +1,18 @@
|
||||
import "base64" for Base64
|
||||
|
||||
System.print(Base64.encode("Hello")) // expect: SGVsbG8=
|
||||
System.print(Base64.encode("Hello, World!")) // expect: SGVsbG8sIFdvcmxkIQ==
|
||||
System.print(Base64.encode("")) // expect:
|
||||
System.print(Base64.encode("a")) // expect: YQ==
|
||||
System.print(Base64.encode("ab")) // expect: YWI=
|
||||
System.print(Base64.encode("abc")) // expect: YWJj
|
||||
|
||||
System.print(Base64.decode("SGVsbG8=")) // expect: Hello
|
||||
System.print(Base64.decode("SGVsbG8sIFdvcmxkIQ==")) // expect: Hello, World!
|
||||
System.print(Base64.decode("")) // expect:
|
||||
System.print(Base64.decode("YQ==")) // expect: a
|
||||
System.print(Base64.decode("YWI=")) // expect: ab
|
||||
System.print(Base64.decode("YWJj")) // expect: abc
|
||||
|
||||
System.print(Base64.encodeUrl("Hello+World/Test")) // expect: SGVsbG8rV29ybGQvVGVzdA
|
||||
System.print(Base64.decode(Base64.encode("Test roundtrip"))) // expect: Test roundtrip
|
||||
Vendored
+19
@@ -0,0 +1,19 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "crypto" for Crypto, Hash
|
||||
|
||||
var bytes = Crypto.randomBytes(16)
|
||||
System.print(bytes is List) // expect: true
|
||||
System.print(bytes.count) // expect: 16
|
||||
|
||||
var md5 = Hash.md5("hello")
|
||||
System.print(Hash.toHex(md5)) // expect: 5d41402abc4b2a76b9719d911017c592
|
||||
|
||||
var sha1 = Hash.sha1("hello")
|
||||
System.print(Hash.toHex(sha1)) // expect: aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
|
||||
|
||||
var sha256 = Hash.sha256("hello")
|
||||
System.print(Hash.toHex(sha256)) // expect: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
|
||||
|
||||
var emptyMd5 = Hash.md5("")
|
||||
System.print(Hash.toHex(emptyMd5)) // expect: d41d8cd98f00b204e9800998ecf8427e
|
||||
Vendored
+28
@@ -0,0 +1,28 @@
|
||||
import "datetime" for DateTime, Duration
|
||||
|
||||
var now = DateTime.now()
|
||||
System.print(now.year >= 2024) // expect: true
|
||||
System.print(now.month >= 1 && now.month <= 12) // expect: true
|
||||
System.print(now.day >= 1 && now.day <= 31) // expect: true
|
||||
System.print(now.hour >= 0 && now.hour <= 23) // expect: true
|
||||
System.print(now.minute >= 0 && now.minute <= 59) // expect: true
|
||||
System.print(now.second >= 0 && now.second <= 59) // expect: true
|
||||
|
||||
var ts = DateTime.fromTimestamp(0)
|
||||
System.print(ts.year) // expect: 1970
|
||||
|
||||
var d1 = Duration.fromSeconds(60)
|
||||
System.print(d1.seconds) // expect: 60
|
||||
System.print(d1.minutes) // expect: 1
|
||||
|
||||
var d2 = Duration.fromMinutes(2)
|
||||
System.print(d2.seconds) // expect: 120
|
||||
|
||||
var d3 = Duration.fromHours(1)
|
||||
System.print(d3.minutes) // expect: 60
|
||||
|
||||
var d4 = Duration.fromDays(1)
|
||||
System.print(d4.hours) // expect: 24
|
||||
|
||||
var sum = d1 + d2
|
||||
System.print(sum.seconds) // expect: 180
|
||||
Vendored
+8
@@ -0,0 +1,8 @@
|
||||
import "dns" for Dns
|
||||
|
||||
var addresses = Dns.lookup("localhost")
|
||||
System.print(addresses is List) // expect: true
|
||||
System.print(addresses.count > 0) // expect: true
|
||||
|
||||
var first = addresses[0]
|
||||
System.print(first == "127.0.0.1" || first == "::1") // expect: true
|
||||
Vendored
+19
@@ -0,0 +1,19 @@
|
||||
import "env" for Environment
|
||||
|
||||
Environment.set("WREN_TEST_VAR", "hello")
|
||||
System.print(Environment.get("WREN_TEST_VAR")) // expect: hello
|
||||
|
||||
Environment.set("WREN_TEST_VAR", "world")
|
||||
System.print(Environment.get("WREN_TEST_VAR")) // expect: world
|
||||
|
||||
Environment.delete("WREN_TEST_VAR")
|
||||
System.print(Environment.get("WREN_TEST_VAR") == null) // expect: true
|
||||
|
||||
System.print(Environment.get("THIS_VAR_DOES_NOT_EXIST") == null) // expect: true
|
||||
|
||||
var home = Environment.get("HOME")
|
||||
System.print(home != null) // expect: true
|
||||
|
||||
var all = Environment.all
|
||||
System.print(all is Map) // expect: true
|
||||
System.print(all.count > 0) // expect: true
|
||||
Vendored
+19
@@ -0,0 +1,19 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "http" for Url, Http, HttpResponse
|
||||
|
||||
var url1 = Url.parse("http://example.com/path")
|
||||
System.print(url1.scheme) // expect: http
|
||||
System.print(url1.host) // expect: example.com
|
||||
System.print(url1.port) // expect: 80
|
||||
System.print(url1.path) // expect: /path
|
||||
|
||||
var url2 = Url.parse("http://example.com:8080/test?foo=bar")
|
||||
System.print(url2.port) // expect: 8080
|
||||
System.print(url2.path) // expect: /test
|
||||
System.print(url2.query) // expect: foo=bar
|
||||
System.print(url2.fullPath) // expect: /test?foo=bar
|
||||
|
||||
var url3 = Url.parse("http://localhost/")
|
||||
System.print(url3.host) // expect: localhost
|
||||
System.print(url3.path) // expect: /
|
||||
Vendored
+13
@@ -0,0 +1,13 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "jinja" for Environment, DictLoader
|
||||
|
||||
var env = Environment.new(DictLoader.new({
|
||||
"simple": "before{# comment #}after",
|
||||
"multiword": "a{# this is a comment #}b",
|
||||
"with_tags": "x{# {{ ignored }} #}y"
|
||||
}))
|
||||
|
||||
System.print(env.getTemplate("simple").render({})) // expect: beforeafter
|
||||
System.print(env.getTemplate("multiword").render({})) // expect: ab
|
||||
System.print(env.getTemplate("with_tags").render({})) // expect: xy
|
||||
Vendored
+32
@@ -0,0 +1,32 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "jinja" for Environment, DictLoader
|
||||
|
||||
var env = Environment.new(DictLoader.new({
|
||||
"if_true": "{\% if show \%}visible{\% endif \%}",
|
||||
"if_false": "{\% if hide \%}visible{\% endif \%}",
|
||||
"if_else": "{\% if show \%}yes{\% else \%}no{\% endif \%}",
|
||||
"if_elif": "{\% if x == 1 \%}one{\% elif x == 2 \%}two{\% else \%}other{\% endif \%}",
|
||||
"compare": "{\% if a > b \%}greater{\% elif a < b \%}less{\% else \%}equal{\% endif \%}",
|
||||
"and_or": "{\% if a and b \%}both{\% elif a or b \%}one{\% else \%}none{\% endif \%}",
|
||||
"not": "{\% if not hidden \%}shown{\% endif \%}",
|
||||
"in_list": "{\% if item in items \%}found{\% else \%}missing{\% endif \%}",
|
||||
"is_even": "{\% if num is even \%}even{\% else \%}odd{\% endif \%}",
|
||||
"is_defined": "{\% if var is defined \%}defined{\% else \%}undefined{\% endif \%}",
|
||||
"is_not": "{\% if num is not odd \%}not odd{\% endif \%}",
|
||||
"ternary": "{{ \"yes\" if show else \"no\" }}"
|
||||
}))
|
||||
|
||||
System.print(env.getTemplate("if_true").render({"show": true})) // expect: visible
|
||||
System.print(env.getTemplate("if_false").render({"hide": false})) // expect:
|
||||
System.print(env.getTemplate("if_else").render({"show": false})) // expect: no
|
||||
System.print(env.getTemplate("if_elif").render({"x": 2})) // expect: two
|
||||
System.print(env.getTemplate("compare").render({"a": 5, "b": 3})) // expect: greater
|
||||
System.print(env.getTemplate("and_or").render({"a": true, "b": false})) // expect: one
|
||||
System.print(env.getTemplate("not").render({"hidden": false})) // expect: shown
|
||||
System.print(env.getTemplate("in_list").render({"item": "b", "items": ["a", "b", "c"]})) // expect: found
|
||||
System.print(env.getTemplate("is_even").render({"num": 4})) // expect: even
|
||||
System.print(env.getTemplate("is_defined").render({"var": "something"})) // expect: defined
|
||||
System.print(env.getTemplate("is_defined").render({})) // expect: undefined
|
||||
System.print(env.getTemplate("is_not").render({"num": 4})) // expect: not odd
|
||||
System.print(env.getTemplate("ternary").render({"show": true})) // expect: yes
|
||||
Vendored
+35
@@ -0,0 +1,35 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "jinja" for Environment, DictLoader
|
||||
|
||||
var env = Environment.new(DictLoader.new({
|
||||
"math": "{{ 2 + 3 * 4 }}",
|
||||
"paren": "{{ (2 + 3) * 4 }}",
|
||||
"mod": "{{ 10 \% 3 }}",
|
||||
"div": "{{ 10 / 4 }}",
|
||||
"neg": "{{ -5 }}",
|
||||
"compare_chain": "{\% if 1 < 2 and 2 < 3 \%}yes{\% endif \%}",
|
||||
"bool_and": "{{ true and false }}",
|
||||
"bool_or": "{{ true or false }}",
|
||||
"bool_not": "{{ not false }}",
|
||||
"string_in": "{\% if \"b\" in \"abc\" \%}found{\% endif \%}",
|
||||
"list_in": "{\% if 2 in [1, 2, 3] \%}found{\% endif \%}",
|
||||
"nested_access": "{{ data.items[0].name }}",
|
||||
"filter_chain": "{{ text|trim|upper }}",
|
||||
"method_call": "{{ items|join(\", \")|upper }}"
|
||||
}))
|
||||
|
||||
System.print(env.getTemplate("math").render({})) // expect: 14
|
||||
System.print(env.getTemplate("paren").render({})) // expect: 20
|
||||
System.print(env.getTemplate("mod").render({})) // expect: 1
|
||||
System.print(env.getTemplate("div").render({})) // expect: 2.5
|
||||
System.print(env.getTemplate("neg").render({})) // expect: -5
|
||||
System.print(env.getTemplate("compare_chain").render({})) // expect: yes
|
||||
System.print(env.getTemplate("bool_and").render({})) // expect: false
|
||||
System.print(env.getTemplate("bool_or").render({})) // expect: true
|
||||
System.print(env.getTemplate("bool_not").render({})) // expect: true
|
||||
System.print(env.getTemplate("string_in").render({})) // expect: found
|
||||
System.print(env.getTemplate("list_in").render({})) // expect: found
|
||||
System.print(env.getTemplate("nested_access").render({"data": {"items": [{"name": "test"}]}})) // expect: test
|
||||
System.print(env.getTemplate("filter_chain").render({"text": " hello "})) // expect: HELLO
|
||||
System.print(env.getTemplate("method_call").render({"items": ["a", "b", "c"]})) // expect: A, B, C
|
||||
Vendored
+63
@@ -0,0 +1,63 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "jinja" for Environment, DictLoader
|
||||
|
||||
var env = Environment.new(DictLoader.new({
|
||||
"upper": "{{ text|upper }}",
|
||||
"lower": "{{ text|lower }}",
|
||||
"capitalize": "{{ text|capitalize }}",
|
||||
"title": "{{ text|title }}",
|
||||
"trim": "[{{ text|trim }}]",
|
||||
"length": "{{ items|length }}",
|
||||
"first": "{{ items|first }}",
|
||||
"last": "{{ items|last }}",
|
||||
"reverse": "{{ items|reverse|join }}",
|
||||
"sort": "{{ items|sort|join(\", \") }}",
|
||||
"join": "{{ items|join(\"-\") }}",
|
||||
"default": "{{ missing|default(\"N/A\") }}",
|
||||
"int": "{{ num|int }}",
|
||||
"abs": "{{ num|abs }}",
|
||||
"round": "{{ num|round(2) }}",
|
||||
"replace": "{{ text|replace(\"o\", \"0\") }}",
|
||||
"truncate": "{{ text|truncate(10) }}",
|
||||
"batch": "{\% for row in items|batch(2) \%}[{\% for i in row \%}{{ i }}{\% endfor \%}]{\% endfor \%}",
|
||||
"unique": "{{ items|unique|join }}",
|
||||
"sum": "{{ nums|sum }}",
|
||||
"min": "{{ nums|min }}",
|
||||
"max": "{{ nums|max }}",
|
||||
"striptags": "{{ html|striptags }}",
|
||||
"urlencode": "{{ text|urlencode }}",
|
||||
"wordcount": "{{ text|wordcount }}",
|
||||
"center": "[{{ text|center(10) }}]",
|
||||
"indent": "{{ text|indent(4) }}",
|
||||
"tojson": "{{ data|tojson }}"
|
||||
}))
|
||||
|
||||
System.print(env.getTemplate("upper").render({"text": "hello"})) // expect: HELLO
|
||||
System.print(env.getTemplate("lower").render({"text": "HELLO"})) // expect: hello
|
||||
System.print(env.getTemplate("capitalize").render({"text": "hello world"})) // expect: Hello world
|
||||
System.print(env.getTemplate("title").render({"text": "hello world"})) // expect: Hello World
|
||||
System.print(env.getTemplate("trim").render({"text": " hi "})) // expect: [hi]
|
||||
System.print(env.getTemplate("length").render({"items": [1, 2, 3]})) // expect: 3
|
||||
System.print(env.getTemplate("first").render({"items": ["a", "b", "c"]})) // expect: a
|
||||
System.print(env.getTemplate("last").render({"items": ["a", "b", "c"]})) // expect: c
|
||||
System.print(env.getTemplate("reverse").render({"items": ["a", "b", "c"]})) // expect: cba
|
||||
System.print(env.getTemplate("sort").render({"items": ["c", "a", "b"]})) // expect: a, b, c
|
||||
System.print(env.getTemplate("join").render({"items": ["a", "b", "c"]})) // expect: a-b-c
|
||||
System.print(env.getTemplate("default").render({})) // expect: N/A
|
||||
System.print(env.getTemplate("int").render({"num": 3.7})) // expect: 3
|
||||
System.print(env.getTemplate("abs").render({"num": -5})) // expect: 5
|
||||
System.print(env.getTemplate("round").render({"num": 3.14159})) // expect: 3.14
|
||||
System.print(env.getTemplate("replace").render({"text": "hello"})) // expect: hell0
|
||||
System.print(env.getTemplate("truncate").render({"text": "hello world this is long"})) // expect: hello...
|
||||
System.print(env.getTemplate("batch").render({"items": [1, 2, 3, 4]})) // expect: [12][34]
|
||||
System.print(env.getTemplate("unique").render({"items": ["a", "b", "a", "c"]})) // expect: abc
|
||||
System.print(env.getTemplate("sum").render({"nums": [1, 2, 3, 4]})) // expect: 10
|
||||
System.print(env.getTemplate("min").render({"nums": [3, 1, 4, 1, 5]})) // expect: 1
|
||||
System.print(env.getTemplate("max").render({"nums": [3, 1, 4, 1, 5]})) // expect: 5
|
||||
System.print(env.getTemplate("striptags").render({"html": "<p>text</p>"})) // expect: text
|
||||
System.print(env.getTemplate("urlencode").render({"text": "hello world"})) // expect: hello+world
|
||||
System.print(env.getTemplate("wordcount").render({"text": "one two three"})) // expect: 3
|
||||
System.print(env.getTemplate("center").render({"text": "hi"})) // expect: [ hi ]
|
||||
System.print(env.getTemplate("indent").render({"text": "line"})) // expect: line
|
||||
System.print(env.getTemplate("tojson").render({"data": {"a": 1}})) // expect: {"a": 1}
|
||||
Vendored
+14
@@ -0,0 +1,14 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "jinja" for Environment, DictLoader
|
||||
|
||||
var env = Environment.new(DictLoader.new({
|
||||
"header": "<header>{{ title }}</header>",
|
||||
"main": "{\% include \"header\" \%}content",
|
||||
"with_ctx": "{\% include \"header\" with context \%}",
|
||||
"without_ctx": "{\% include \"header\" without context \%}"
|
||||
}))
|
||||
|
||||
System.print(env.getTemplate("main").render({"title": "Hello"})) // expect: <header>Hello</header>content
|
||||
System.print(env.getTemplate("with_ctx").render({"title": "Test"})) // expect: <header>Test</header>
|
||||
System.print(env.getTemplate("without_ctx").render({"title": "Test"})) // expect: <header></header>
|
||||
Vendored
+22
@@ -0,0 +1,22 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "jinja" for Environment, DictLoader
|
||||
|
||||
var env = Environment.new(DictLoader.new({
|
||||
"base": "[{\% block content \%}BASE{\% endblock \%}]",
|
||||
"child": "{\% extends \"base\" \%}{\% block content \%}CHILD{\% endblock \%}",
|
||||
"multi_block_base": "A:{\% block a \%}a{\% endblock \%} B:{\% block b \%}b{\% endblock \%}",
|
||||
"multi_block_child": "{\% extends \"multi_block_base\" \%}{\% block a \%}A{\% endblock \%}",
|
||||
"grandparent": "[{\% block x \%}GP{\% endblock \%}]",
|
||||
"parent": "{\% extends \"grandparent\" \%}{\% block x \%}P{\% endblock \%}",
|
||||
"grandchild": "{\% extends \"parent\" \%}{\% block x \%}GC{\% endblock \%}",
|
||||
"super_base": "[{\% block s \%}BASE{\% endblock \%}]",
|
||||
"super_child": "{\% extends \"super_base\" \%}{\% block s \%}{{ super() }}+CHILD{\% endblock \%}"
|
||||
}))
|
||||
|
||||
System.print(env.getTemplate("base").render({})) // expect: [BASE]
|
||||
System.print(env.getTemplate("child").render({})) // expect: [CHILD]
|
||||
System.print(env.getTemplate("multi_block_base").render({})) // expect: A:a B:b
|
||||
System.print(env.getTemplate("multi_block_child").render({})) // expect: A:A B:b
|
||||
System.print(env.getTemplate("grandchild").render({})) // expect: [GC]
|
||||
System.print(env.getTemplate("super_child").render({})) // expect: [BASE+CHILD]
|
||||
Vendored
+31
@@ -0,0 +1,31 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "jinja" for Environment, DictLoader
|
||||
|
||||
var env = Environment.new(DictLoader.new({
|
||||
"basic": "{\% for item in items \%}{{ item }}{\% endfor \%}",
|
||||
"with_sep": "{\% for item in items \%}{{ item }}{\% if not loop.last \%}, {\% endif \%}{\% endfor \%}",
|
||||
"index": "{\% for item in items \%}{{ loop.index }}:{{ item }}{\% if not loop.last \%} {\% endif \%}{\% endfor \%}",
|
||||
"index0": "{\% for item in items \%}{{ loop.index0 }}:{{ item }}{\% if not loop.last \%} {\% endif \%}{\% endfor \%}",
|
||||
"first_last": "{\% for item in items \%}{\% if loop.first \%}[{\% endif \%}{{ item }}{\% if loop.last \%}]{\% endif \%}{\% endfor \%}",
|
||||
"length": "{\% for item in items \%}{{ loop.length }}{\% endfor \%}",
|
||||
"else_empty": "{\% for item in items \%}{{ item }}{\% else \%}empty{\% endfor \%}",
|
||||
"nested": "{\% for row in matrix \%}{\% for col in row \%}{{ col }}{\% endfor \%};{\% endfor \%}",
|
||||
"dict": "{\% for key, value in data \%}{{ key }}={{ value }}{\% if not loop.last \%} {\% endif \%}{\% endfor \%}",
|
||||
"range": "{\% for i in range(3) \%}{{ i }}{\% endfor \%}",
|
||||
"range_start": "{\% for i in range(1, 4) \%}{{ i }}{\% endfor \%}",
|
||||
"string": "{\% for c in text \%}{{ c }}-{\% endfor \%}"
|
||||
}))
|
||||
|
||||
System.print(env.getTemplate("basic").render({"items": ["a", "b", "c"]})) // expect: abc
|
||||
System.print(env.getTemplate("with_sep").render({"items": ["a", "b", "c"]})) // expect: a, b, c
|
||||
System.print(env.getTemplate("index").render({"items": ["a", "b"]})) // expect: 1:a 2:b
|
||||
System.print(env.getTemplate("index0").render({"items": ["a", "b"]})) // expect: 0:a 1:b
|
||||
System.print(env.getTemplate("first_last").render({"items": ["a", "b", "c"]})) // expect: [abc]
|
||||
System.print(env.getTemplate("length").render({"items": ["a", "b", "c"]})) // expect: 333
|
||||
System.print(env.getTemplate("else_empty").render({"items": []})) // expect: empty
|
||||
System.print(env.getTemplate("nested").render({"matrix": [[1, 2], [3, 4]]})) // expect: 12;34;
|
||||
System.print(env.getTemplate("dict").render({"data": {"b": 2}})) // expect: b=2
|
||||
System.print(env.getTemplate("range").render({})) // expect: 012
|
||||
System.print(env.getTemplate("range_start").render({})) // expect: 123
|
||||
System.print(env.getTemplate("string").render({"text": "hi"})) // expect: h-i-
|
||||
Vendored
+15
@@ -0,0 +1,15 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "jinja" for Environment, DictLoader
|
||||
|
||||
var env = Environment.new(DictLoader.new({
|
||||
"simple": "{\% macro greet(name) \%}Hello {{ name }}!{\% endmacro \%}{{ greet(\"World\") }}",
|
||||
"with_default": "{\% macro greet(name, greeting=\"Hi\") \%}{{ greeting }} {{ name }}!{\% endmacro \%}{{ greet(\"Bob\") }}",
|
||||
"multiple_calls": "{\% macro item(x) \%}[{{ x }}]{\% endmacro \%}{{ item(1) }}{{ item(2) }}{{ item(3) }}",
|
||||
"with_loop": "{\% macro items(list) \%}{\% for i in list \%}{{ i }}{\% endfor \%}{\% endmacro \%}{{ items([1, 2, 3]) }}"
|
||||
}))
|
||||
|
||||
System.print(env.getTemplate("simple").render({})) // expect: Hello World!
|
||||
System.print(env.getTemplate("with_default").render({})) // expect: Hi Bob!
|
||||
System.print(env.getTemplate("multiple_calls").render({})) // expect: [1][2][3]
|
||||
System.print(env.getTemplate("with_loop").render({})) // expect: 123
|
||||
Vendored
+11
@@ -0,0 +1,11 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "jinja" for Environment, DictLoader
|
||||
|
||||
var env = Environment.new(DictLoader.new({
|
||||
"raw_var": "{\% raw \%}{{ not_parsed }}{\% endraw \%}",
|
||||
"raw_block": "{\% raw \%}{\% if true \%}nope{\% endif \%}{\% endraw \%}"
|
||||
}))
|
||||
|
||||
System.print(env.getTemplate("raw_var").render({})) // expect: {{ not_parsed }}
|
||||
System.print(env.getTemplate("raw_block").render({})) // expect: {% if true %}nope{% endif %}
|
||||
Vendored
+15
@@ -0,0 +1,15 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "jinja" for Environment, DictLoader
|
||||
|
||||
var env = Environment.new(DictLoader.new({
|
||||
"set_simple": "{\% set x = 5 \%}{{ x }}",
|
||||
"set_expr": "{\% set y = 2 + 3 \%}{{ y }}",
|
||||
"set_from_var": "{\% set z = a + b \%}{{ z }}",
|
||||
"set_string": "{\% set msg = \"hello\" \%}{{ msg|upper }}"
|
||||
}))
|
||||
|
||||
System.print(env.getTemplate("set_simple").render({})) // expect: 5
|
||||
System.print(env.getTemplate("set_expr").render({})) // expect: 5
|
||||
System.print(env.getTemplate("set_from_var").render({"a": 10, "b": 20})) // expect: 30
|
||||
System.print(env.getTemplate("set_string").render({})) // expect: HELLO
|
||||
Vendored
+29
@@ -0,0 +1,29 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "jinja" for Environment, DictLoader
|
||||
|
||||
var env = Environment.new(DictLoader.new({
|
||||
"simple": "Hello {{ name }}!",
|
||||
"escaped": "{{ html }}",
|
||||
"safe": "{{ html|safe }}",
|
||||
"nested": "{{ user.name }} is {{ user.age }}",
|
||||
"subscript": "{{ items[0] }} and {{ items[1] }}",
|
||||
"literal_str": "{{ \"literal\" }}",
|
||||
"literal_num": "{{ 42 }}",
|
||||
"literal_bool": "{{ true }}",
|
||||
"literal_list": "{{ [1, 2, 3]|join(\", \") }}",
|
||||
"default": "{{ missing|default(\"fallback\") }}",
|
||||
"concat": "{{ a ~ b }}"
|
||||
}))
|
||||
|
||||
System.print(env.getTemplate("simple").render({"name": "World"})) // expect: Hello World!
|
||||
System.print(env.getTemplate("escaped").render({"html": "<b>bold</b>"})) // expect: <b>bold</b>
|
||||
System.print(env.getTemplate("safe").render({"html": "<b>bold</b>"})) // expect: <b>bold</b>
|
||||
System.print(env.getTemplate("nested").render({"user": {"name": "Alice", "age": 30}})) // expect: Alice is 30
|
||||
System.print(env.getTemplate("subscript").render({"items": ["first", "second", "third"]})) // expect: first and second
|
||||
System.print(env.getTemplate("literal_str").render({})) // expect: literal
|
||||
System.print(env.getTemplate("literal_num").render({})) // expect: 42
|
||||
System.print(env.getTemplate("literal_bool").render({})) // expect: true
|
||||
System.print(env.getTemplate("literal_list").render({})) // expect: 1, 2, 3
|
||||
System.print(env.getTemplate("default").render({})) // expect: fallback
|
||||
System.print(env.getTemplate("concat").render({"a": "Hello", "b": "World"})) // expect: HelloWorld
|
||||
Vendored
+15
@@ -0,0 +1,15 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "jinja" for Environment, DictLoader
|
||||
|
||||
var env = Environment.new(DictLoader.new({
|
||||
"trim_left": "x {{- y }}",
|
||||
"trim_right": "{{ y -}} x",
|
||||
"trim_both": "x {{- y -}} x",
|
||||
"block_trim": "x {\%- if true \%}y{\% endif -\%} x"
|
||||
}))
|
||||
|
||||
System.print(env.getTemplate("trim_left").render({"y": "Y"})) // expect: xY
|
||||
System.print(env.getTemplate("trim_right").render({"y": "Y"})) // expect: Yx
|
||||
System.print(env.getTemplate("trim_both").render({"y": "Y"})) // expect: xYx
|
||||
System.print(env.getTemplate("block_trim").render({})) // expect: xyx
|
||||
Vendored
+19
@@ -0,0 +1,19 @@
|
||||
import "json" for Json
|
||||
|
||||
var obj = Json.parse("{\"name\":\"test\",\"value\":42}")
|
||||
System.print(obj["name"]) // expect: test
|
||||
System.print(obj["value"]) // expect: 42
|
||||
|
||||
var arr = Json.parse("[1,2,3]")
|
||||
System.print(arr[0]) // expect: 1
|
||||
System.print(arr.count) // expect: 3
|
||||
|
||||
var nested = Json.parse("{\"list\":[1,2],\"obj\":{\"a\":\"b\"}}")
|
||||
System.print(nested["list"][1]) // expect: 2
|
||||
System.print(nested["obj"]["a"]) // expect: b
|
||||
|
||||
System.print(Json.parse("null") == null) // expect: true
|
||||
System.print(Json.parse("true")) // expect: true
|
||||
System.print(Json.parse("false")) // expect: false
|
||||
System.print(Json.parse("\"hello\"")) // expect: hello
|
||||
System.print(Json.parse("3.14")) // expect: 3.14
|
||||
Vendored
+22
@@ -0,0 +1,22 @@
|
||||
import "json" for Json
|
||||
|
||||
System.print(Json.stringify(null)) // expect: null
|
||||
System.print(Json.stringify(true)) // expect: true
|
||||
System.print(Json.stringify(false)) // expect: false
|
||||
System.print(Json.stringify(42)) // expect: 42
|
||||
System.print(Json.stringify(3.14)) // expect: 3.14
|
||||
System.print(Json.stringify("hello")) // expect: "hello"
|
||||
System.print(Json.stringify([1, 2, 3])) // expect: [1,2,3]
|
||||
System.print(Json.stringify({"a": 1})) // expect: {"a":1}
|
||||
|
||||
var obj = {"name": "test", "value": 42}
|
||||
var json = Json.stringify(obj)
|
||||
System.print(json.contains("\"name\"")) // expect: true
|
||||
System.print(json.contains("\"test\"")) // expect: true
|
||||
|
||||
var nested = {"list": [1, 2], "flag": true}
|
||||
var nestedJson = Json.stringify(nested)
|
||||
System.print(nestedJson.contains("[1,2]")) // expect: true
|
||||
System.print(nestedJson.contains("true")) // expect: true
|
||||
|
||||
System.print(Json.stringify("line\nbreak")) // expect: "line\nbreak"
|
||||
Vendored
+37
@@ -0,0 +1,37 @@
|
||||
import "math" for Math
|
||||
|
||||
System.print((Math.sin(0) - 0).abs < 0.0001) // expect: true
|
||||
System.print((Math.cos(0) - 1).abs < 0.0001) // expect: true
|
||||
System.print((Math.tan(0) - 0).abs < 0.0001) // expect: true
|
||||
|
||||
System.print((Math.sqrt(4) - 2).abs < 0.0001) // expect: true
|
||||
System.print((Math.sqrt(9) - 3).abs < 0.0001) // expect: true
|
||||
|
||||
System.print((Math.pow(2, 3) - 8).abs < 0.0001) // expect: true
|
||||
System.print((Math.pow(3, 2) - 9).abs < 0.0001) // expect: true
|
||||
|
||||
System.print((Math.log(Math.e) - 1).abs < 0.0001) // expect: true
|
||||
System.print((Math.exp(1) - Math.e).abs < 0.0001) // expect: true
|
||||
|
||||
System.print(Math.floor(3.7)) // expect: 3
|
||||
System.print(Math.ceil(3.2)) // expect: 4
|
||||
System.print(Math.round(3.5)) // expect: 4
|
||||
System.print(Math.round(3.4)) // expect: 3
|
||||
|
||||
System.print(Math.abs(-5)) // expect: 5
|
||||
System.print(Math.abs(5)) // expect: 5
|
||||
|
||||
System.print(Math.min(3, 7)) // expect: 3
|
||||
System.print(Math.max(3, 7)) // expect: 7
|
||||
System.print(Math.clamp(5, 0, 10)) // expect: 5
|
||||
System.print(Math.clamp(-5, 0, 10)) // expect: 0
|
||||
System.print(Math.clamp(15, 0, 10)) // expect: 10
|
||||
|
||||
System.print((Math.pi - 3.14159).abs < 0.001) // expect: true
|
||||
System.print((Math.e - 2.71828).abs < 0.001) // expect: true
|
||||
|
||||
System.print(Math.sign(5)) // expect: 1
|
||||
System.print(Math.sign(-5)) // expect: -1
|
||||
System.print(Math.sign(0)) // expect: 0
|
||||
|
||||
System.print(Math.lerp(0, 10, 0.5)) // expect: 5
|
||||
Vendored
+49
@@ -0,0 +1,49 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "regex" for Regex, Match
|
||||
|
||||
var r = Regex.new("hello")
|
||||
System.print(r.test("hello world")) // expect: true
|
||||
System.print(r.test("goodbye")) // expect: false
|
||||
|
||||
var r2 = Regex.new("h.llo")
|
||||
System.print(r2.test("hello")) // expect: true
|
||||
System.print(r2.test("hallo")) // expect: true
|
||||
|
||||
var r3 = Regex.new("a+")
|
||||
System.print(r3.test("aaa")) // expect: true
|
||||
System.print(r3.test("bbb")) // expect: false
|
||||
|
||||
var r4 = Regex.new("colou?r")
|
||||
System.print(r4.test("color")) // expect: true
|
||||
System.print(r4.test("colour")) // expect: true
|
||||
|
||||
var r5 = Regex.new("[a-z]+")
|
||||
System.print(r5.test("hello")) // expect: true
|
||||
System.print(r5.test("123")) // expect: false
|
||||
|
||||
var r6 = Regex.new("^hello")
|
||||
System.print(r6.test("hello world")) // expect: true
|
||||
System.print(r6.test("say hello")) // expect: false
|
||||
|
||||
var r7 = Regex.new("world$")
|
||||
System.print(r7.test("hello world")) // expect: true
|
||||
System.print(r7.test("world hello")) // expect: false
|
||||
|
||||
var r8 = Regex.new("\\d+")
|
||||
System.print(r8.test("123")) // expect: true
|
||||
System.print(r8.test("abc")) // expect: false
|
||||
|
||||
var r9 = Regex.new("hello", "i")
|
||||
System.print(r9.test("HELLO")) // expect: true
|
||||
|
||||
var r10 = Regex.new("a")
|
||||
System.print(r10.replace("banana", "o")) // expect: bonana
|
||||
System.print(r10.replaceAll("banana", "o")) // expect: bonono
|
||||
|
||||
var r11 = Regex.new(",")
|
||||
var parts = r11.split("a,b,c")
|
||||
System.print(parts.count) // expect: 3
|
||||
System.print(parts[0]) // expect: a
|
||||
System.print(parts[1]) // expect: b
|
||||
System.print(parts[2]) // expect: c
|
||||
Vendored
+10
@@ -0,0 +1,10 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "signal" for Signal
|
||||
|
||||
System.print(Signal.SIGINT) // expect: 2
|
||||
System.print(Signal.SIGTERM) // expect: 15
|
||||
System.print(Signal.SIGHUP) // expect: 1
|
||||
System.print(Signal.SIGQUIT) // expect: 3
|
||||
System.print(Signal.SIGUSR1) // expect: 10
|
||||
System.print(Signal.SIGUSR2) // expect: 12
|
||||
Vendored
+27
@@ -0,0 +1,27 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "sqlite" for Database
|
||||
|
||||
var db = Database.memory()
|
||||
System.print(db is Database) // expect: true
|
||||
|
||||
db.execute("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)")
|
||||
|
||||
db.execute("INSERT INTO users (name, age) VALUES (?, ?)", ["Alice", 30])
|
||||
System.print(db.lastInsertId) // expect: 1
|
||||
System.print(db.changes) // expect: 1
|
||||
|
||||
db.execute("INSERT INTO users (name, age) VALUES (?, ?)", ["Bob", 25])
|
||||
System.print(db.lastInsertId) // expect: 2
|
||||
|
||||
var rows = db.query("SELECT * FROM users ORDER BY id")
|
||||
System.print(rows.count) // expect: 2
|
||||
System.print(rows[0]["name"]) // expect: Alice
|
||||
System.print(rows[0]["age"]) // expect: 30
|
||||
System.print(rows[1]["name"]) // expect: Bob
|
||||
|
||||
var filtered = db.query("SELECT * FROM users WHERE age > ?", [26])
|
||||
System.print(filtered.count) // expect: 1
|
||||
System.print(filtered[0]["name"]) // expect: Alice
|
||||
|
||||
db.close()
|
||||
Vendored
+16
@@ -0,0 +1,16 @@
|
||||
// retoor <retoor@molodetz.nl>
|
||||
|
||||
import "subprocess" for Subprocess, ProcessResult
|
||||
|
||||
var result = Subprocess.run("echo hello")
|
||||
System.print(result is ProcessResult) // expect: true
|
||||
System.print(result.success) // expect: true
|
||||
System.print(result.exitCode) // expect: 0
|
||||
System.print(result.stdout.trim()) // expect: hello
|
||||
|
||||
var result2 = Subprocess.run(["/bin/echo", "world"])
|
||||
System.print(result2.stdout.trim()) // expect: world
|
||||
|
||||
var result3 = Subprocess.run("exit 42")
|
||||
System.print(result3.success) // expect: false
|
||||
System.print(result3.exitCode) // expect: 42
|
||||
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
import "websocket" for WebSocket
|
||||
|
||||
var accept = WebSocket.computeAcceptKey_("dGhlIHNhbXBsZSBub25jZQ==")
|
||||
System.print(accept) // expect: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
|
||||
|
||||
var accept2 = WebSocket.computeAcceptKey_("x3JJHMbDL1EzLkh9GBhXDw==")
|
||||
System.print(accept2) // expect: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
|
||||
Vendored
+34
@@ -0,0 +1,34 @@
|
||||
import "websocket" for WebSocketMessage
|
||||
|
||||
var text = WebSocketMessage.new_(1, [72, 101, 108, 108, 111], true)
|
||||
System.print(text.opcode) // expect: 1
|
||||
System.print(text.isText) // expect: true
|
||||
System.print(text.isBinary) // expect: false
|
||||
System.print(text.isClose) // expect: false
|
||||
System.print(text.isPing) // expect: false
|
||||
System.print(text.isPong) // expect: false
|
||||
System.print(text.text) // expect: Hello
|
||||
System.print(text.bytes) // expect: [72, 101, 108, 108, 111]
|
||||
|
||||
var binary = WebSocketMessage.new_(2, [1, 2, 3, 4], true)
|
||||
System.print(binary.opcode) // expect: 2
|
||||
System.print(binary.isText) // expect: false
|
||||
System.print(binary.isBinary) // expect: true
|
||||
System.print(binary.bytes) // expect: [1, 2, 3, 4]
|
||||
|
||||
var close = WebSocketMessage.new_(8, [3, 232], true)
|
||||
System.print(close.opcode) // expect: 8
|
||||
System.print(close.isClose) // expect: true
|
||||
System.print(close.closeCode) // expect: 1000
|
||||
|
||||
var closeWithReason = WebSocketMessage.new_(8, [3, 232, 98, 121, 101], true)
|
||||
System.print(closeWithReason.closeCode) // expect: 1000
|
||||
System.print(closeWithReason.closeReason) // expect: bye
|
||||
|
||||
var ping = WebSocketMessage.new_(9, [], true)
|
||||
System.print(ping.isPing) // expect: true
|
||||
System.print(ping.isPong) // expect: false
|
||||
|
||||
var pong = WebSocketMessage.new_(10, [], true)
|
||||
System.print(pong.isPing) // expect: false
|
||||
System.print(pong.isPong) // expect: true
|
||||
Vendored
+52
@@ -0,0 +1,52 @@
|
||||
import "websocket" for WebSocket, WebSocketServer
|
||||
import "scheduler" for Scheduler
|
||||
import "timer" for Timer
|
||||
|
||||
var testResults = []
|
||||
var port = 19876
|
||||
|
||||
Scheduler.add {
|
||||
var server = WebSocketServer.bind("127.0.0.1", port)
|
||||
var ws = server.accept()
|
||||
if (ws != null) {
|
||||
var msg = ws.receive()
|
||||
if (msg != null && msg.isText) {
|
||||
testResults.add("server:" + msg.text)
|
||||
ws.send("pong:" + msg.text)
|
||||
}
|
||||
msg = ws.receive()
|
||||
if (msg != null && msg.isBinary) {
|
||||
testResults.add("server_binary:" + msg.bytes.count.toString)
|
||||
ws.sendBinary(msg.bytes)
|
||||
}
|
||||
ws.close()
|
||||
}
|
||||
server.close()
|
||||
}
|
||||
|
||||
Timer.sleep(50)
|
||||
|
||||
Scheduler.add {
|
||||
var ws = WebSocket.connect("ws://127.0.0.1:%(port)")
|
||||
ws.send("ping")
|
||||
var msg = ws.receive()
|
||||
if (msg != null && msg.isText) {
|
||||
testResults.add("client:" + msg.text)
|
||||
}
|
||||
ws.sendBinary([1, 2, 3, 4, 5])
|
||||
msg = ws.receive()
|
||||
if (msg != null && msg.isBinary) {
|
||||
testResults.add("client_binary:" + msg.bytes.count.toString)
|
||||
}
|
||||
ws.close()
|
||||
}
|
||||
|
||||
Timer.sleep(200)
|
||||
|
||||
for (r in testResults) {
|
||||
System.print(r)
|
||||
}
|
||||
// expect: server:ping
|
||||
// expect: client:pong:ping
|
||||
// expect: server_binary:5
|
||||
// expect: client_binary:5
|
||||
Reference in New Issue
Block a user