Skip to content
This repository has been archived by the owner on Sep 22, 2019. It is now read-only.

Commit

Permalink
cleaned up logs and updated tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Southclaws committed Jan 8, 2019
1 parent 736b8ec commit 4378044
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 29 deletions.
30 changes: 5 additions & 25 deletions src/plugin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ impl Templates {

pub fn render_template(&mut self, amx: &AMX, params: *mut Cell) -> AmxResult<Cell> {
let varargc = args_count!(params) - 3;
let pairs = match varargc > 0 && varargc % 3 == 0 {
let pairs = match varargc == 0 || varargc % 3 == 0 {
true => varargc / 3,
false => {
log!("Invalid number of arguments passed to RenderTemplate");
Expand All @@ -92,16 +92,9 @@ impl Templates {
let output_string = amx.get_address(output_string_amx)?;
expand_args!(@amx, parser, output_length: usize);

log!(
"Template ID: {}, Output dest: {:p}, Output length: {}",
template_id,
output_string,
output_length
);

let t = match self.pool.get(&template_id) {
Some(t) => t,
None => return Ok(1),
None => return Ok(2),
};

let mut variables = liquid::value::Object::new();
Expand All @@ -115,45 +108,32 @@ impl Templates {

match ArgumentPairType::from_i32(pair_type) {
ArgumentPairType::String => {
log!("Type is string");

let mut val = String::new();
get_arg_string(amx, &mut parser, &mut val);

variables.insert(key.into(), liquid::value::Value::scalar(val));
}
ArgumentPairType::Int => {
log!("Type is int");

let mut val: Cell = 0;
get_arg_ref(amx, &mut parser, &mut val);

variables.insert(key.into(), liquid::value::Value::scalar(val));
}
ArgumentPairType::Float => {
log!("Type is float");

let mut val: f32 = 0.0;
get_arg_ref(amx, &mut parser, &mut val);

variables.insert(key.into(), liquid::value::Value::scalar(val as f64));
}
_ => {
log!("Type is unknown");
}
_ => return Ok(3),
};
}

let output = match t.render(&variables) {
Ok(v) => v,
Err(e) => {
log!("{}", e);
return Ok(1);
return Ok(4);
}
};

log!("Rendered output: {}", output);

let encoded = samp_sdk::cp1251::encode(&output)?;
set_string!(encoded, output_string, output_length);

Expand Down Expand Up @@ -186,7 +166,7 @@ fn get_arg_string(amx: &AMX, parser: &mut args::Parser, out_str: &mut String) ->
match samp_sdk::cp1251::decode_to(&tmp_str.into_bytes(), out_str) {
Ok(_) => {
return 1;
},
}
Err(e) => {
log!("{}", e);
return 0;
Expand Down
67 changes: 63 additions & 4 deletions test.pwn
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,68 @@ Test:Simple() {
PAIR_STR("date", "Monday")
);

printf("ret: %d", ret);
printf("rendered: %s", rendered);
printf("ret: %d rendered: '%s'", ret, rendered);
ASSERT(ret == 0);
new bool:res = !strcmp(rendered, "Hello, Southclaws! Today is Monday");
ASSERT(res);
ASSERT(strcmp(rendered, "Hello, Southclaws! Today is Monday") == 0);
}

Test:Types() {
new Template:t = CreateTemplate("String: {{ string }} Int: {{ int }} Float: {{ float }}");
new rendered[64];
new ret = RenderTemplate(t, rendered, sizeof rendered,
PAIR_STR("string", "hello"),
PAIR_INT("int", 42),
PAIR_FLOAT("float", 5.5)
);

printf("ret: %d rendered: '%s'", ret, rendered);
ASSERT(ret == 0);
ASSERT(strcmp(rendered, "String: hello Int: 42 Float: 5.5") == 0);
}

Test:Conditionals() {
new Template:t = CreateTemplate("Hello {% if name %}{{ name }}{% else %}Anonymous{% endif %}.");
new rendered[64];
new ret = RenderTemplate(t, rendered, sizeof rendered,
PAIR_STR("name", "Southclaws")
);

printf("ret: %d rendered: '%s'", ret, rendered);
ASSERT(ret == 0);
ASSERT(strcmp(rendered, "Hello Southclaws.") == 0);

// no variables passed here
ret = RenderTemplate(t, rendered, sizeof rendered);

printf("ret: %d rendered: '%s'", ret, rendered);
ASSERT(ret == 0);
ASSERT(strcmp(rendered, "Hello Anonymous.") == 0);
}

Test:Filters() {
new Template:t = CreateTemplate("{{ name | upcase }}");
new rendered[64];
new ret = RenderTemplate(t, rendered, sizeof rendered,
PAIR_STR("name", "Southclaws")
);

printf("ret: %d rendered: '%s'", ret, rendered);
ASSERT(ret == 0);
ASSERT(strcmp(rendered, "SOUTHCLAWS") == 0);
}

Test:Assignment() {
new Template:t = CreateTemplate("\
{% assign fruits = \"apples, oranges, peaches\" %}\
{% if fruits %}\
{{ fruits }}\
{% endif %}");
new rendered[64];
new ret = RenderTemplate(t, rendered, sizeof rendered,
PAIR_STR("name", "Southclaws")
);

printf("ret: %d rendered: '%s'", ret, rendered);
ASSERT(ret == 0);
ASSERT(strcmp(rendered, "apples, oranges, peaches") == 0);
}

0 comments on commit 4378044

Please sign in to comment.