Add tests for for loop
Signed-off-by: Marcel Müller <neikos@neikos.email>
This commit is contained in:
parent
42e0056374
commit
dc8281036c
7 changed files with 178 additions and 2 deletions
|
|
@ -151,6 +151,7 @@ pub fn execute(vm: &VMInstructions, global_context: &Context) -> Result<String,
|
|||
};
|
||||
|
||||
ip = *new_ip;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
Instruction::GetIteratorEmptyOrJump {
|
||||
|
|
@ -166,6 +167,7 @@ pub fn execute(vm: &VMInstructions, global_context: &Context) -> Result<String,
|
|||
};
|
||||
|
||||
ip = *new_ip;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
Instruction::PopScope => scopes.pop_scope(),
|
||||
|
|
|
|||
|
|
@ -2,7 +2,9 @@
|
|||
source: tests/file_tests.rs
|
||||
expression: parsed
|
||||
info:
|
||||
input: "{{ for value in values -}}\n {{-= value }}\n{{- end }}\n{{ for value in no_values -}}\n {{-= value }}\n{{ else -}}\nNo Values >:C\n{{- end }}"
|
||||
context:
|
||||
no_values: []
|
||||
values:
|
||||
- one
|
||||
- two
|
||||
|
|
@ -37,5 +39,42 @@ ParsedTemplate {
|
|||
[End]"end" (49..52),
|
||||
[Whitespace]" " (52..53),
|
||||
[RightDelim]"}}" (53..55),
|
||||
[Whitespace]"\n" (55..56),
|
||||
[LeftDelim]"{{" (56..58),
|
||||
[Whitespace]" " (58..59),
|
||||
[For]"for" (59..62),
|
||||
[Whitespace]" " (62..63),
|
||||
[Ident]"value" (63..68),
|
||||
[Whitespace]" " (68..69),
|
||||
[In]"in" (69..71),
|
||||
[Whitespace]" " (71..72),
|
||||
[Ident]"no_values" (72..81),
|
||||
[Whitespace]" " (81..82),
|
||||
[TrimWhitespace]"-" (82..83),
|
||||
[RightDelim]"}}" (83..85),
|
||||
[Whitespace]"\n " (85..90),
|
||||
[LeftDelim]"{{" (90..92),
|
||||
[TrimWhitespace]"-" (92..93),
|
||||
[WantsOutput]"=" (93..94),
|
||||
[Whitespace]" " (94..95),
|
||||
[Ident]"value" (95..100),
|
||||
[Whitespace]" " (100..101),
|
||||
[RightDelim]"}}" (101..103),
|
||||
[Whitespace]"\n" (103..104),
|
||||
[LeftDelim]"{{" (104..106),
|
||||
[Whitespace]" " (106..107),
|
||||
[ConditionalElse]"else" (107..111),
|
||||
[Whitespace]" " (111..112),
|
||||
[TrimWhitespace]"-" (112..113),
|
||||
[RightDelim]"}}" (113..115),
|
||||
[Whitespace]"\n" (115..116),
|
||||
[Content]"No Values >:C" (116..129),
|
||||
[Whitespace]"\n" (129..130),
|
||||
[LeftDelim]"{{" (130..132),
|
||||
[TrimWhitespace]"-" (132..133),
|
||||
[Whitespace]" " (133..134),
|
||||
[End]"end" (134..137),
|
||||
[Whitespace]" " (137..138),
|
||||
[RightDelim]"}}" (138..140),
|
||||
],
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,9 @@
|
|||
source: tests/file_tests.rs
|
||||
expression: ast
|
||||
info:
|
||||
input: "{{ for value in values -}}\n {{-= value }}\n{{- end }}\n{{ for value in no_values -}}\n {{-= value }}\n{{ else -}}\nNo Values >:C\n{{- end }}"
|
||||
context:
|
||||
no_values: []
|
||||
values:
|
||||
- one
|
||||
- two
|
||||
|
|
@ -34,6 +36,50 @@ TemplateAst {
|
|||
],
|
||||
else_block: None,
|
||||
else_content: None,
|
||||
end_block: Block {
|
||||
prev_whitespace_content: None,
|
||||
expression: EndBlock,
|
||||
post_whitespace_content: Some(
|
||||
[Whitespace]"\n" (55..56),
|
||||
),
|
||||
},
|
||||
},
|
||||
ForChain {
|
||||
for_block: Block {
|
||||
prev_whitespace_content: None,
|
||||
expression: For {
|
||||
value_ident: [Ident]"value" (63..68),
|
||||
value_expression: VariableAccess(
|
||||
[Ident]"no_values" (72..81),
|
||||
),
|
||||
},
|
||||
post_whitespace_content: None,
|
||||
},
|
||||
content: [
|
||||
Interpolation {
|
||||
prev_whitespace_content: None,
|
||||
expression: VariableAccess(
|
||||
[Ident]"value" (95..100),
|
||||
),
|
||||
post_whitespace_content: Some(
|
||||
[Whitespace]"\n" (103..104),
|
||||
),
|
||||
},
|
||||
],
|
||||
else_block: Some(
|
||||
Block {
|
||||
prev_whitespace_content: None,
|
||||
expression: ForElse,
|
||||
post_whitespace_content: None,
|
||||
},
|
||||
),
|
||||
else_content: Some(
|
||||
[
|
||||
StaticContent(
|
||||
[Content]"No Values >:C" (116..129),
|
||||
),
|
||||
],
|
||||
),
|
||||
end_block: Block {
|
||||
prev_whitespace_content: None,
|
||||
expression: EndBlock,
|
||||
|
|
|
|||
|
|
@ -2,7 +2,9 @@
|
|||
source: tests/file_tests.rs
|
||||
expression: emit
|
||||
info:
|
||||
input: "{{ for value in values -}}\n {{-= value }}\n{{- end }}\n{{ for value in no_values -}}\n {{-= value }}\n{{ else -}}\nNo Values >:C\n{{- end }}"
|
||||
context:
|
||||
no_values: []
|
||||
values:
|
||||
- one
|
||||
- two
|
||||
|
|
@ -19,6 +21,15 @@ VMInstructions {
|
|||
LabelSlot {
|
||||
index: 2,
|
||||
}: 4,
|
||||
LabelSlot {
|
||||
index: 7,
|
||||
}: 22,
|
||||
LabelSlot {
|
||||
index: 8,
|
||||
}: 23,
|
||||
LabelSlot {
|
||||
index: 9,
|
||||
}: 16,
|
||||
},
|
||||
instructions: [
|
||||
PushScope {
|
||||
|
|
@ -83,5 +94,73 @@ VMInstructions {
|
|||
},
|
||||
},
|
||||
PopScope,
|
||||
AppendContent {
|
||||
content: "\n" (55..56),
|
||||
},
|
||||
PushScope {
|
||||
inherit_parent: true,
|
||||
},
|
||||
LoadFromContextToSlot {
|
||||
name: "no_values" (72..81),
|
||||
slot: VariableSlot {
|
||||
index: 11,
|
||||
},
|
||||
},
|
||||
CreateIteratorFromSlotToSlot {
|
||||
iterator_slot: VariableSlot {
|
||||
index: 12,
|
||||
},
|
||||
iterator_source_slot: VariableSlot {
|
||||
index: 11,
|
||||
},
|
||||
},
|
||||
GetIteratorEmptyOrJump {
|
||||
iterator_slot: VariableSlot {
|
||||
index: 12,
|
||||
},
|
||||
jump: LabelSlot {
|
||||
index: 7,
|
||||
},
|
||||
},
|
||||
AdvanceIteratorOrJump {
|
||||
iterator_slot: VariableSlot {
|
||||
index: 12,
|
||||
},
|
||||
value_slot: VariableSlot {
|
||||
index: 10,
|
||||
},
|
||||
jump: LabelSlot {
|
||||
index: 8,
|
||||
},
|
||||
},
|
||||
LoadFromSlotToContext {
|
||||
value_ident: "value" (63..68),
|
||||
value_slot: VariableSlot {
|
||||
index: 10,
|
||||
},
|
||||
},
|
||||
LoadFromContextToSlot {
|
||||
name: "value" (95..100),
|
||||
slot: VariableSlot {
|
||||
index: 13,
|
||||
},
|
||||
},
|
||||
EmitFromSlot {
|
||||
slot: VariableSlot {
|
||||
index: 13,
|
||||
},
|
||||
},
|
||||
AppendContent {
|
||||
content: "\n" (103..104),
|
||||
},
|
||||
Jump {
|
||||
jump: LabelSlot {
|
||||
index: 9,
|
||||
},
|
||||
},
|
||||
AppendContent {
|
||||
content: "No Values >:C" (116..129),
|
||||
},
|
||||
PopScope,
|
||||
],
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,10 +2,12 @@
|
|||
source: tests/file_tests.rs
|
||||
expression: output
|
||||
info:
|
||||
input: "{{ for value in values -}}\n {{-= value }}\n{{- end }}\n{{ for value in no_values -}}\n {{-= value }}\n{{ else -}}\nNo Values >:C\n{{- end }}"
|
||||
context:
|
||||
no_values: []
|
||||
values:
|
||||
- one
|
||||
- two
|
||||
input_file: tests/cases/simple_for.nomo
|
||||
---
|
||||
"one\ntwo\n"
|
||||
"one\ntwo\n\nNo Values >:C"
|
||||
|
|
|
|||
|
|
@ -1,7 +1,13 @@
|
|||
{
|
||||
"values": [ "one", "two" ]
|
||||
"values": [ "one", "two" ],
|
||||
"no_values": []
|
||||
}
|
||||
---
|
||||
{{ for value in values -}}
|
||||
{{-= value }}
|
||||
{{- end }}
|
||||
{{ for value in no_values -}}
|
||||
{{-= value }}
|
||||
{{ else -}}
|
||||
No Values >:C
|
||||
{{- end }}
|
||||
|
|
@ -4,6 +4,7 @@ use nomo::Context;
|
|||
|
||||
#[derive(serde::Serialize)]
|
||||
struct Info {
|
||||
input: String,
|
||||
context: HashMap<String, serde_json::Value>,
|
||||
}
|
||||
|
||||
|
|
@ -26,6 +27,7 @@ fn check_cases() {
|
|||
};
|
||||
|
||||
settings.set_info(&Info {
|
||||
input: input.to_string(),
|
||||
context: map.clone(),
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue