minor reorganisation, use indents

pull/8/head
Subhomoy Haldar 2023-04-01 13:03:37 +01:00
parent a6b41f993a
commit c11299699f
5 changed files with 101 additions and 88 deletions

View File

@ -1,6 +1,6 @@
<!--suppress HtmlDeprecatedAttribute -->
<div align="center">
<img src="./img/whisker logo.svg" width="300" alt="whisker logo"/>
<img src="./docs/img/whisker logo.svg" width="300" alt="whisker logo"/>
[vlang.io](https://vlang.io) | [hungrybluedev](https://hungrybluedev.in/)
@ -191,7 +191,8 @@ Input
<ul>
<li>Home</li>
<li>About</li>
{{-logged_in}}<li>Log In</li>{{/logged_in}}{{+logged_in}}<li>Account: {{user.name}}</li>{{/logged_in}}
{{-logged_in}}<li>Log In</li>{{/logged_in}}
{{+logged_in}}<li>Account: {{user.name}}</li>{{/logged_in}}
</ul>
</nav>
@ -209,6 +210,7 @@ Output 1
<li>Home</li>
<li>About</li>
<li>Log In</li>
</ul>
</nav>
@ -228,6 +230,7 @@ Output 2
<ul>
<li>Home</li>
<li>About</li>
<li>Account: whisker</li>
</ul>
</nav>
@ -253,15 +256,15 @@ Partial: item
Data
----
{
"items": [
{
"name": "Banana",
"description": "Rich in potassium and naturally sweet."
},
{
"name": "Orange",
"description": "High in Vitamin C and very refreshing."
}
"items": [
{
"name": "Banana",
"description": "Rich in potassium and naturally sweet."
},
{
"name": "Orange",
"description": "High in Vitamin C and very refreshing."
}
]
}

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -10,9 +10,11 @@ fn test_simple_json_api() {
// 1. Delimiter swap to [ and ]
// 2. Raw tag usage using & prefix
// 3. If the data is a string, pass in the quotes too.
input := '{{=[ ]=}}{
"value": [&value]
}'
input := '
{{=[ ]=}}
{
"value": [&value]
}'.trim_indent()
test_data := [
DataModel({
'value': DataModel('42')
@ -28,18 +30,22 @@ fn test_simple_json_api() {
}),
]
expected_values := [
'{
"value": 42
}',
'{
"value": -147
}',
'{
"value": 0
}',
'{
"value": "Valid string value"
}',
'
{
"value": 42
}'.trim_indent(),
'
{
"value": -147
}'.trim_indent(),
'
{
"value": 0
}'.trim_indent(),
'
{
"value": "Valid string value"
}'.trim_indent(),
]
json_template := template.from_strings(input: input)!
for index, data in test_data {

View File

@ -28,43 +28,45 @@ fn test_double_curly_braces_indicate_sections() {
)!
data := datamodel.from_json('{
"name": "world"
}')!
"name": "world"
}')!
assert simple_template.run(data)! == 'Hello, world!'
}
fn test_changing_delimiters() {
input := "{{=[ ]=}}
module main
input := "
{{=[ ]=}}
module main
fn main() {
println('[greeting]')
}"
fn main() {
println('[greeting]')
}".trim_indent()
data := datamodel.from_json('{
"greeting": "Have a nice day!"
}')!
"greeting": "Have a nice day!"
}')!
delimiter_template := template.from_strings(input: input)!
assert delimiter_template.run(data)!.trim_space() == "
module main
module main
fn main() {
println('Have a nice day!')
}".trim_space()
fn main() {
println('Have a nice day!')
}".trim_indent()
}
fn test_boolean_positive_negative_sections() {
input := '
<nav>
<ul>
<li>Home</li>
<li>About</li>
{{-logged_in}}<li>Log In</li>{{/logged_in}}{{+logged_in}}<li>Account: {{user.name}}</li>{{/logged_in}}
</ul>
</nav>
'
<nav>
<ul>
<li>Home</li>
<li>About</li>
{{-logged_in}}<li>Log In</li>{{/logged_in}}
{{+logged_in}}<li>Account: {{user.name}}</li>{{/logged_in}}
</ul>
</nav>
'.trim_indent()
data_list := [
datamodel.from_json('{
"logged_in": false,
@ -79,23 +81,25 @@ fn test_boolean_positive_negative_sections() {
outputs := [
'
<nav>
<ul>
<li>Home</li>
<li>About</li>
<li>Log In</li>
</ul>
</nav>
',
<nav>
<ul>
<li>Home</li>
<li>About</li>
<li>Log In</li>
</ul>
</nav>
'.trim_indent(),
'
<nav>
<ul>
<li>Home</li>
<li>About</li>
<li>Account: whisker</li>
</ul>
</nav>
',
<nav>
<ul>
<li>Home</li>
<li>About</li>
<li>Account: whisker</li>
</ul>
</nav>
'.trim_indent(),
]
section_template := template.from_strings(input: input)!
@ -107,36 +111,34 @@ fn test_boolean_positive_negative_sections() {
fn test_maps_lists_partials() {
input := '
<ol>
{{*items}}
{{>item}}
{{/items}}
</ol>
'
<ol>
{{*items}}
{{>item}}
{{/items}}
</ol>'.trim_indent()
partials := {
'item': '<li>{{name}}: {{description}}</li>
'
'item': '<li>{{name}}: {{description}}</li>\n'
}
data := datamodel.from_json('{
"items": [
{
"name": "Banana",
"description": "Rich in potassium and naturally sweet."
},
{
"name": "Orange",
"description": "High in Vitamin C and very refreshing."
}
]
}')!
"items": [
{
"name": "Banana",
"description": "Rich in potassium and naturally sweet."
},
{
"name": "Orange",
"description": "High in Vitamin C and very refreshing."
}
]
}')!
advanced_template := template.from_strings(input: input, partials: partials)!
assert advanced_template.run(data)! == '
<ol>
<li>Banana: Rich in potassium and naturally sweet.</li>
<li>Orange: High in Vitamin C and very refreshing.</li>
</ol>
'
<ol>
<li>Banana: Rich in potassium and naturally sweet.</li>
<li>Orange: High in Vitamin C and very refreshing.</li>
</ol>
'.trim_indent()
}

View File

@ -33,6 +33,8 @@ fn main() {
validate_path('input', input)
partial_map := extract_partials(partials)
validate_path('data', data)
clean_data := datamodel.from_json(os.read_file(data) or { '{}' }) or {
eprintln('Could not obtain the data for the template from ${data}')
exit(1)
@ -71,7 +73,7 @@ fn validate_path(name string, path string) {
exit(1)
}
if !os.exists(path) {
eprint('Invalid path: ${path} does not exist.')
eprintln('Invalid path: ${path} does not exist.')
exit(1)
}
}