From a0136ea62eeba1b98d127f7bbe6890d9fdf9619f Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 23 May 2020 15:52:31 -0400 Subject: [PATCH 01/16] Add a generated test invoking all the filters except jp. --- js/test_cases/generated_filters/main.dust | 1237 +++++++++++++++++++ js/test_cases/generated_filters/string.json | 3 + 2 files changed, 1240 insertions(+) create mode 100644 js/test_cases/generated_filters/main.dust create mode 100644 js/test_cases/generated_filters/string.json diff --git a/js/test_cases/generated_filters/main.dust b/js/test_cases/generated_filters/main.dust new file mode 100644 index 0000000..d849bbe --- /dev/null +++ b/js/test_cases/generated_filters/main.dust @@ -0,0 +1,1237 @@ +Hello {name}!{~n} +Hello {name|s}!{~n} +Hello {name|h}!{~n} +Hello {name|j}!{~n} +Hello {name|u}!{~n} +Hello {name|uc}!{~n} +Hello {name|js}!{~n} +Hello {name|s|h}!{~n} +Hello {name|s|j}!{~n} +Hello {name|s|u}!{~n} +Hello {name|s|uc}!{~n} +Hello {name|s|js}!{~n} +Hello {name|h|s}!{~n} +Hello {name|h|j}!{~n} +Hello {name|h|u}!{~n} +Hello {name|h|uc}!{~n} +Hello {name|h|js}!{~n} +Hello {name|j|s}!{~n} +Hello {name|j|h}!{~n} +Hello {name|j|u}!{~n} +Hello {name|j|uc}!{~n} +Hello {name|j|js}!{~n} +Hello {name|u|s}!{~n} +Hello {name|u|h}!{~n} +Hello {name|u|j}!{~n} +Hello {name|u|uc}!{~n} +Hello {name|u|js}!{~n} +Hello {name|uc|s}!{~n} +Hello {name|uc|h}!{~n} +Hello {name|uc|j}!{~n} +Hello {name|uc|u}!{~n} +Hello {name|uc|js}!{~n} +Hello {name|js|s}!{~n} +Hello {name|js|h}!{~n} +Hello {name|js|j}!{~n} +Hello {name|js|u}!{~n} +Hello {name|js|uc}!{~n} +Hello {name|s|h|j}!{~n} +Hello {name|s|h|u}!{~n} +Hello {name|s|h|uc}!{~n} +Hello {name|s|h|js}!{~n} +Hello {name|s|j|h}!{~n} +Hello {name|s|j|u}!{~n} +Hello {name|s|j|uc}!{~n} +Hello {name|s|j|js}!{~n} +Hello {name|s|u|h}!{~n} +Hello {name|s|u|j}!{~n} +Hello {name|s|u|uc}!{~n} +Hello {name|s|u|js}!{~n} +Hello {name|s|uc|h}!{~n} +Hello {name|s|uc|j}!{~n} +Hello {name|s|uc|u}!{~n} +Hello {name|s|uc|js}!{~n} +Hello {name|s|js|h}!{~n} +Hello {name|s|js|j}!{~n} +Hello {name|s|js|u}!{~n} +Hello {name|s|js|uc}!{~n} +Hello {name|h|s|j}!{~n} +Hello {name|h|s|u}!{~n} +Hello {name|h|s|uc}!{~n} +Hello {name|h|s|js}!{~n} +Hello {name|h|j|s}!{~n} +Hello {name|h|j|u}!{~n} +Hello {name|h|j|uc}!{~n} +Hello {name|h|j|js}!{~n} +Hello {name|h|u|s}!{~n} +Hello {name|h|u|j}!{~n} +Hello {name|h|u|uc}!{~n} +Hello {name|h|u|js}!{~n} +Hello {name|h|uc|s}!{~n} +Hello {name|h|uc|j}!{~n} +Hello {name|h|uc|u}!{~n} +Hello {name|h|uc|js}!{~n} +Hello {name|h|js|s}!{~n} +Hello {name|h|js|j}!{~n} +Hello {name|h|js|u}!{~n} +Hello {name|h|js|uc}!{~n} +Hello {name|j|s|h}!{~n} +Hello {name|j|s|u}!{~n} +Hello {name|j|s|uc}!{~n} +Hello {name|j|s|js}!{~n} +Hello {name|j|h|s}!{~n} +Hello {name|j|h|u}!{~n} +Hello {name|j|h|uc}!{~n} +Hello {name|j|h|js}!{~n} +Hello {name|j|u|s}!{~n} +Hello {name|j|u|h}!{~n} +Hello {name|j|u|uc}!{~n} +Hello {name|j|u|js}!{~n} +Hello {name|j|uc|s}!{~n} +Hello {name|j|uc|h}!{~n} +Hello {name|j|uc|u}!{~n} +Hello {name|j|uc|js}!{~n} +Hello {name|j|js|s}!{~n} +Hello {name|j|js|h}!{~n} +Hello {name|j|js|u}!{~n} +Hello {name|j|js|uc}!{~n} +Hello {name|u|s|h}!{~n} +Hello {name|u|s|j}!{~n} +Hello {name|u|s|uc}!{~n} +Hello {name|u|s|js}!{~n} +Hello {name|u|h|s}!{~n} +Hello {name|u|h|j}!{~n} +Hello {name|u|h|uc}!{~n} +Hello {name|u|h|js}!{~n} +Hello {name|u|j|s}!{~n} +Hello {name|u|j|h}!{~n} +Hello {name|u|j|uc}!{~n} +Hello {name|u|j|js}!{~n} +Hello {name|u|uc|s}!{~n} +Hello {name|u|uc|h}!{~n} +Hello {name|u|uc|j}!{~n} +Hello {name|u|uc|js}!{~n} +Hello {name|u|js|s}!{~n} +Hello {name|u|js|h}!{~n} +Hello {name|u|js|j}!{~n} +Hello {name|u|js|uc}!{~n} +Hello {name|uc|s|h}!{~n} +Hello {name|uc|s|j}!{~n} +Hello {name|uc|s|u}!{~n} +Hello {name|uc|s|js}!{~n} +Hello {name|uc|h|s}!{~n} +Hello {name|uc|h|j}!{~n} +Hello {name|uc|h|u}!{~n} +Hello {name|uc|h|js}!{~n} +Hello {name|uc|j|s}!{~n} +Hello {name|uc|j|h}!{~n} +Hello {name|uc|j|u}!{~n} +Hello {name|uc|j|js}!{~n} +Hello {name|uc|u|s}!{~n} +Hello {name|uc|u|h}!{~n} +Hello {name|uc|u|j}!{~n} +Hello {name|uc|u|js}!{~n} +Hello {name|uc|js|s}!{~n} +Hello {name|uc|js|h}!{~n} +Hello {name|uc|js|j}!{~n} +Hello {name|uc|js|u}!{~n} +Hello {name|js|s|h}!{~n} +Hello {name|js|s|j}!{~n} +Hello {name|js|s|u}!{~n} +Hello {name|js|s|uc}!{~n} +Hello {name|js|h|s}!{~n} +Hello {name|js|h|j}!{~n} +Hello {name|js|h|u}!{~n} +Hello {name|js|h|uc}!{~n} +Hello {name|js|j|s}!{~n} +Hello {name|js|j|h}!{~n} +Hello {name|js|j|u}!{~n} +Hello {name|js|j|uc}!{~n} +Hello {name|js|u|s}!{~n} +Hello {name|js|u|h}!{~n} +Hello {name|js|u|j}!{~n} +Hello {name|js|u|uc}!{~n} +Hello {name|js|uc|s}!{~n} +Hello {name|js|uc|h}!{~n} +Hello {name|js|uc|j}!{~n} +Hello {name|js|uc|u}!{~n} +Hello {name|s|h|j|u}!{~n} +Hello {name|s|h|j|uc}!{~n} +Hello {name|s|h|j|js}!{~n} +Hello {name|s|h|u|j}!{~n} +Hello {name|s|h|u|uc}!{~n} +Hello {name|s|h|u|js}!{~n} +Hello {name|s|h|uc|j}!{~n} +Hello {name|s|h|uc|u}!{~n} +Hello {name|s|h|uc|js}!{~n} +Hello {name|s|h|js|j}!{~n} +Hello {name|s|h|js|u}!{~n} +Hello {name|s|h|js|uc}!{~n} +Hello {name|s|j|h|u}!{~n} +Hello {name|s|j|h|uc}!{~n} +Hello {name|s|j|h|js}!{~n} +Hello {name|s|j|u|h}!{~n} +Hello {name|s|j|u|uc}!{~n} +Hello {name|s|j|u|js}!{~n} +Hello {name|s|j|uc|h}!{~n} +Hello {name|s|j|uc|u}!{~n} +Hello {name|s|j|uc|js}!{~n} +Hello {name|s|j|js|h}!{~n} +Hello {name|s|j|js|u}!{~n} +Hello {name|s|j|js|uc}!{~n} +Hello {name|s|u|h|j}!{~n} +Hello {name|s|u|h|uc}!{~n} +Hello {name|s|u|h|js}!{~n} +Hello {name|s|u|j|h}!{~n} +Hello {name|s|u|j|uc}!{~n} +Hello {name|s|u|j|js}!{~n} +Hello {name|s|u|uc|h}!{~n} +Hello {name|s|u|uc|j}!{~n} +Hello {name|s|u|uc|js}!{~n} +Hello {name|s|u|js|h}!{~n} +Hello {name|s|u|js|j}!{~n} +Hello {name|s|u|js|uc}!{~n} +Hello {name|s|uc|h|j}!{~n} +Hello {name|s|uc|h|u}!{~n} +Hello {name|s|uc|h|js}!{~n} +Hello {name|s|uc|j|h}!{~n} +Hello {name|s|uc|j|u}!{~n} +Hello {name|s|uc|j|js}!{~n} +Hello {name|s|uc|u|h}!{~n} +Hello {name|s|uc|u|j}!{~n} +Hello {name|s|uc|u|js}!{~n} +Hello {name|s|uc|js|h}!{~n} +Hello {name|s|uc|js|j}!{~n} +Hello {name|s|uc|js|u}!{~n} +Hello {name|s|js|h|j}!{~n} +Hello {name|s|js|h|u}!{~n} +Hello {name|s|js|h|uc}!{~n} +Hello {name|s|js|j|h}!{~n} +Hello {name|s|js|j|u}!{~n} +Hello {name|s|js|j|uc}!{~n} +Hello {name|s|js|u|h}!{~n} +Hello {name|s|js|u|j}!{~n} +Hello {name|s|js|u|uc}!{~n} +Hello {name|s|js|uc|h}!{~n} +Hello {name|s|js|uc|j}!{~n} +Hello {name|s|js|uc|u}!{~n} +Hello {name|h|s|j|u}!{~n} +Hello {name|h|s|j|uc}!{~n} +Hello {name|h|s|j|js}!{~n} +Hello {name|h|s|u|j}!{~n} +Hello {name|h|s|u|uc}!{~n} +Hello {name|h|s|u|js}!{~n} +Hello {name|h|s|uc|j}!{~n} +Hello {name|h|s|uc|u}!{~n} +Hello {name|h|s|uc|js}!{~n} +Hello {name|h|s|js|j}!{~n} +Hello {name|h|s|js|u}!{~n} +Hello {name|h|s|js|uc}!{~n} +Hello {name|h|j|s|u}!{~n} +Hello {name|h|j|s|uc}!{~n} +Hello {name|h|j|s|js}!{~n} +Hello {name|h|j|u|s}!{~n} +Hello {name|h|j|u|uc}!{~n} +Hello {name|h|j|u|js}!{~n} +Hello {name|h|j|uc|s}!{~n} +Hello {name|h|j|uc|u}!{~n} +Hello {name|h|j|uc|js}!{~n} +Hello {name|h|j|js|s}!{~n} +Hello {name|h|j|js|u}!{~n} +Hello {name|h|j|js|uc}!{~n} +Hello {name|h|u|s|j}!{~n} +Hello {name|h|u|s|uc}!{~n} +Hello {name|h|u|s|js}!{~n} +Hello {name|h|u|j|s}!{~n} +Hello {name|h|u|j|uc}!{~n} +Hello {name|h|u|j|js}!{~n} +Hello {name|h|u|uc|s}!{~n} +Hello {name|h|u|uc|j}!{~n} +Hello {name|h|u|uc|js}!{~n} +Hello {name|h|u|js|s}!{~n} +Hello {name|h|u|js|j}!{~n} +Hello {name|h|u|js|uc}!{~n} +Hello {name|h|uc|s|j}!{~n} +Hello {name|h|uc|s|u}!{~n} +Hello {name|h|uc|s|js}!{~n} +Hello {name|h|uc|j|s}!{~n} +Hello {name|h|uc|j|u}!{~n} +Hello {name|h|uc|j|js}!{~n} +Hello {name|h|uc|u|s}!{~n} +Hello {name|h|uc|u|j}!{~n} +Hello {name|h|uc|u|js}!{~n} +Hello {name|h|uc|js|s}!{~n} +Hello {name|h|uc|js|j}!{~n} +Hello {name|h|uc|js|u}!{~n} +Hello {name|h|js|s|j}!{~n} +Hello {name|h|js|s|u}!{~n} +Hello {name|h|js|s|uc}!{~n} +Hello {name|h|js|j|s}!{~n} +Hello {name|h|js|j|u}!{~n} +Hello {name|h|js|j|uc}!{~n} +Hello {name|h|js|u|s}!{~n} +Hello {name|h|js|u|j}!{~n} +Hello {name|h|js|u|uc}!{~n} +Hello {name|h|js|uc|s}!{~n} +Hello {name|h|js|uc|j}!{~n} +Hello {name|h|js|uc|u}!{~n} +Hello {name|j|s|h|u}!{~n} +Hello {name|j|s|h|uc}!{~n} +Hello {name|j|s|h|js}!{~n} +Hello {name|j|s|u|h}!{~n} +Hello {name|j|s|u|uc}!{~n} +Hello {name|j|s|u|js}!{~n} +Hello {name|j|s|uc|h}!{~n} +Hello {name|j|s|uc|u}!{~n} +Hello {name|j|s|uc|js}!{~n} +Hello {name|j|s|js|h}!{~n} +Hello {name|j|s|js|u}!{~n} +Hello {name|j|s|js|uc}!{~n} +Hello {name|j|h|s|u}!{~n} +Hello {name|j|h|s|uc}!{~n} +Hello {name|j|h|s|js}!{~n} +Hello {name|j|h|u|s}!{~n} +Hello {name|j|h|u|uc}!{~n} +Hello {name|j|h|u|js}!{~n} +Hello {name|j|h|uc|s}!{~n} +Hello {name|j|h|uc|u}!{~n} +Hello {name|j|h|uc|js}!{~n} +Hello {name|j|h|js|s}!{~n} +Hello {name|j|h|js|u}!{~n} +Hello {name|j|h|js|uc}!{~n} +Hello {name|j|u|s|h}!{~n} +Hello {name|j|u|s|uc}!{~n} +Hello {name|j|u|s|js}!{~n} +Hello {name|j|u|h|s}!{~n} +Hello {name|j|u|h|uc}!{~n} +Hello {name|j|u|h|js}!{~n} +Hello {name|j|u|uc|s}!{~n} +Hello {name|j|u|uc|h}!{~n} +Hello {name|j|u|uc|js}!{~n} +Hello {name|j|u|js|s}!{~n} +Hello {name|j|u|js|h}!{~n} +Hello {name|j|u|js|uc}!{~n} +Hello {name|j|uc|s|h}!{~n} +Hello {name|j|uc|s|u}!{~n} +Hello {name|j|uc|s|js}!{~n} +Hello {name|j|uc|h|s}!{~n} +Hello {name|j|uc|h|u}!{~n} +Hello {name|j|uc|h|js}!{~n} +Hello {name|j|uc|u|s}!{~n} +Hello {name|j|uc|u|h}!{~n} +Hello {name|j|uc|u|js}!{~n} +Hello {name|j|uc|js|s}!{~n} +Hello {name|j|uc|js|h}!{~n} +Hello {name|j|uc|js|u}!{~n} +Hello {name|j|js|s|h}!{~n} +Hello {name|j|js|s|u}!{~n} +Hello {name|j|js|s|uc}!{~n} +Hello {name|j|js|h|s}!{~n} +Hello {name|j|js|h|u}!{~n} +Hello {name|j|js|h|uc}!{~n} +Hello {name|j|js|u|s}!{~n} +Hello {name|j|js|u|h}!{~n} +Hello {name|j|js|u|uc}!{~n} +Hello {name|j|js|uc|s}!{~n} +Hello {name|j|js|uc|h}!{~n} +Hello {name|j|js|uc|u}!{~n} +Hello {name|u|s|h|j}!{~n} +Hello {name|u|s|h|uc}!{~n} +Hello {name|u|s|h|js}!{~n} +Hello {name|u|s|j|h}!{~n} +Hello {name|u|s|j|uc}!{~n} +Hello {name|u|s|j|js}!{~n} +Hello {name|u|s|uc|h}!{~n} +Hello {name|u|s|uc|j}!{~n} +Hello {name|u|s|uc|js}!{~n} +Hello {name|u|s|js|h}!{~n} +Hello {name|u|s|js|j}!{~n} +Hello {name|u|s|js|uc}!{~n} +Hello {name|u|h|s|j}!{~n} +Hello {name|u|h|s|uc}!{~n} +Hello {name|u|h|s|js}!{~n} +Hello {name|u|h|j|s}!{~n} +Hello {name|u|h|j|uc}!{~n} +Hello {name|u|h|j|js}!{~n} +Hello {name|u|h|uc|s}!{~n} +Hello {name|u|h|uc|j}!{~n} +Hello {name|u|h|uc|js}!{~n} +Hello {name|u|h|js|s}!{~n} +Hello {name|u|h|js|j}!{~n} +Hello {name|u|h|js|uc}!{~n} +Hello {name|u|j|s|h}!{~n} +Hello {name|u|j|s|uc}!{~n} +Hello {name|u|j|s|js}!{~n} +Hello {name|u|j|h|s}!{~n} +Hello {name|u|j|h|uc}!{~n} +Hello {name|u|j|h|js}!{~n} +Hello {name|u|j|uc|s}!{~n} +Hello {name|u|j|uc|h}!{~n} +Hello {name|u|j|uc|js}!{~n} +Hello {name|u|j|js|s}!{~n} +Hello {name|u|j|js|h}!{~n} +Hello {name|u|j|js|uc}!{~n} +Hello {name|u|uc|s|h}!{~n} +Hello {name|u|uc|s|j}!{~n} +Hello {name|u|uc|s|js}!{~n} +Hello {name|u|uc|h|s}!{~n} +Hello {name|u|uc|h|j}!{~n} +Hello {name|u|uc|h|js}!{~n} +Hello {name|u|uc|j|s}!{~n} +Hello {name|u|uc|j|h}!{~n} +Hello {name|u|uc|j|js}!{~n} +Hello {name|u|uc|js|s}!{~n} +Hello {name|u|uc|js|h}!{~n} +Hello {name|u|uc|js|j}!{~n} +Hello {name|u|js|s|h}!{~n} +Hello {name|u|js|s|j}!{~n} +Hello {name|u|js|s|uc}!{~n} +Hello {name|u|js|h|s}!{~n} +Hello {name|u|js|h|j}!{~n} +Hello {name|u|js|h|uc}!{~n} +Hello {name|u|js|j|s}!{~n} +Hello {name|u|js|j|h}!{~n} +Hello {name|u|js|j|uc}!{~n} +Hello {name|u|js|uc|s}!{~n} +Hello {name|u|js|uc|h}!{~n} +Hello {name|u|js|uc|j}!{~n} +Hello {name|uc|s|h|j}!{~n} +Hello {name|uc|s|h|u}!{~n} +Hello {name|uc|s|h|js}!{~n} +Hello {name|uc|s|j|h}!{~n} +Hello {name|uc|s|j|u}!{~n} +Hello {name|uc|s|j|js}!{~n} +Hello {name|uc|s|u|h}!{~n} +Hello {name|uc|s|u|j}!{~n} +Hello {name|uc|s|u|js}!{~n} +Hello {name|uc|s|js|h}!{~n} +Hello {name|uc|s|js|j}!{~n} +Hello {name|uc|s|js|u}!{~n} +Hello {name|uc|h|s|j}!{~n} +Hello {name|uc|h|s|u}!{~n} +Hello {name|uc|h|s|js}!{~n} +Hello {name|uc|h|j|s}!{~n} +Hello {name|uc|h|j|u}!{~n} +Hello {name|uc|h|j|js}!{~n} +Hello {name|uc|h|u|s}!{~n} +Hello {name|uc|h|u|j}!{~n} +Hello {name|uc|h|u|js}!{~n} +Hello {name|uc|h|js|s}!{~n} +Hello {name|uc|h|js|j}!{~n} +Hello {name|uc|h|js|u}!{~n} +Hello {name|uc|j|s|h}!{~n} +Hello {name|uc|j|s|u}!{~n} +Hello {name|uc|j|s|js}!{~n} +Hello {name|uc|j|h|s}!{~n} +Hello {name|uc|j|h|u}!{~n} +Hello {name|uc|j|h|js}!{~n} +Hello {name|uc|j|u|s}!{~n} +Hello {name|uc|j|u|h}!{~n} +Hello {name|uc|j|u|js}!{~n} +Hello {name|uc|j|js|s}!{~n} +Hello {name|uc|j|js|h}!{~n} +Hello {name|uc|j|js|u}!{~n} +Hello {name|uc|u|s|h}!{~n} +Hello {name|uc|u|s|j}!{~n} +Hello {name|uc|u|s|js}!{~n} +Hello {name|uc|u|h|s}!{~n} +Hello {name|uc|u|h|j}!{~n} +Hello {name|uc|u|h|js}!{~n} +Hello {name|uc|u|j|s}!{~n} +Hello {name|uc|u|j|h}!{~n} +Hello {name|uc|u|j|js}!{~n} +Hello {name|uc|u|js|s}!{~n} +Hello {name|uc|u|js|h}!{~n} +Hello {name|uc|u|js|j}!{~n} +Hello {name|uc|js|s|h}!{~n} +Hello {name|uc|js|s|j}!{~n} +Hello {name|uc|js|s|u}!{~n} +Hello {name|uc|js|h|s}!{~n} +Hello {name|uc|js|h|j}!{~n} +Hello {name|uc|js|h|u}!{~n} +Hello {name|uc|js|j|s}!{~n} +Hello {name|uc|js|j|h}!{~n} +Hello {name|uc|js|j|u}!{~n} +Hello {name|uc|js|u|s}!{~n} +Hello {name|uc|js|u|h}!{~n} +Hello {name|uc|js|u|j}!{~n} +Hello {name|js|s|h|j}!{~n} +Hello {name|js|s|h|u}!{~n} +Hello {name|js|s|h|uc}!{~n} +Hello {name|js|s|j|h}!{~n} +Hello {name|js|s|j|u}!{~n} +Hello {name|js|s|j|uc}!{~n} +Hello {name|js|s|u|h}!{~n} +Hello {name|js|s|u|j}!{~n} +Hello {name|js|s|u|uc}!{~n} +Hello {name|js|s|uc|h}!{~n} +Hello {name|js|s|uc|j}!{~n} +Hello {name|js|s|uc|u}!{~n} +Hello {name|js|h|s|j}!{~n} +Hello {name|js|h|s|u}!{~n} +Hello {name|js|h|s|uc}!{~n} +Hello {name|js|h|j|s}!{~n} +Hello {name|js|h|j|u}!{~n} +Hello {name|js|h|j|uc}!{~n} +Hello {name|js|h|u|s}!{~n} +Hello {name|js|h|u|j}!{~n} +Hello {name|js|h|u|uc}!{~n} +Hello {name|js|h|uc|s}!{~n} +Hello {name|js|h|uc|j}!{~n} +Hello {name|js|h|uc|u}!{~n} +Hello {name|js|j|s|h}!{~n} +Hello {name|js|j|s|u}!{~n} +Hello {name|js|j|s|uc}!{~n} +Hello {name|js|j|h|s}!{~n} +Hello {name|js|j|h|u}!{~n} +Hello {name|js|j|h|uc}!{~n} +Hello {name|js|j|u|s}!{~n} +Hello {name|js|j|u|h}!{~n} +Hello {name|js|j|u|uc}!{~n} +Hello {name|js|j|uc|s}!{~n} +Hello {name|js|j|uc|h}!{~n} +Hello {name|js|j|uc|u}!{~n} +Hello {name|js|u|s|h}!{~n} +Hello {name|js|u|s|j}!{~n} +Hello {name|js|u|s|uc}!{~n} +Hello {name|js|u|h|s}!{~n} +Hello {name|js|u|h|j}!{~n} +Hello {name|js|u|h|uc}!{~n} +Hello {name|js|u|j|s}!{~n} +Hello {name|js|u|j|h}!{~n} +Hello {name|js|u|j|uc}!{~n} +Hello {name|js|u|uc|s}!{~n} +Hello {name|js|u|uc|h}!{~n} +Hello {name|js|u|uc|j}!{~n} +Hello {name|js|uc|s|h}!{~n} +Hello {name|js|uc|s|j}!{~n} +Hello {name|js|uc|s|u}!{~n} +Hello {name|js|uc|h|s}!{~n} +Hello {name|js|uc|h|j}!{~n} +Hello {name|js|uc|h|u}!{~n} +Hello {name|js|uc|j|s}!{~n} +Hello {name|js|uc|j|h}!{~n} +Hello {name|js|uc|j|u}!{~n} +Hello {name|js|uc|u|s}!{~n} +Hello {name|js|uc|u|h}!{~n} +Hello {name|js|uc|u|j}!{~n} +Hello {name|s|h|j|u|uc}!{~n} +Hello {name|s|h|j|u|js}!{~n} +Hello {name|s|h|j|uc|u}!{~n} +Hello {name|s|h|j|uc|js}!{~n} +Hello {name|s|h|j|js|u}!{~n} +Hello {name|s|h|j|js|uc}!{~n} +Hello {name|s|h|u|j|uc}!{~n} +Hello {name|s|h|u|j|js}!{~n} +Hello {name|s|h|u|uc|j}!{~n} +Hello {name|s|h|u|uc|js}!{~n} +Hello {name|s|h|u|js|j}!{~n} +Hello {name|s|h|u|js|uc}!{~n} +Hello {name|s|h|uc|j|u}!{~n} +Hello {name|s|h|uc|j|js}!{~n} +Hello {name|s|h|uc|u|j}!{~n} +Hello {name|s|h|uc|u|js}!{~n} +Hello {name|s|h|uc|js|j}!{~n} +Hello {name|s|h|uc|js|u}!{~n} +Hello {name|s|h|js|j|u}!{~n} +Hello {name|s|h|js|j|uc}!{~n} +Hello {name|s|h|js|u|j}!{~n} +Hello {name|s|h|js|u|uc}!{~n} +Hello {name|s|h|js|uc|j}!{~n} +Hello {name|s|h|js|uc|u}!{~n} +Hello {name|s|j|h|u|uc}!{~n} +Hello {name|s|j|h|u|js}!{~n} +Hello {name|s|j|h|uc|u}!{~n} +Hello {name|s|j|h|uc|js}!{~n} +Hello {name|s|j|h|js|u}!{~n} +Hello {name|s|j|h|js|uc}!{~n} +Hello {name|s|j|u|h|uc}!{~n} +Hello {name|s|j|u|h|js}!{~n} +Hello {name|s|j|u|uc|h}!{~n} +Hello {name|s|j|u|uc|js}!{~n} +Hello {name|s|j|u|js|h}!{~n} +Hello {name|s|j|u|js|uc}!{~n} +Hello {name|s|j|uc|h|u}!{~n} +Hello {name|s|j|uc|h|js}!{~n} +Hello {name|s|j|uc|u|h}!{~n} +Hello {name|s|j|uc|u|js}!{~n} +Hello {name|s|j|uc|js|h}!{~n} +Hello {name|s|j|uc|js|u}!{~n} +Hello {name|s|j|js|h|u}!{~n} +Hello {name|s|j|js|h|uc}!{~n} +Hello {name|s|j|js|u|h}!{~n} +Hello {name|s|j|js|u|uc}!{~n} +Hello {name|s|j|js|uc|h}!{~n} +Hello {name|s|j|js|uc|u}!{~n} +Hello {name|s|u|h|j|uc}!{~n} +Hello {name|s|u|h|j|js}!{~n} +Hello {name|s|u|h|uc|j}!{~n} +Hello {name|s|u|h|uc|js}!{~n} +Hello {name|s|u|h|js|j}!{~n} +Hello {name|s|u|h|js|uc}!{~n} +Hello {name|s|u|j|h|uc}!{~n} +Hello {name|s|u|j|h|js}!{~n} +Hello {name|s|u|j|uc|h}!{~n} +Hello {name|s|u|j|uc|js}!{~n} +Hello {name|s|u|j|js|h}!{~n} +Hello {name|s|u|j|js|uc}!{~n} +Hello {name|s|u|uc|h|j}!{~n} +Hello {name|s|u|uc|h|js}!{~n} +Hello {name|s|u|uc|j|h}!{~n} +Hello {name|s|u|uc|j|js}!{~n} +Hello {name|s|u|uc|js|h}!{~n} +Hello {name|s|u|uc|js|j}!{~n} +Hello {name|s|u|js|h|j}!{~n} +Hello {name|s|u|js|h|uc}!{~n} +Hello {name|s|u|js|j|h}!{~n} +Hello {name|s|u|js|j|uc}!{~n} +Hello {name|s|u|js|uc|h}!{~n} +Hello {name|s|u|js|uc|j}!{~n} +Hello {name|s|uc|h|j|u}!{~n} +Hello {name|s|uc|h|j|js}!{~n} +Hello {name|s|uc|h|u|j}!{~n} +Hello {name|s|uc|h|u|js}!{~n} +Hello {name|s|uc|h|js|j}!{~n} +Hello {name|s|uc|h|js|u}!{~n} +Hello {name|s|uc|j|h|u}!{~n} +Hello {name|s|uc|j|h|js}!{~n} +Hello {name|s|uc|j|u|h}!{~n} +Hello {name|s|uc|j|u|js}!{~n} +Hello {name|s|uc|j|js|h}!{~n} +Hello {name|s|uc|j|js|u}!{~n} +Hello {name|s|uc|u|h|j}!{~n} +Hello {name|s|uc|u|h|js}!{~n} +Hello {name|s|uc|u|j|h}!{~n} +Hello {name|s|uc|u|j|js}!{~n} +Hello {name|s|uc|u|js|h}!{~n} +Hello {name|s|uc|u|js|j}!{~n} +Hello {name|s|uc|js|h|j}!{~n} +Hello {name|s|uc|js|h|u}!{~n} +Hello {name|s|uc|js|j|h}!{~n} +Hello {name|s|uc|js|j|u}!{~n} +Hello {name|s|uc|js|u|h}!{~n} +Hello {name|s|uc|js|u|j}!{~n} +Hello {name|s|js|h|j|u}!{~n} +Hello {name|s|js|h|j|uc}!{~n} +Hello {name|s|js|h|u|j}!{~n} +Hello {name|s|js|h|u|uc}!{~n} +Hello {name|s|js|h|uc|j}!{~n} +Hello {name|s|js|h|uc|u}!{~n} +Hello {name|s|js|j|h|u}!{~n} +Hello {name|s|js|j|h|uc}!{~n} +Hello {name|s|js|j|u|h}!{~n} +Hello {name|s|js|j|u|uc}!{~n} +Hello {name|s|js|j|uc|h}!{~n} +Hello {name|s|js|j|uc|u}!{~n} +Hello {name|s|js|u|h|j}!{~n} +Hello {name|s|js|u|h|uc}!{~n} +Hello {name|s|js|u|j|h}!{~n} +Hello {name|s|js|u|j|uc}!{~n} +Hello {name|s|js|u|uc|h}!{~n} +Hello {name|s|js|u|uc|j}!{~n} +Hello {name|s|js|uc|h|j}!{~n} +Hello {name|s|js|uc|h|u}!{~n} +Hello {name|s|js|uc|j|h}!{~n} +Hello {name|s|js|uc|j|u}!{~n} +Hello {name|s|js|uc|u|h}!{~n} +Hello {name|s|js|uc|u|j}!{~n} +Hello {name|h|s|j|u|uc}!{~n} +Hello {name|h|s|j|u|js}!{~n} +Hello {name|h|s|j|uc|u}!{~n} +Hello {name|h|s|j|uc|js}!{~n} +Hello {name|h|s|j|js|u}!{~n} +Hello {name|h|s|j|js|uc}!{~n} +Hello {name|h|s|u|j|uc}!{~n} +Hello {name|h|s|u|j|js}!{~n} +Hello {name|h|s|u|uc|j}!{~n} +Hello {name|h|s|u|uc|js}!{~n} +Hello {name|h|s|u|js|j}!{~n} +Hello {name|h|s|u|js|uc}!{~n} +Hello {name|h|s|uc|j|u}!{~n} +Hello {name|h|s|uc|j|js}!{~n} +Hello {name|h|s|uc|u|j}!{~n} +Hello {name|h|s|uc|u|js}!{~n} +Hello {name|h|s|uc|js|j}!{~n} +Hello {name|h|s|uc|js|u}!{~n} +Hello {name|h|s|js|j|u}!{~n} +Hello {name|h|s|js|j|uc}!{~n} +Hello {name|h|s|js|u|j}!{~n} +Hello {name|h|s|js|u|uc}!{~n} +Hello {name|h|s|js|uc|j}!{~n} +Hello {name|h|s|js|uc|u}!{~n} +Hello {name|h|j|s|u|uc}!{~n} +Hello {name|h|j|s|u|js}!{~n} +Hello {name|h|j|s|uc|u}!{~n} +Hello {name|h|j|s|uc|js}!{~n} +Hello {name|h|j|s|js|u}!{~n} +Hello {name|h|j|s|js|uc}!{~n} +Hello {name|h|j|u|s|uc}!{~n} +Hello {name|h|j|u|s|js}!{~n} +Hello {name|h|j|u|uc|s}!{~n} +Hello {name|h|j|u|uc|js}!{~n} +Hello {name|h|j|u|js|s}!{~n} +Hello {name|h|j|u|js|uc}!{~n} +Hello {name|h|j|uc|s|u}!{~n} +Hello {name|h|j|uc|s|js}!{~n} +Hello {name|h|j|uc|u|s}!{~n} +Hello {name|h|j|uc|u|js}!{~n} +Hello {name|h|j|uc|js|s}!{~n} +Hello {name|h|j|uc|js|u}!{~n} +Hello {name|h|j|js|s|u}!{~n} +Hello {name|h|j|js|s|uc}!{~n} +Hello {name|h|j|js|u|s}!{~n} +Hello {name|h|j|js|u|uc}!{~n} +Hello {name|h|j|js|uc|s}!{~n} +Hello {name|h|j|js|uc|u}!{~n} +Hello {name|h|u|s|j|uc}!{~n} +Hello {name|h|u|s|j|js}!{~n} +Hello {name|h|u|s|uc|j}!{~n} +Hello {name|h|u|s|uc|js}!{~n} +Hello {name|h|u|s|js|j}!{~n} +Hello {name|h|u|s|js|uc}!{~n} +Hello {name|h|u|j|s|uc}!{~n} +Hello {name|h|u|j|s|js}!{~n} +Hello {name|h|u|j|uc|s}!{~n} +Hello {name|h|u|j|uc|js}!{~n} +Hello {name|h|u|j|js|s}!{~n} +Hello {name|h|u|j|js|uc}!{~n} +Hello {name|h|u|uc|s|j}!{~n} +Hello {name|h|u|uc|s|js}!{~n} +Hello {name|h|u|uc|j|s}!{~n} +Hello {name|h|u|uc|j|js}!{~n} +Hello {name|h|u|uc|js|s}!{~n} +Hello {name|h|u|uc|js|j}!{~n} +Hello {name|h|u|js|s|j}!{~n} +Hello {name|h|u|js|s|uc}!{~n} +Hello {name|h|u|js|j|s}!{~n} +Hello {name|h|u|js|j|uc}!{~n} +Hello {name|h|u|js|uc|s}!{~n} +Hello {name|h|u|js|uc|j}!{~n} +Hello {name|h|uc|s|j|u}!{~n} +Hello {name|h|uc|s|j|js}!{~n} +Hello {name|h|uc|s|u|j}!{~n} +Hello {name|h|uc|s|u|js}!{~n} +Hello {name|h|uc|s|js|j}!{~n} +Hello {name|h|uc|s|js|u}!{~n} +Hello {name|h|uc|j|s|u}!{~n} +Hello {name|h|uc|j|s|js}!{~n} +Hello {name|h|uc|j|u|s}!{~n} +Hello {name|h|uc|j|u|js}!{~n} +Hello {name|h|uc|j|js|s}!{~n} +Hello {name|h|uc|j|js|u}!{~n} +Hello {name|h|uc|u|s|j}!{~n} +Hello {name|h|uc|u|s|js}!{~n} +Hello {name|h|uc|u|j|s}!{~n} +Hello {name|h|uc|u|j|js}!{~n} +Hello {name|h|uc|u|js|s}!{~n} +Hello {name|h|uc|u|js|j}!{~n} +Hello {name|h|uc|js|s|j}!{~n} +Hello {name|h|uc|js|s|u}!{~n} +Hello {name|h|uc|js|j|s}!{~n} +Hello {name|h|uc|js|j|u}!{~n} +Hello {name|h|uc|js|u|s}!{~n} +Hello {name|h|uc|js|u|j}!{~n} +Hello {name|h|js|s|j|u}!{~n} +Hello {name|h|js|s|j|uc}!{~n} +Hello {name|h|js|s|u|j}!{~n} +Hello {name|h|js|s|u|uc}!{~n} +Hello {name|h|js|s|uc|j}!{~n} +Hello {name|h|js|s|uc|u}!{~n} +Hello {name|h|js|j|s|u}!{~n} +Hello {name|h|js|j|s|uc}!{~n} +Hello {name|h|js|j|u|s}!{~n} +Hello {name|h|js|j|u|uc}!{~n} +Hello {name|h|js|j|uc|s}!{~n} +Hello {name|h|js|j|uc|u}!{~n} +Hello {name|h|js|u|s|j}!{~n} +Hello {name|h|js|u|s|uc}!{~n} +Hello {name|h|js|u|j|s}!{~n} +Hello {name|h|js|u|j|uc}!{~n} +Hello {name|h|js|u|uc|s}!{~n} +Hello {name|h|js|u|uc|j}!{~n} +Hello {name|h|js|uc|s|j}!{~n} +Hello {name|h|js|uc|s|u}!{~n} +Hello {name|h|js|uc|j|s}!{~n} +Hello {name|h|js|uc|j|u}!{~n} +Hello {name|h|js|uc|u|s}!{~n} +Hello {name|h|js|uc|u|j}!{~n} +Hello {name|j|s|h|u|uc}!{~n} +Hello {name|j|s|h|u|js}!{~n} +Hello {name|j|s|h|uc|u}!{~n} +Hello {name|j|s|h|uc|js}!{~n} +Hello {name|j|s|h|js|u}!{~n} +Hello {name|j|s|h|js|uc}!{~n} +Hello {name|j|s|u|h|uc}!{~n} +Hello {name|j|s|u|h|js}!{~n} +Hello {name|j|s|u|uc|h}!{~n} +Hello {name|j|s|u|uc|js}!{~n} +Hello {name|j|s|u|js|h}!{~n} +Hello {name|j|s|u|js|uc}!{~n} +Hello {name|j|s|uc|h|u}!{~n} +Hello {name|j|s|uc|h|js}!{~n} +Hello {name|j|s|uc|u|h}!{~n} +Hello {name|j|s|uc|u|js}!{~n} +Hello {name|j|s|uc|js|h}!{~n} +Hello {name|j|s|uc|js|u}!{~n} +Hello {name|j|s|js|h|u}!{~n} +Hello {name|j|s|js|h|uc}!{~n} +Hello {name|j|s|js|u|h}!{~n} +Hello {name|j|s|js|u|uc}!{~n} +Hello {name|j|s|js|uc|h}!{~n} +Hello {name|j|s|js|uc|u}!{~n} +Hello {name|j|h|s|u|uc}!{~n} +Hello {name|j|h|s|u|js}!{~n} +Hello {name|j|h|s|uc|u}!{~n} +Hello {name|j|h|s|uc|js}!{~n} +Hello {name|j|h|s|js|u}!{~n} +Hello {name|j|h|s|js|uc}!{~n} +Hello {name|j|h|u|s|uc}!{~n} +Hello {name|j|h|u|s|js}!{~n} +Hello {name|j|h|u|uc|s}!{~n} +Hello {name|j|h|u|uc|js}!{~n} +Hello {name|j|h|u|js|s}!{~n} +Hello {name|j|h|u|js|uc}!{~n} +Hello {name|j|h|uc|s|u}!{~n} +Hello {name|j|h|uc|s|js}!{~n} +Hello {name|j|h|uc|u|s}!{~n} +Hello {name|j|h|uc|u|js}!{~n} +Hello {name|j|h|uc|js|s}!{~n} +Hello {name|j|h|uc|js|u}!{~n} +Hello {name|j|h|js|s|u}!{~n} +Hello {name|j|h|js|s|uc}!{~n} +Hello {name|j|h|js|u|s}!{~n} +Hello {name|j|h|js|u|uc}!{~n} +Hello {name|j|h|js|uc|s}!{~n} +Hello {name|j|h|js|uc|u}!{~n} +Hello {name|j|u|s|h|uc}!{~n} +Hello {name|j|u|s|h|js}!{~n} +Hello {name|j|u|s|uc|h}!{~n} +Hello {name|j|u|s|uc|js}!{~n} +Hello {name|j|u|s|js|h}!{~n} +Hello {name|j|u|s|js|uc}!{~n} +Hello {name|j|u|h|s|uc}!{~n} +Hello {name|j|u|h|s|js}!{~n} +Hello {name|j|u|h|uc|s}!{~n} +Hello {name|j|u|h|uc|js}!{~n} +Hello {name|j|u|h|js|s}!{~n} +Hello {name|j|u|h|js|uc}!{~n} +Hello {name|j|u|uc|s|h}!{~n} +Hello {name|j|u|uc|s|js}!{~n} +Hello {name|j|u|uc|h|s}!{~n} +Hello {name|j|u|uc|h|js}!{~n} +Hello {name|j|u|uc|js|s}!{~n} +Hello {name|j|u|uc|js|h}!{~n} +Hello {name|j|u|js|s|h}!{~n} +Hello {name|j|u|js|s|uc}!{~n} +Hello {name|j|u|js|h|s}!{~n} +Hello {name|j|u|js|h|uc}!{~n} +Hello {name|j|u|js|uc|s}!{~n} +Hello {name|j|u|js|uc|h}!{~n} +Hello {name|j|uc|s|h|u}!{~n} +Hello {name|j|uc|s|h|js}!{~n} +Hello {name|j|uc|s|u|h}!{~n} +Hello {name|j|uc|s|u|js}!{~n} +Hello {name|j|uc|s|js|h}!{~n} +Hello {name|j|uc|s|js|u}!{~n} +Hello {name|j|uc|h|s|u}!{~n} +Hello {name|j|uc|h|s|js}!{~n} +Hello {name|j|uc|h|u|s}!{~n} +Hello {name|j|uc|h|u|js}!{~n} +Hello {name|j|uc|h|js|s}!{~n} +Hello {name|j|uc|h|js|u}!{~n} +Hello {name|j|uc|u|s|h}!{~n} +Hello {name|j|uc|u|s|js}!{~n} +Hello {name|j|uc|u|h|s}!{~n} +Hello {name|j|uc|u|h|js}!{~n} +Hello {name|j|uc|u|js|s}!{~n} +Hello {name|j|uc|u|js|h}!{~n} +Hello {name|j|uc|js|s|h}!{~n} +Hello {name|j|uc|js|s|u}!{~n} +Hello {name|j|uc|js|h|s}!{~n} +Hello {name|j|uc|js|h|u}!{~n} +Hello {name|j|uc|js|u|s}!{~n} +Hello {name|j|uc|js|u|h}!{~n} +Hello {name|j|js|s|h|u}!{~n} +Hello {name|j|js|s|h|uc}!{~n} +Hello {name|j|js|s|u|h}!{~n} +Hello {name|j|js|s|u|uc}!{~n} +Hello {name|j|js|s|uc|h}!{~n} +Hello {name|j|js|s|uc|u}!{~n} +Hello {name|j|js|h|s|u}!{~n} +Hello {name|j|js|h|s|uc}!{~n} +Hello {name|j|js|h|u|s}!{~n} +Hello {name|j|js|h|u|uc}!{~n} +Hello {name|j|js|h|uc|s}!{~n} +Hello {name|j|js|h|uc|u}!{~n} +Hello {name|j|js|u|s|h}!{~n} +Hello {name|j|js|u|s|uc}!{~n} +Hello {name|j|js|u|h|s}!{~n} +Hello {name|j|js|u|h|uc}!{~n} +Hello {name|j|js|u|uc|s}!{~n} +Hello {name|j|js|u|uc|h}!{~n} +Hello {name|j|js|uc|s|h}!{~n} +Hello {name|j|js|uc|s|u}!{~n} +Hello {name|j|js|uc|h|s}!{~n} +Hello {name|j|js|uc|h|u}!{~n} +Hello {name|j|js|uc|u|s}!{~n} +Hello {name|j|js|uc|u|h}!{~n} +Hello {name|u|s|h|j|uc}!{~n} +Hello {name|u|s|h|j|js}!{~n} +Hello {name|u|s|h|uc|j}!{~n} +Hello {name|u|s|h|uc|js}!{~n} +Hello {name|u|s|h|js|j}!{~n} +Hello {name|u|s|h|js|uc}!{~n} +Hello {name|u|s|j|h|uc}!{~n} +Hello {name|u|s|j|h|js}!{~n} +Hello {name|u|s|j|uc|h}!{~n} +Hello {name|u|s|j|uc|js}!{~n} +Hello {name|u|s|j|js|h}!{~n} +Hello {name|u|s|j|js|uc}!{~n} +Hello {name|u|s|uc|h|j}!{~n} +Hello {name|u|s|uc|h|js}!{~n} +Hello {name|u|s|uc|j|h}!{~n} +Hello {name|u|s|uc|j|js}!{~n} +Hello {name|u|s|uc|js|h}!{~n} +Hello {name|u|s|uc|js|j}!{~n} +Hello {name|u|s|js|h|j}!{~n} +Hello {name|u|s|js|h|uc}!{~n} +Hello {name|u|s|js|j|h}!{~n} +Hello {name|u|s|js|j|uc}!{~n} +Hello {name|u|s|js|uc|h}!{~n} +Hello {name|u|s|js|uc|j}!{~n} +Hello {name|u|h|s|j|uc}!{~n} +Hello {name|u|h|s|j|js}!{~n} +Hello {name|u|h|s|uc|j}!{~n} +Hello {name|u|h|s|uc|js}!{~n} +Hello {name|u|h|s|js|j}!{~n} +Hello {name|u|h|s|js|uc}!{~n} +Hello {name|u|h|j|s|uc}!{~n} +Hello {name|u|h|j|s|js}!{~n} +Hello {name|u|h|j|uc|s}!{~n} +Hello {name|u|h|j|uc|js}!{~n} +Hello {name|u|h|j|js|s}!{~n} +Hello {name|u|h|j|js|uc}!{~n} +Hello {name|u|h|uc|s|j}!{~n} +Hello {name|u|h|uc|s|js}!{~n} +Hello {name|u|h|uc|j|s}!{~n} +Hello {name|u|h|uc|j|js}!{~n} +Hello {name|u|h|uc|js|s}!{~n} +Hello {name|u|h|uc|js|j}!{~n} +Hello {name|u|h|js|s|j}!{~n} +Hello {name|u|h|js|s|uc}!{~n} +Hello {name|u|h|js|j|s}!{~n} +Hello {name|u|h|js|j|uc}!{~n} +Hello {name|u|h|js|uc|s}!{~n} +Hello {name|u|h|js|uc|j}!{~n} +Hello {name|u|j|s|h|uc}!{~n} +Hello {name|u|j|s|h|js}!{~n} +Hello {name|u|j|s|uc|h}!{~n} +Hello {name|u|j|s|uc|js}!{~n} +Hello {name|u|j|s|js|h}!{~n} +Hello {name|u|j|s|js|uc}!{~n} +Hello {name|u|j|h|s|uc}!{~n} +Hello {name|u|j|h|s|js}!{~n} +Hello {name|u|j|h|uc|s}!{~n} +Hello {name|u|j|h|uc|js}!{~n} +Hello {name|u|j|h|js|s}!{~n} +Hello {name|u|j|h|js|uc}!{~n} +Hello {name|u|j|uc|s|h}!{~n} +Hello {name|u|j|uc|s|js}!{~n} +Hello {name|u|j|uc|h|s}!{~n} +Hello {name|u|j|uc|h|js}!{~n} +Hello {name|u|j|uc|js|s}!{~n} +Hello {name|u|j|uc|js|h}!{~n} +Hello {name|u|j|js|s|h}!{~n} +Hello {name|u|j|js|s|uc}!{~n} +Hello {name|u|j|js|h|s}!{~n} +Hello {name|u|j|js|h|uc}!{~n} +Hello {name|u|j|js|uc|s}!{~n} +Hello {name|u|j|js|uc|h}!{~n} +Hello {name|u|uc|s|h|j}!{~n} +Hello {name|u|uc|s|h|js}!{~n} +Hello {name|u|uc|s|j|h}!{~n} +Hello {name|u|uc|s|j|js}!{~n} +Hello {name|u|uc|s|js|h}!{~n} +Hello {name|u|uc|s|js|j}!{~n} +Hello {name|u|uc|h|s|j}!{~n} +Hello {name|u|uc|h|s|js}!{~n} +Hello {name|u|uc|h|j|s}!{~n} +Hello {name|u|uc|h|j|js}!{~n} +Hello {name|u|uc|h|js|s}!{~n} +Hello {name|u|uc|h|js|j}!{~n} +Hello {name|u|uc|j|s|h}!{~n} +Hello {name|u|uc|j|s|js}!{~n} +Hello {name|u|uc|j|h|s}!{~n} +Hello {name|u|uc|j|h|js}!{~n} +Hello {name|u|uc|j|js|s}!{~n} +Hello {name|u|uc|j|js|h}!{~n} +Hello {name|u|uc|js|s|h}!{~n} +Hello {name|u|uc|js|s|j}!{~n} +Hello {name|u|uc|js|h|s}!{~n} +Hello {name|u|uc|js|h|j}!{~n} +Hello {name|u|uc|js|j|s}!{~n} +Hello {name|u|uc|js|j|h}!{~n} +Hello {name|u|js|s|h|j}!{~n} +Hello {name|u|js|s|h|uc}!{~n} +Hello {name|u|js|s|j|h}!{~n} +Hello {name|u|js|s|j|uc}!{~n} +Hello {name|u|js|s|uc|h}!{~n} +Hello {name|u|js|s|uc|j}!{~n} +Hello {name|u|js|h|s|j}!{~n} +Hello {name|u|js|h|s|uc}!{~n} +Hello {name|u|js|h|j|s}!{~n} +Hello {name|u|js|h|j|uc}!{~n} +Hello {name|u|js|h|uc|s}!{~n} +Hello {name|u|js|h|uc|j}!{~n} +Hello {name|u|js|j|s|h}!{~n} +Hello {name|u|js|j|s|uc}!{~n} +Hello {name|u|js|j|h|s}!{~n} +Hello {name|u|js|j|h|uc}!{~n} +Hello {name|u|js|j|uc|s}!{~n} +Hello {name|u|js|j|uc|h}!{~n} +Hello {name|u|js|uc|s|h}!{~n} +Hello {name|u|js|uc|s|j}!{~n} +Hello {name|u|js|uc|h|s}!{~n} +Hello {name|u|js|uc|h|j}!{~n} +Hello {name|u|js|uc|j|s}!{~n} +Hello {name|u|js|uc|j|h}!{~n} +Hello {name|uc|s|h|j|u}!{~n} +Hello {name|uc|s|h|j|js}!{~n} +Hello {name|uc|s|h|u|j}!{~n} +Hello {name|uc|s|h|u|js}!{~n} +Hello {name|uc|s|h|js|j}!{~n} +Hello {name|uc|s|h|js|u}!{~n} +Hello {name|uc|s|j|h|u}!{~n} +Hello {name|uc|s|j|h|js}!{~n} +Hello {name|uc|s|j|u|h}!{~n} +Hello {name|uc|s|j|u|js}!{~n} +Hello {name|uc|s|j|js|h}!{~n} +Hello {name|uc|s|j|js|u}!{~n} +Hello {name|uc|s|u|h|j}!{~n} +Hello {name|uc|s|u|h|js}!{~n} +Hello {name|uc|s|u|j|h}!{~n} +Hello {name|uc|s|u|j|js}!{~n} +Hello {name|uc|s|u|js|h}!{~n} +Hello {name|uc|s|u|js|j}!{~n} +Hello {name|uc|s|js|h|j}!{~n} +Hello {name|uc|s|js|h|u}!{~n} +Hello {name|uc|s|js|j|h}!{~n} +Hello {name|uc|s|js|j|u}!{~n} +Hello {name|uc|s|js|u|h}!{~n} +Hello {name|uc|s|js|u|j}!{~n} +Hello {name|uc|h|s|j|u}!{~n} +Hello {name|uc|h|s|j|js}!{~n} +Hello {name|uc|h|s|u|j}!{~n} +Hello {name|uc|h|s|u|js}!{~n} +Hello {name|uc|h|s|js|j}!{~n} +Hello {name|uc|h|s|js|u}!{~n} +Hello {name|uc|h|j|s|u}!{~n} +Hello {name|uc|h|j|s|js}!{~n} +Hello {name|uc|h|j|u|s}!{~n} +Hello {name|uc|h|j|u|js}!{~n} +Hello {name|uc|h|j|js|s}!{~n} +Hello {name|uc|h|j|js|u}!{~n} +Hello {name|uc|h|u|s|j}!{~n} +Hello {name|uc|h|u|s|js}!{~n} +Hello {name|uc|h|u|j|s}!{~n} +Hello {name|uc|h|u|j|js}!{~n} +Hello {name|uc|h|u|js|s}!{~n} +Hello {name|uc|h|u|js|j}!{~n} +Hello {name|uc|h|js|s|j}!{~n} +Hello {name|uc|h|js|s|u}!{~n} +Hello {name|uc|h|js|j|s}!{~n} +Hello {name|uc|h|js|j|u}!{~n} +Hello {name|uc|h|js|u|s}!{~n} +Hello {name|uc|h|js|u|j}!{~n} +Hello {name|uc|j|s|h|u}!{~n} +Hello {name|uc|j|s|h|js}!{~n} +Hello {name|uc|j|s|u|h}!{~n} +Hello {name|uc|j|s|u|js}!{~n} +Hello {name|uc|j|s|js|h}!{~n} +Hello {name|uc|j|s|js|u}!{~n} +Hello {name|uc|j|h|s|u}!{~n} +Hello {name|uc|j|h|s|js}!{~n} +Hello {name|uc|j|h|u|s}!{~n} +Hello {name|uc|j|h|u|js}!{~n} +Hello {name|uc|j|h|js|s}!{~n} +Hello {name|uc|j|h|js|u}!{~n} +Hello {name|uc|j|u|s|h}!{~n} +Hello {name|uc|j|u|s|js}!{~n} +Hello {name|uc|j|u|h|s}!{~n} +Hello {name|uc|j|u|h|js}!{~n} +Hello {name|uc|j|u|js|s}!{~n} +Hello {name|uc|j|u|js|h}!{~n} +Hello {name|uc|j|js|s|h}!{~n} +Hello {name|uc|j|js|s|u}!{~n} +Hello {name|uc|j|js|h|s}!{~n} +Hello {name|uc|j|js|h|u}!{~n} +Hello {name|uc|j|js|u|s}!{~n} +Hello {name|uc|j|js|u|h}!{~n} +Hello {name|uc|u|s|h|j}!{~n} +Hello {name|uc|u|s|h|js}!{~n} +Hello {name|uc|u|s|j|h}!{~n} +Hello {name|uc|u|s|j|js}!{~n} +Hello {name|uc|u|s|js|h}!{~n} +Hello {name|uc|u|s|js|j}!{~n} +Hello {name|uc|u|h|s|j}!{~n} +Hello {name|uc|u|h|s|js}!{~n} +Hello {name|uc|u|h|j|s}!{~n} +Hello {name|uc|u|h|j|js}!{~n} +Hello {name|uc|u|h|js|s}!{~n} +Hello {name|uc|u|h|js|j}!{~n} +Hello {name|uc|u|j|s|h}!{~n} +Hello {name|uc|u|j|s|js}!{~n} +Hello {name|uc|u|j|h|s}!{~n} +Hello {name|uc|u|j|h|js}!{~n} +Hello {name|uc|u|j|js|s}!{~n} +Hello {name|uc|u|j|js|h}!{~n} +Hello {name|uc|u|js|s|h}!{~n} +Hello {name|uc|u|js|s|j}!{~n} +Hello {name|uc|u|js|h|s}!{~n} +Hello {name|uc|u|js|h|j}!{~n} +Hello {name|uc|u|js|j|s}!{~n} +Hello {name|uc|u|js|j|h}!{~n} +Hello {name|uc|js|s|h|j}!{~n} +Hello {name|uc|js|s|h|u}!{~n} +Hello {name|uc|js|s|j|h}!{~n} +Hello {name|uc|js|s|j|u}!{~n} +Hello {name|uc|js|s|u|h}!{~n} +Hello {name|uc|js|s|u|j}!{~n} +Hello {name|uc|js|h|s|j}!{~n} +Hello {name|uc|js|h|s|u}!{~n} +Hello {name|uc|js|h|j|s}!{~n} +Hello {name|uc|js|h|j|u}!{~n} +Hello {name|uc|js|h|u|s}!{~n} +Hello {name|uc|js|h|u|j}!{~n} +Hello {name|uc|js|j|s|h}!{~n} +Hello {name|uc|js|j|s|u}!{~n} +Hello {name|uc|js|j|h|s}!{~n} +Hello {name|uc|js|j|h|u}!{~n} +Hello {name|uc|js|j|u|s}!{~n} +Hello {name|uc|js|j|u|h}!{~n} +Hello {name|uc|js|u|s|h}!{~n} +Hello {name|uc|js|u|s|j}!{~n} +Hello {name|uc|js|u|h|s}!{~n} +Hello {name|uc|js|u|h|j}!{~n} +Hello {name|uc|js|u|j|s}!{~n} +Hello {name|uc|js|u|j|h}!{~n} +Hello {name|js|s|h|j|u}!{~n} +Hello {name|js|s|h|j|uc}!{~n} +Hello {name|js|s|h|u|j}!{~n} +Hello {name|js|s|h|u|uc}!{~n} +Hello {name|js|s|h|uc|j}!{~n} +Hello {name|js|s|h|uc|u}!{~n} +Hello {name|js|s|j|h|u}!{~n} +Hello {name|js|s|j|h|uc}!{~n} +Hello {name|js|s|j|u|h}!{~n} +Hello {name|js|s|j|u|uc}!{~n} +Hello {name|js|s|j|uc|h}!{~n} +Hello {name|js|s|j|uc|u}!{~n} +Hello {name|js|s|u|h|j}!{~n} +Hello {name|js|s|u|h|uc}!{~n} +Hello {name|js|s|u|j|h}!{~n} +Hello {name|js|s|u|j|uc}!{~n} +Hello {name|js|s|u|uc|h}!{~n} +Hello {name|js|s|u|uc|j}!{~n} +Hello {name|js|s|uc|h|j}!{~n} +Hello {name|js|s|uc|h|u}!{~n} +Hello {name|js|s|uc|j|h}!{~n} +Hello {name|js|s|uc|j|u}!{~n} +Hello {name|js|s|uc|u|h}!{~n} +Hello {name|js|s|uc|u|j}!{~n} +Hello {name|js|h|s|j|u}!{~n} +Hello {name|js|h|s|j|uc}!{~n} +Hello {name|js|h|s|u|j}!{~n} +Hello {name|js|h|s|u|uc}!{~n} +Hello {name|js|h|s|uc|j}!{~n} +Hello {name|js|h|s|uc|u}!{~n} +Hello {name|js|h|j|s|u}!{~n} +Hello {name|js|h|j|s|uc}!{~n} +Hello {name|js|h|j|u|s}!{~n} +Hello {name|js|h|j|u|uc}!{~n} +Hello {name|js|h|j|uc|s}!{~n} +Hello {name|js|h|j|uc|u}!{~n} +Hello {name|js|h|u|s|j}!{~n} +Hello {name|js|h|u|s|uc}!{~n} +Hello {name|js|h|u|j|s}!{~n} +Hello {name|js|h|u|j|uc}!{~n} +Hello {name|js|h|u|uc|s}!{~n} +Hello {name|js|h|u|uc|j}!{~n} +Hello {name|js|h|uc|s|j}!{~n} +Hello {name|js|h|uc|s|u}!{~n} +Hello {name|js|h|uc|j|s}!{~n} +Hello {name|js|h|uc|j|u}!{~n} +Hello {name|js|h|uc|u|s}!{~n} +Hello {name|js|h|uc|u|j}!{~n} +Hello {name|js|j|s|h|u}!{~n} +Hello {name|js|j|s|h|uc}!{~n} +Hello {name|js|j|s|u|h}!{~n} +Hello {name|js|j|s|u|uc}!{~n} +Hello {name|js|j|s|uc|h}!{~n} +Hello {name|js|j|s|uc|u}!{~n} +Hello {name|js|j|h|s|u}!{~n} +Hello {name|js|j|h|s|uc}!{~n} +Hello {name|js|j|h|u|s}!{~n} +Hello {name|js|j|h|u|uc}!{~n} +Hello {name|js|j|h|uc|s}!{~n} +Hello {name|js|j|h|uc|u}!{~n} +Hello {name|js|j|u|s|h}!{~n} +Hello {name|js|j|u|s|uc}!{~n} +Hello {name|js|j|u|h|s}!{~n} +Hello {name|js|j|u|h|uc}!{~n} +Hello {name|js|j|u|uc|s}!{~n} +Hello {name|js|j|u|uc|h}!{~n} +Hello {name|js|j|uc|s|h}!{~n} +Hello {name|js|j|uc|s|u}!{~n} +Hello {name|js|j|uc|h|s}!{~n} +Hello {name|js|j|uc|h|u}!{~n} +Hello {name|js|j|uc|u|s}!{~n} +Hello {name|js|j|uc|u|h}!{~n} +Hello {name|js|u|s|h|j}!{~n} +Hello {name|js|u|s|h|uc}!{~n} +Hello {name|js|u|s|j|h}!{~n} +Hello {name|js|u|s|j|uc}!{~n} +Hello {name|js|u|s|uc|h}!{~n} +Hello {name|js|u|s|uc|j}!{~n} +Hello {name|js|u|h|s|j}!{~n} +Hello {name|js|u|h|s|uc}!{~n} +Hello {name|js|u|h|j|s}!{~n} +Hello {name|js|u|h|j|uc}!{~n} +Hello {name|js|u|h|uc|s}!{~n} +Hello {name|js|u|h|uc|j}!{~n} +Hello {name|js|u|j|s|h}!{~n} +Hello {name|js|u|j|s|uc}!{~n} +Hello {name|js|u|j|h|s}!{~n} +Hello {name|js|u|j|h|uc}!{~n} +Hello {name|js|u|j|uc|s}!{~n} +Hello {name|js|u|j|uc|h}!{~n} +Hello {name|js|u|uc|s|h}!{~n} +Hello {name|js|u|uc|s|j}!{~n} +Hello {name|js|u|uc|h|s}!{~n} +Hello {name|js|u|uc|h|j}!{~n} +Hello {name|js|u|uc|j|s}!{~n} +Hello {name|js|u|uc|j|h}!{~n} +Hello {name|js|uc|s|h|j}!{~n} +Hello {name|js|uc|s|h|u}!{~n} +Hello {name|js|uc|s|j|h}!{~n} +Hello {name|js|uc|s|j|u}!{~n} +Hello {name|js|uc|s|u|h}!{~n} +Hello {name|js|uc|s|u|j}!{~n} +Hello {name|js|uc|h|s|j}!{~n} +Hello {name|js|uc|h|s|u}!{~n} +Hello {name|js|uc|h|j|s}!{~n} +Hello {name|js|uc|h|j|u}!{~n} +Hello {name|js|uc|h|u|s}!{~n} +Hello {name|js|uc|h|u|j}!{~n} +Hello {name|js|uc|j|s|h}!{~n} +Hello {name|js|uc|j|s|u}!{~n} +Hello {name|js|uc|j|h|s}!{~n} +Hello {name|js|uc|j|h|u}!{~n} +Hello {name|js|uc|j|u|s}!{~n} +Hello {name|js|uc|j|u|h}!{~n} +Hello {name|js|uc|u|s|h}!{~n} +Hello {name|js|uc|u|s|j}!{~n} +Hello {name|js|uc|u|h|s}!{~n} +Hello {name|js|uc|u|h|j}!{~n} +Hello {name|js|uc|u|j|s}!{~n} +Hello {name|js|uc|u|j|h}!{~n} diff --git a/js/test_cases/generated_filters/string.json b/js/test_cases/generated_filters/string.json new file mode 100644 index 0000000..6b66c0f --- /dev/null +++ b/js/test_cases/generated_filters/string.json @@ -0,0 +1,3 @@ +{ + "name": "{\"foo\": \"bar\"}" +} From c81a0c50019ad6958e8838c55ad279a2cc177ff4 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 23 May 2020 15:58:12 -0400 Subject: [PATCH 02/16] Add tests for the other json types. --- js/test_cases/generated_filters/array.json | 6 ++++++ js/test_cases/generated_filters/boolean.json | 3 +++ js/test_cases/generated_filters/float.json | 3 +++ js/test_cases/generated_filters/integer.json | 3 +++ js/test_cases/generated_filters/null.json | 3 +++ js/test_cases/generated_filters/object.json | 5 +++++ 6 files changed, 23 insertions(+) create mode 100644 js/test_cases/generated_filters/array.json create mode 100644 js/test_cases/generated_filters/boolean.json create mode 100644 js/test_cases/generated_filters/float.json create mode 100644 js/test_cases/generated_filters/integer.json create mode 100644 js/test_cases/generated_filters/null.json create mode 100644 js/test_cases/generated_filters/object.json diff --git a/js/test_cases/generated_filters/array.json b/js/test_cases/generated_filters/array.json new file mode 100644 index 0000000..21ac75d --- /dev/null +++ b/js/test_cases/generated_filters/array.json @@ -0,0 +1,6 @@ +{ + "name": [ + "foo", + "bar" + ] +} diff --git a/js/test_cases/generated_filters/boolean.json b/js/test_cases/generated_filters/boolean.json new file mode 100644 index 0000000..925ccd9 --- /dev/null +++ b/js/test_cases/generated_filters/boolean.json @@ -0,0 +1,3 @@ +{ + "name": true +} diff --git a/js/test_cases/generated_filters/float.json b/js/test_cases/generated_filters/float.json new file mode 100644 index 0000000..e84feaa --- /dev/null +++ b/js/test_cases/generated_filters/float.json @@ -0,0 +1,3 @@ +{ + "name": 7.4 +} diff --git a/js/test_cases/generated_filters/integer.json b/js/test_cases/generated_filters/integer.json new file mode 100644 index 0000000..4c5ec73 --- /dev/null +++ b/js/test_cases/generated_filters/integer.json @@ -0,0 +1,3 @@ +{ + "name": 4 +} diff --git a/js/test_cases/generated_filters/null.json b/js/test_cases/generated_filters/null.json new file mode 100644 index 0000000..298db8f --- /dev/null +++ b/js/test_cases/generated_filters/null.json @@ -0,0 +1,3 @@ +{ + "name": null +} diff --git a/js/test_cases/generated_filters/object.json b/js/test_cases/generated_filters/object.json new file mode 100644 index 0000000..7a016fe --- /dev/null +++ b/js/test_cases/generated_filters/object.json @@ -0,0 +1,5 @@ +{ + "name": { + "foo": "bar" + } +} From 894da5191630d768a98c90d4f3b9d911b2b2bf89 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 23 May 2020 16:04:36 -0400 Subject: [PATCH 03/16] Adding a manually written filters test for more specific testing. The generated one is more for brute forcing compliance. --- js/test_cases/filters/input1.json | 14 ++++++++++++++ js/test_cases/filters/main.dust | 3 +++ 2 files changed, 17 insertions(+) create mode 100644 js/test_cases/filters/input1.json create mode 100644 js/test_cases/filters/main.dust diff --git a/js/test_cases/filters/input1.json b/js/test_cases/filters/input1.json new file mode 100644 index 0000000..b72b0cf --- /dev/null +++ b/js/test_cases/filters/input1.json @@ -0,0 +1,14 @@ +{ + "string": "{\"foo\": \"bar\"}", + "integer": 4, + "float": 7.4, + "boolean": true, + "null": null, + "array": [ + "foo", + "bar" + ], + "object": { + "foo": "bar" + } +} diff --git a/js/test_cases/filters/main.dust b/js/test_cases/filters/main.dust new file mode 100644 index 0000000..ab38db4 --- /dev/null +++ b/js/test_cases/filters/main.dust @@ -0,0 +1,3 @@ +Object parsed: {string|jp}{~n} +Object parsed and stringified: {string|jp|js}{~n} +Object stringified and parsed: {string|js|jp}{~n} From 34c8d24a69155ff3744479bdc82827376558ceb9 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 23 May 2020 16:07:24 -0400 Subject: [PATCH 04/16] Adding to the manual array test. --- js/test_cases/filters/main.dust | 3 +++ 1 file changed, 3 insertions(+) diff --git a/js/test_cases/filters/main.dust b/js/test_cases/filters/main.dust index ab38db4..73749a5 100644 --- a/js/test_cases/filters/main.dust +++ b/js/test_cases/filters/main.dust @@ -1,3 +1,6 @@ Object parsed: {string|jp}{~n} Object parsed and stringified: {string|jp|js}{~n} Object stringified and parsed: {string|js|jp}{~n} + +Array stringified: {array|js}{~n} +Array stringified and parsed: {array|js|jp}{~n} From 6a9fe9e1bed902f5b6edc5a38472f960803c5d07 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 23 May 2020 17:23:48 -0400 Subject: [PATCH 05/16] Beginning of applying filters for json types. Currently only supports html escaping. --- js/test_cases/filters/input1.json | 3 +- js/test_cases/filters/main.dust | 15 +++++++-- src/bin.rs | 56 ++++++++++++++++++++++++++++++- 3 files changed, 69 insertions(+), 5 deletions(-) diff --git a/js/test_cases/filters/input1.json b/js/test_cases/filters/input1.json index b72b0cf..c0bb598 100644 --- a/js/test_cases/filters/input1.json +++ b/js/test_cases/filters/input1.json @@ -10,5 +10,6 @@ ], "object": { "foo": "bar" - } + }, + "special_characters": "<>&\"'" } diff --git a/js/test_cases/filters/main.dust b/js/test_cases/filters/main.dust index 73749a5..80fa99a 100644 --- a/js/test_cases/filters/main.dust +++ b/js/test_cases/filters/main.dust @@ -1,6 +1,15 @@ -Object parsed: {string|jp}{~n} -Object parsed and stringified: {string|jp|js}{~n} -Object stringified and parsed: {string|js|jp}{~n} +Special characters: {special_characters}{~n} +Object string parsed: {string|jp}{~n} +Object string parsed and stringified: {string|jp|js}{~n} +Object string stringified and parsed: {string|js|jp}{~n} + +Array: {array}{~n} Array stringified: {array|js}{~n} Array stringified and parsed: {array|js|jp}{~n} + +Object: {object}{~n} +Object html escaped: {object|h}{~n} +Object html escaping disabled: {object|s}{~n} +Object stringified: {object|js}{~n} +Object stringified and parsed: {object|js|jp}{~n} diff --git a/src/bin.rs b/src/bin.rs index 34f0f02..a8e46d3 100644 --- a/src/bin.rs +++ b/src/bin.rs @@ -73,11 +73,60 @@ fn read_context_from_stdin() -> serde_json::Value { serde_json::from_str(&buffer).expect("Failed to parse json") } +fn html_escape(inp: &str) -> String { + // Adding 10% space from the original to avoid re-allocations by + // leaving room for escaped sequences. + let mut output = String::with_capacity(((inp.len() as f64) * 1.1) as usize); + inp.chars().for_each(|c| match c { + '<' => output.push_str("<"), + '>' => output.push_str(">"), + '"' => output.push_str("""), + '\'' => output.push_str("'"), + '&' => output.push_str("&"), + _ => output.push(c), + }); + output +} + +fn apply_filter( + json_value: &serde_json::Value, + filter: &Filter, +) -> Result { + match (json_value, filter) { + (serde_json::Value::String(string), Filter::HtmlEncode) => { + Ok(serde_json::Value::String(html_escape(string))) + } + (_, Filter::HtmlEncode) => Ok(serde_json::Value::String(html_escape( + &json_value.render(&Vec::new())?, + ))), + _ => panic!("Unimplemented"), + } +} + +fn apply_filters( + json_value: &serde_json::Value, + filters: &[Filter], +) -> Result { + let mut final_value: serde_json::Value = apply_filter(json_value, &filters[0])?; + + for filter in &filters[1..] { + final_value = apply_filter(&final_value, filter)?; + } + + Ok(final_value) +} + impl ContextElement for serde_json::Value {} impl Renderable for serde_json::Value { fn render(&self, _filters: &Vec) -> Result { - match self { + let after_apply = if _filters.is_empty() { + Some(apply_filters(self, _filters)?) + } else { + None + }; + + match after_apply.as_ref().unwrap_or(self) { serde_json::Value::Null => Ok("".to_owned()), serde_json::Value::Bool(boolean) => Ok(boolean.to_string()), serde_json::Value::Number(num) => Ok(num.to_string()), @@ -395,4 +444,9 @@ mod tests { Ok::<_, RenderError>("3,5,7,9".to_owned()) ); } + + #[test] + fn test_html_escape() { + assert_eq!(html_escape("<>&\"'"), "<>&"'".to_owned()) + } } From 624c83b680853a5d653240e3d942fa281a142cc5 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 23 May 2020 17:57:19 -0400 Subject: [PATCH 06/16] Automatically appending the html escape filter on the renderer side. --- js/test_cases/filters/main.dust | 6 ++++++ src/renderer/renderer.rs | 24 +++++++++++++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/js/test_cases/filters/main.dust b/js/test_cases/filters/main.dust index 80fa99a..3fe4c40 100644 --- a/js/test_cases/filters/main.dust +++ b/js/test_cases/filters/main.dust @@ -1,4 +1,9 @@ Special characters: {special_characters}{~n} +Special characters html escaping disabled: {special_characters|s}{~n} +Special characters html escaping disabled and enabled: {special_characters|s|h}{~n} +Special characters html escaping enabled and disabled: {special_characters|h|s}{~n} +Special characters html escaped twice: {special_characters|h|h}{~n} + Object string parsed: {string|jp}{~n} Object string parsed and stringified: {string|jp|js}{~n} @@ -13,3 +18,4 @@ Object html escaped: {object|h}{~n} Object html escaping disabled: {object|s}{~n} Object stringified: {object|js}{~n} Object stringified and parsed: {object|js|jp}{~n} +Object stringified, html escaping disabled, parsed, stringified, and html escaped: {object|js|s|jp|js|h}{~n} diff --git a/src/renderer/renderer.rs b/src/renderer/renderer.rs index 1546e12..0c25eae 100644 --- a/src/renderer/renderer.rs +++ b/src/renderer/renderer.rs @@ -6,7 +6,7 @@ use crate::parser::PartialNameElement; use crate::parser::RValue; use crate::parser::Special; use crate::parser::Template; -use crate::parser::TemplateElement; +use crate::parser::{Filter, TemplateElement}; use crate::renderer::context_element::ContextElement; use crate::renderer::errors::CompileError; use crate::renderer::errors::RenderError; @@ -15,7 +15,7 @@ use crate::renderer::inline_partial_tree::extract_inline_partials; use crate::renderer::inline_partial_tree::InlinePartialTreeElement; use crate::renderer::parameters_context::ParametersContext; use crate::renderer::walking::walk_path; -use std::{cmp::Ordering, collections::HashMap}; +use std::collections::HashMap; #[derive(Clone, Debug)] pub struct CompiledTemplate<'a> { @@ -153,7 +153,7 @@ impl<'a> DustRenderer<'a> { if loop_elements.is_empty() { return Ok("".to_owned()); } else { - return final_val.render(&reference.filters); + return final_val.render(&Self::preprocess_filters(&reference.filters)); } } } @@ -500,6 +500,24 @@ impl<'a> DustRenderer<'a> { }, } } + + fn preprocess_filters(filters: &Vec) -> Vec { + let mut final_filters: Vec = filters + .into_iter() + .filter(|f| f != &&Filter::DisableHtmlEncode) + .map(|f| f.clone()) + .collect(); + + // If the user has not specified any escaping filter (|s or + // |h), automatically add an html escape filter + if !filters + .iter() + .any(|f| f == &Filter::DisableHtmlEncode || f == &Filter::HtmlEncode) + { + final_filters.push(Filter::HtmlEncode); + } + final_filters + } } #[cfg(test)] From e22bffd2ba1a4a18658a792690b5dbde2ff6d481 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 23 May 2020 18:14:23 -0400 Subject: [PATCH 07/16] Implemented the json stringify and parse filters. --- js/test_cases/filters/README.md | 8 ++++++++ src/bin.rs | 22 ++++++++++++++++++++-- src/renderer/errors.rs | 11 +++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 js/test_cases/filters/README.md diff --git a/js/test_cases/filters/README.md b/js/test_cases/filters/README.md new file mode 100644 index 0000000..3325603 --- /dev/null +++ b/js/test_cases/filters/README.md @@ -0,0 +1,8 @@ +HTML Escaping +------------- + +Dust automatically applies the `|h` filter to html escape unless `|s` is applied to disable automatic html escaping. It seems that if you manually specify `|h` and `|s` in the same filter, then it still html escapes, so my theory on the logic is: + +Iterate over all filters +If `|s` or `|h` is not present append `|h`, otherwise, leave filters as-in +During render, `|s` does nothing, so we can just remove it on the dust side to prevent confusion. diff --git a/src/bin.rs b/src/bin.rs index a8e46d3..102d53d 100644 --- a/src/bin.rs +++ b/src/bin.rs @@ -93,12 +93,30 @@ fn apply_filter( filter: &Filter, ) -> Result { match (json_value, filter) { + // Html escape filter (serde_json::Value::String(string), Filter::HtmlEncode) => { Ok(serde_json::Value::String(html_escape(string))) } (_, Filter::HtmlEncode) => Ok(serde_json::Value::String(html_escape( &json_value.render(&Vec::new())?, ))), + // Disable html escape filter + (_, Filter::DisableHtmlEncode) => panic!("The |s filter is automatically removed by the renderer since it is a no-op during rendering."), + // Parse JSON filter + (serde_json::Value::String(string), Filter::JsonParse) => { + serde_json::from_str(&string).or(Err(RenderError::InvalidJson(string.to_owned()))) + } + (_, Filter::JsonParse) => { + let rendered_value = json_value.render(&Vec::new())?; + serde_json::from_str(&rendered_value).or(Err(RenderError::InvalidJson(rendered_value))) + } + // Json Stringify filter + (_, Filter::JsonStringify) => { + Ok(serde_json::Value::String(json_value.to_string())) + } + // TODO: javascript string escape + // TODO: EncodeUri + // TODO: EncodeUriComponent _ => panic!("Unimplemented"), } } @@ -121,9 +139,9 @@ impl ContextElement for serde_json::Value {} impl Renderable for serde_json::Value { fn render(&self, _filters: &Vec) -> Result { let after_apply = if _filters.is_empty() { - Some(apply_filters(self, _filters)?) - } else { None + } else { + Some(apply_filters(self, _filters)?) }; match after_apply.as_ref().unwrap_or(self) { diff --git a/src/renderer/errors.rs b/src/renderer/errors.rs index a72ef61..8c458d7 100644 --- a/src/renderer/errors.rs +++ b/src/renderer/errors.rs @@ -8,6 +8,7 @@ use std::fmt; pub enum RenderError { Generic(String), TemplateNotFound(String), + InvalidJson(String), } #[derive(PartialEq)] @@ -27,6 +28,11 @@ impl fmt::Display for RenderError { RenderError::TemplateNotFound(name) => { write!(f, "No template named {} in context", name) } + RenderError::InvalidJson(invalid_json) => write!( + f, + "Attempted to parse the following invalid JSON: {}", + invalid_json + ), } } } @@ -38,6 +44,11 @@ impl fmt::Debug for RenderError { RenderError::TemplateNotFound(name) => { write!(f, "No template named {} in context", name) } + RenderError::InvalidJson(invalid_json) => write!( + f, + "Attempted to parse the following invalid JSON: {}", + invalid_json + ), } } } From f3fef17d4b725335992670e313cb27295f91bba3 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 23 May 2020 18:18:59 -0400 Subject: [PATCH 08/16] I was wrong, html escape filter is appended even if an html escape filter is already there. --- js/test_cases/filters/README.md | 2 +- js/test_cases/filters/main.dust | 1 + src/renderer/renderer.rs | 5 +---- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/js/test_cases/filters/README.md b/js/test_cases/filters/README.md index 3325603..028a871 100644 --- a/js/test_cases/filters/README.md +++ b/js/test_cases/filters/README.md @@ -4,5 +4,5 @@ HTML Escaping Dust automatically applies the `|h` filter to html escape unless `|s` is applied to disable automatic html escaping. It seems that if you manually specify `|h` and `|s` in the same filter, then it still html escapes, so my theory on the logic is: Iterate over all filters -If `|s` or `|h` is not present append `|h`, otherwise, leave filters as-in +If `|s` is not present append `|h`, otherwise, leave filters as-in During render, `|s` does nothing, so we can just remove it on the dust side to prevent confusion. diff --git a/js/test_cases/filters/main.dust b/js/test_cases/filters/main.dust index 3fe4c40..df5b2d4 100644 --- a/js/test_cases/filters/main.dust +++ b/js/test_cases/filters/main.dust @@ -2,6 +2,7 @@ Special characters: {special_characters}{~n} Special characters html escaping disabled: {special_characters|s}{~n} Special characters html escaping disabled and enabled: {special_characters|s|h}{~n} Special characters html escaping enabled and disabled: {special_characters|h|s}{~n} +Special characters html escaped once: {special_characters|h}{~n} Special characters html escaped twice: {special_characters|h|h}{~n} diff --git a/src/renderer/renderer.rs b/src/renderer/renderer.rs index 0c25eae..eab630e 100644 --- a/src/renderer/renderer.rs +++ b/src/renderer/renderer.rs @@ -510,10 +510,7 @@ impl<'a> DustRenderer<'a> { // If the user has not specified any escaping filter (|s or // |h), automatically add an html escape filter - if !filters - .iter() - .any(|f| f == &Filter::DisableHtmlEncode || f == &Filter::HtmlEncode) - { + if !filters.iter().any(|f| f == &Filter::DisableHtmlEncode) { final_filters.push(Filter::HtmlEncode); } final_filters From 8d2728a7677218901795518613497d5bbb3fb5e5 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 23 May 2020 18:40:09 -0400 Subject: [PATCH 09/16] Implement javascript string escaping. --- js/test_cases/filters/input1.json | 2 +- js/test_cases/filters/main.dust | 6 ++++++ src/bin.rs | 25 ++++++++++++++++++++++++- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/js/test_cases/filters/input1.json b/js/test_cases/filters/input1.json index c0bb598..0dfba3a 100644 --- a/js/test_cases/filters/input1.json +++ b/js/test_cases/filters/input1.json @@ -11,5 +11,5 @@ "object": { "foo": "bar" }, - "special_characters": "<>&\"'" + "special_characters": "<>xx\b&\"'\t\f\n\r\\" } diff --git a/js/test_cases/filters/main.dust b/js/test_cases/filters/main.dust index df5b2d4..f18a342 100644 --- a/js/test_cases/filters/main.dust +++ b/js/test_cases/filters/main.dust @@ -20,3 +20,9 @@ Object html escaping disabled: {object|s}{~n} Object stringified: {object|js}{~n} Object stringified and parsed: {object|js|jp}{~n} Object stringified, html escaping disabled, parsed, stringified, and html escaped: {object|js|s|jp|js|h}{~n} + +Special characters: {special_characters}{~n} +Special characters html escaping disabled and javascript escaped: {special_characters|s|j}{~n} +Special characters javascript escaped and html escaping disabled: {special_characters|j|s}{~n} +Special characters javascript escaped once: {special_characters|j}{~n} +Special characters javascript escaped twice: {special_characters|j|j}{~n} diff --git a/src/bin.rs b/src/bin.rs index 102d53d..668d527 100644 --- a/src/bin.rs +++ b/src/bin.rs @@ -88,6 +88,23 @@ fn html_escape(inp: &str) -> String { output } +fn javascript_escape(inp: &str) -> String { + // Adding 10% space from the original to avoid re-allocations by + // leaving room for escaped sequences. + let mut output = String::with_capacity(((inp.len() as f64) * 1.1) as usize); + inp.chars().for_each(|c| match c { + '"' => output.push_str(r#"\""#), + '\'' => output.push_str(r#"\'"#), + '\t' => output.push_str(r#"\t"#), + '\x0C' => output.push_str(r#"\f"#), + '\n' => output.push_str(r#"\n"#), + '\r' => output.push_str(r#"\r"#), + '\\' => output.push_str(r#"\\"#), + _ => output.push(c), + }); + output +} + fn apply_filter( json_value: &serde_json::Value, filter: &Filter, @@ -114,7 +131,13 @@ fn apply_filter( (_, Filter::JsonStringify) => { Ok(serde_json::Value::String(json_value.to_string())) } - // TODO: javascript string escape + // Javascript escape filter + (serde_json::Value::String(string), Filter::JavascriptStringEncode) => { + Ok(serde_json::Value::String(javascript_escape(string))) + } + (_, Filter::JavascriptStringEncode) => Ok(serde_json::Value::String(javascript_escape( + &json_value.render(&Vec::new())?, + ))), // TODO: EncodeUri // TODO: EncodeUriComponent _ => panic!("Unimplemented"), From 46d4f50410c5ee03fdd5127859146fa9149f0a0c Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 23 May 2020 19:06:09 -0400 Subject: [PATCH 10/16] Implement the encodeURI filter. --- js/test_cases/filters/input1.json | 2 +- js/test_cases/filters/main.dust | 6 +++++ src/bin.rs | 43 ++++++++++++++++++++++++++++++- 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/js/test_cases/filters/input1.json b/js/test_cases/filters/input1.json index 0dfba3a..3c23767 100644 --- a/js/test_cases/filters/input1.json +++ b/js/test_cases/filters/input1.json @@ -11,5 +11,5 @@ "object": { "foo": "bar" }, - "special_characters": "<>xx\b&\"'\t\f\n\r\\" + "special_characters": "<>xx\b&\"'\t\f\n\r\\!@#$%^&*()[]{}<>,./?:;_-+=`" } diff --git a/js/test_cases/filters/main.dust b/js/test_cases/filters/main.dust index f18a342..244fa63 100644 --- a/js/test_cases/filters/main.dust +++ b/js/test_cases/filters/main.dust @@ -26,3 +26,9 @@ Special characters html escaping disabled and javascript escaped: {special_chara Special characters javascript escaped and html escaping disabled: {special_characters|j|s}{~n} Special characters javascript escaped once: {special_characters|j}{~n} Special characters javascript escaped twice: {special_characters|j|j}{~n} + +Special characters: {special_characters}{~n} +Special characters html escaping disabled and encodeURI: {special_characters|s|u}{~n} +Special characters encodeURI and html escaping disabled: {special_characters|u|s}{~n} +Special characters encodeURI once: {special_characters|u}{~n} +Special characters encodeURI twice: {special_characters|u|u}{~n} diff --git a/src/bin.rs b/src/bin.rs index 668d527..6d83ed2 100644 --- a/src/bin.rs +++ b/src/bin.rs @@ -100,11 +100,45 @@ fn javascript_escape(inp: &str) -> String { '\n' => output.push_str(r#"\n"#), '\r' => output.push_str(r#"\r"#), '\\' => output.push_str(r#"\\"#), + '/' => output.push_str(r#"\/"#), _ => output.push(c), }); output } +fn get_utf8_hex(inp: char) -> String { + let num_bytes = inp.len_utf8(); + let mut byte_buffer = [0; 4]; // UTF-8 supports up to 4 bytes per codepoint + let mut output = String::with_capacity(num_bytes * 2); + + inp.encode_utf8(&mut byte_buffer); + + for b in &byte_buffer[..num_bytes] { + output.push_str(&format!("{:02X}", b)); + } + + output +} + +fn encode_uri(inp: &str) -> String { + // Adding 10% space from the original to avoid re-allocations by + // leaving room for escaped sequences. + let mut output = String::with_capacity(((inp.len() as f64) * 1.1) as usize); + inp.chars().for_each(|c| match c { + '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | 'a' | 'b' | 'c' | 'd' | 'e' + | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' + | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' + | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' + | 'V' | 'W' | 'X' | 'Y' | 'Z' | ';' | ',' | '/' | '?' | ':' | '@' | '&' | '=' | '+' + | '$' | '-' | '_' | '.' | '!' | '~' | '*' | '\'' | '(' | ')' | '#' => output.push(c), + _ => { + output.push('%'); + output.push_str(&get_utf8_hex(c)); + } + }); + output +} + fn apply_filter( json_value: &serde_json::Value, filter: &Filter, @@ -138,7 +172,14 @@ fn apply_filter( (_, Filter::JavascriptStringEncode) => Ok(serde_json::Value::String(javascript_escape( &json_value.render(&Vec::new())?, ))), - // TODO: EncodeUri + // EncodeUri filter + (serde_json::Value::String(string), Filter::EncodeUri) => { + Ok(serde_json::Value::String(encode_uri(string))) + } + (_, Filter::EncodeUri) => Ok(serde_json::Value::String(encode_uri( + &json_value.render(&Vec::new())?, + ))), + // TODO: EncodeUriComponent _ => panic!("Unimplemented"), } From bd7866e973d5c2d147ebc9b3f2c55c568f47bd49 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 23 May 2020 19:10:02 -0400 Subject: [PATCH 11/16] Implement encodeURIComponent filter. --- js/test_cases/filters/main.dust | 6 ++++++ src/bin.rs | 32 ++++++++++++++++++++++++++++---- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/js/test_cases/filters/main.dust b/js/test_cases/filters/main.dust index 244fa63..202d4a2 100644 --- a/js/test_cases/filters/main.dust +++ b/js/test_cases/filters/main.dust @@ -32,3 +32,9 @@ Special characters html escaping disabled and encodeURI: {special_characters|s|u Special characters encodeURI and html escaping disabled: {special_characters|u|s}{~n} Special characters encodeURI once: {special_characters|u}{~n} Special characters encodeURI twice: {special_characters|u|u}{~n} + +Special characters: {special_characters}{~n} +Special characters html escaping disabled and encodeURIComponent: {special_characters|s|uc}{~n} +Special characters encodeURIComponent and html escaping disabled: {special_characters|uc|s}{~n} +Special characters encodeURIComponent once: {special_characters|uc}{~n} +Special characters encodeURIComponent twice: {special_characters|uc|uc}{~n} diff --git a/src/bin.rs b/src/bin.rs index 6d83ed2..caf5ffd 100644 --- a/src/bin.rs +++ b/src/bin.rs @@ -139,6 +139,26 @@ fn encode_uri(inp: &str) -> String { output } +fn encode_uri_component(inp: &str) -> String { + // Adding 10% space from the original to avoid re-allocations by + // leaving room for escaped sequences. + let mut output = String::with_capacity(((inp.len() as f64) * 1.1) as usize); + inp.chars().for_each(|c| match c { + '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | 'a' | 'b' | 'c' | 'd' | 'e' + | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' + | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' + | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' + | 'V' | 'W' | 'X' | 'Y' | 'Z' | '-' | '_' | '.' | '!' | '~' | '*' | '\'' | '(' | ')' => { + output.push(c) + } + _ => { + output.push('%'); + output.push_str(&get_utf8_hex(c)); + } + }); + output +} + fn apply_filter( json_value: &serde_json::Value, filter: &Filter, @@ -172,16 +192,20 @@ fn apply_filter( (_, Filter::JavascriptStringEncode) => Ok(serde_json::Value::String(javascript_escape( &json_value.render(&Vec::new())?, ))), - // EncodeUri filter + // EncodeURI filter (serde_json::Value::String(string), Filter::EncodeUri) => { Ok(serde_json::Value::String(encode_uri(string))) } (_, Filter::EncodeUri) => Ok(serde_json::Value::String(encode_uri( &json_value.render(&Vec::new())?, ))), - - // TODO: EncodeUriComponent - _ => panic!("Unimplemented"), + // EncodeURIComponent filter + (serde_json::Value::String(string), Filter::EncodeUriComponent) => { + Ok(serde_json::Value::String(encode_uri_component(string))) + } + (_, Filter::EncodeUriComponent) => Ok(serde_json::Value::String(encode_uri_component( + &json_value.render(&Vec::new())?, + ))), } } From 71378ed37defab163fc7f28fb04903b335038b8c Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 23 May 2020 19:34:38 -0400 Subject: [PATCH 12/16] Fix a bug w.r.t. quoting and escaping boolean values with filters. --- js/test_cases/filters/README.md | 5 +++++ src/bin.rs | 3 +++ src/renderer/renderer.rs | 1 + 3 files changed, 9 insertions(+) diff --git a/js/test_cases/filters/README.md b/js/test_cases/filters/README.md index 028a871..d7bdc6e 100644 --- a/js/test_cases/filters/README.md +++ b/js/test_cases/filters/README.md @@ -6,3 +6,8 @@ Dust automatically applies the `|h` filter to html escape unless `|s` is applied Iterate over all filters If `|s` is not present append `|h`, otherwise, leave filters as-in During render, `|s` does nothing, so we can just remove it on the dust side to prevent confusion. + +Quoting +------- + +Oddly enough, `boolean|j|js` gets no quotes (meaning `boolean|j` remains a boolean) but `boolean|h|js` does get quotes (meaning that `boolean|h` becomes a string) diff --git a/src/bin.rs b/src/bin.rs index caf5ffd..629f87f 100644 --- a/src/bin.rs +++ b/src/bin.rs @@ -189,6 +189,9 @@ fn apply_filter( (serde_json::Value::String(string), Filter::JavascriptStringEncode) => { Ok(serde_json::Value::String(javascript_escape(string))) } + (serde_json::Value::Bool(boolean), Filter::JavascriptStringEncode) => { + Ok(serde_json::Value::Bool(*boolean)) + } (_, Filter::JavascriptStringEncode) => Ok(serde_json::Value::String(javascript_escape( &json_value.render(&Vec::new())?, ))), diff --git a/src/renderer/renderer.rs b/src/renderer/renderer.rs index eab630e..7cf4e99 100644 --- a/src/renderer/renderer.rs +++ b/src/renderer/renderer.rs @@ -525,6 +525,7 @@ mod tests { use crate::renderer::context_element::Renderable; use crate::renderer::context_element::Walkable; use crate::renderer::CompareContextElement; + use std::cmp::Ordering; impl ContextElement for String {} From 7ff1f310f5436fac70f10754894069825382cad0 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 23 May 2020 22:06:25 -0400 Subject: [PATCH 13/16] Same issue with numbers. --- src/bin.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/bin.rs b/src/bin.rs index 629f87f..56ed1a2 100644 --- a/src/bin.rs +++ b/src/bin.rs @@ -192,6 +192,9 @@ fn apply_filter( (serde_json::Value::Bool(boolean), Filter::JavascriptStringEncode) => { Ok(serde_json::Value::Bool(*boolean)) } + (serde_json::Value::Number(number), Filter::JavascriptStringEncode) => { + Ok(serde_json::Value::Number(number.clone())) + } (_, Filter::JavascriptStringEncode) => Ok(serde_json::Value::String(javascript_escape( &json_value.render(&Vec::new())?, ))), From 96e8dd63a765470c9b8126d2e606d1a9d4298634 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 23 May 2020 22:23:54 -0400 Subject: [PATCH 14/16] Dustjs appears to have an output limit of 65536 characters which was breaking the string test, so I split it in two. --- js/test_cases/generated_filters/main.dust | 720 ------------------ js/test_cases/generated_filters_two/README.md | 1 + .../generated_filters_two/array.json | 6 + .../generated_filters_two/boolean.json | 3 + .../generated_filters_two/float.json | 3 + .../generated_filters_two/integer.json | 3 + js/test_cases/generated_filters_two/main.dust | 720 ++++++++++++++++++ js/test_cases/generated_filters_two/null.json | 3 + .../generated_filters_two/object.json | 5 + .../generated_filters_two/string.json | 3 + 10 files changed, 747 insertions(+), 720 deletions(-) create mode 100644 js/test_cases/generated_filters_two/README.md create mode 100644 js/test_cases/generated_filters_two/array.json create mode 100644 js/test_cases/generated_filters_two/boolean.json create mode 100644 js/test_cases/generated_filters_two/float.json create mode 100644 js/test_cases/generated_filters_two/integer.json create mode 100644 js/test_cases/generated_filters_two/main.dust create mode 100644 js/test_cases/generated_filters_two/null.json create mode 100644 js/test_cases/generated_filters_two/object.json create mode 100644 js/test_cases/generated_filters_two/string.json diff --git a/js/test_cases/generated_filters/main.dust b/js/test_cases/generated_filters/main.dust index d849bbe..c057b22 100644 --- a/js/test_cases/generated_filters/main.dust +++ b/js/test_cases/generated_filters/main.dust @@ -515,723 +515,3 @@ Hello {name|js|uc|j|u}!{~n} Hello {name|js|uc|u|s}!{~n} Hello {name|js|uc|u|h}!{~n} Hello {name|js|uc|u|j}!{~n} -Hello {name|s|h|j|u|uc}!{~n} -Hello {name|s|h|j|u|js}!{~n} -Hello {name|s|h|j|uc|u}!{~n} -Hello {name|s|h|j|uc|js}!{~n} -Hello {name|s|h|j|js|u}!{~n} -Hello {name|s|h|j|js|uc}!{~n} -Hello {name|s|h|u|j|uc}!{~n} -Hello {name|s|h|u|j|js}!{~n} -Hello {name|s|h|u|uc|j}!{~n} -Hello {name|s|h|u|uc|js}!{~n} -Hello {name|s|h|u|js|j}!{~n} -Hello {name|s|h|u|js|uc}!{~n} -Hello {name|s|h|uc|j|u}!{~n} -Hello {name|s|h|uc|j|js}!{~n} -Hello {name|s|h|uc|u|j}!{~n} -Hello {name|s|h|uc|u|js}!{~n} -Hello {name|s|h|uc|js|j}!{~n} -Hello {name|s|h|uc|js|u}!{~n} -Hello {name|s|h|js|j|u}!{~n} -Hello {name|s|h|js|j|uc}!{~n} -Hello {name|s|h|js|u|j}!{~n} -Hello {name|s|h|js|u|uc}!{~n} -Hello {name|s|h|js|uc|j}!{~n} -Hello {name|s|h|js|uc|u}!{~n} -Hello {name|s|j|h|u|uc}!{~n} -Hello {name|s|j|h|u|js}!{~n} -Hello {name|s|j|h|uc|u}!{~n} -Hello {name|s|j|h|uc|js}!{~n} -Hello {name|s|j|h|js|u}!{~n} -Hello {name|s|j|h|js|uc}!{~n} -Hello {name|s|j|u|h|uc}!{~n} -Hello {name|s|j|u|h|js}!{~n} -Hello {name|s|j|u|uc|h}!{~n} -Hello {name|s|j|u|uc|js}!{~n} -Hello {name|s|j|u|js|h}!{~n} -Hello {name|s|j|u|js|uc}!{~n} -Hello {name|s|j|uc|h|u}!{~n} -Hello {name|s|j|uc|h|js}!{~n} -Hello {name|s|j|uc|u|h}!{~n} -Hello {name|s|j|uc|u|js}!{~n} -Hello {name|s|j|uc|js|h}!{~n} -Hello {name|s|j|uc|js|u}!{~n} -Hello {name|s|j|js|h|u}!{~n} -Hello {name|s|j|js|h|uc}!{~n} -Hello {name|s|j|js|u|h}!{~n} -Hello {name|s|j|js|u|uc}!{~n} -Hello {name|s|j|js|uc|h}!{~n} -Hello {name|s|j|js|uc|u}!{~n} -Hello {name|s|u|h|j|uc}!{~n} -Hello {name|s|u|h|j|js}!{~n} -Hello {name|s|u|h|uc|j}!{~n} -Hello {name|s|u|h|uc|js}!{~n} -Hello {name|s|u|h|js|j}!{~n} -Hello {name|s|u|h|js|uc}!{~n} -Hello {name|s|u|j|h|uc}!{~n} -Hello {name|s|u|j|h|js}!{~n} -Hello {name|s|u|j|uc|h}!{~n} -Hello {name|s|u|j|uc|js}!{~n} -Hello {name|s|u|j|js|h}!{~n} -Hello {name|s|u|j|js|uc}!{~n} -Hello {name|s|u|uc|h|j}!{~n} -Hello {name|s|u|uc|h|js}!{~n} -Hello {name|s|u|uc|j|h}!{~n} -Hello {name|s|u|uc|j|js}!{~n} -Hello {name|s|u|uc|js|h}!{~n} -Hello {name|s|u|uc|js|j}!{~n} -Hello {name|s|u|js|h|j}!{~n} -Hello {name|s|u|js|h|uc}!{~n} -Hello {name|s|u|js|j|h}!{~n} -Hello {name|s|u|js|j|uc}!{~n} -Hello {name|s|u|js|uc|h}!{~n} -Hello {name|s|u|js|uc|j}!{~n} -Hello {name|s|uc|h|j|u}!{~n} -Hello {name|s|uc|h|j|js}!{~n} -Hello {name|s|uc|h|u|j}!{~n} -Hello {name|s|uc|h|u|js}!{~n} -Hello {name|s|uc|h|js|j}!{~n} -Hello {name|s|uc|h|js|u}!{~n} -Hello {name|s|uc|j|h|u}!{~n} -Hello {name|s|uc|j|h|js}!{~n} -Hello {name|s|uc|j|u|h}!{~n} -Hello {name|s|uc|j|u|js}!{~n} -Hello {name|s|uc|j|js|h}!{~n} -Hello {name|s|uc|j|js|u}!{~n} -Hello {name|s|uc|u|h|j}!{~n} -Hello {name|s|uc|u|h|js}!{~n} -Hello {name|s|uc|u|j|h}!{~n} -Hello {name|s|uc|u|j|js}!{~n} -Hello {name|s|uc|u|js|h}!{~n} -Hello {name|s|uc|u|js|j}!{~n} -Hello {name|s|uc|js|h|j}!{~n} -Hello {name|s|uc|js|h|u}!{~n} -Hello {name|s|uc|js|j|h}!{~n} -Hello {name|s|uc|js|j|u}!{~n} -Hello {name|s|uc|js|u|h}!{~n} -Hello {name|s|uc|js|u|j}!{~n} -Hello {name|s|js|h|j|u}!{~n} -Hello {name|s|js|h|j|uc}!{~n} -Hello {name|s|js|h|u|j}!{~n} -Hello {name|s|js|h|u|uc}!{~n} -Hello {name|s|js|h|uc|j}!{~n} -Hello {name|s|js|h|uc|u}!{~n} -Hello {name|s|js|j|h|u}!{~n} -Hello {name|s|js|j|h|uc}!{~n} -Hello {name|s|js|j|u|h}!{~n} -Hello {name|s|js|j|u|uc}!{~n} -Hello {name|s|js|j|uc|h}!{~n} -Hello {name|s|js|j|uc|u}!{~n} -Hello {name|s|js|u|h|j}!{~n} -Hello {name|s|js|u|h|uc}!{~n} -Hello {name|s|js|u|j|h}!{~n} -Hello {name|s|js|u|j|uc}!{~n} -Hello {name|s|js|u|uc|h}!{~n} -Hello {name|s|js|u|uc|j}!{~n} -Hello {name|s|js|uc|h|j}!{~n} -Hello {name|s|js|uc|h|u}!{~n} -Hello {name|s|js|uc|j|h}!{~n} -Hello {name|s|js|uc|j|u}!{~n} -Hello {name|s|js|uc|u|h}!{~n} -Hello {name|s|js|uc|u|j}!{~n} -Hello {name|h|s|j|u|uc}!{~n} -Hello {name|h|s|j|u|js}!{~n} -Hello {name|h|s|j|uc|u}!{~n} -Hello {name|h|s|j|uc|js}!{~n} -Hello {name|h|s|j|js|u}!{~n} -Hello {name|h|s|j|js|uc}!{~n} -Hello {name|h|s|u|j|uc}!{~n} -Hello {name|h|s|u|j|js}!{~n} -Hello {name|h|s|u|uc|j}!{~n} -Hello {name|h|s|u|uc|js}!{~n} -Hello {name|h|s|u|js|j}!{~n} -Hello {name|h|s|u|js|uc}!{~n} -Hello {name|h|s|uc|j|u}!{~n} -Hello {name|h|s|uc|j|js}!{~n} -Hello {name|h|s|uc|u|j}!{~n} -Hello {name|h|s|uc|u|js}!{~n} -Hello {name|h|s|uc|js|j}!{~n} -Hello {name|h|s|uc|js|u}!{~n} -Hello {name|h|s|js|j|u}!{~n} -Hello {name|h|s|js|j|uc}!{~n} -Hello {name|h|s|js|u|j}!{~n} -Hello {name|h|s|js|u|uc}!{~n} -Hello {name|h|s|js|uc|j}!{~n} -Hello {name|h|s|js|uc|u}!{~n} -Hello {name|h|j|s|u|uc}!{~n} -Hello {name|h|j|s|u|js}!{~n} -Hello {name|h|j|s|uc|u}!{~n} -Hello {name|h|j|s|uc|js}!{~n} -Hello {name|h|j|s|js|u}!{~n} -Hello {name|h|j|s|js|uc}!{~n} -Hello {name|h|j|u|s|uc}!{~n} -Hello {name|h|j|u|s|js}!{~n} -Hello {name|h|j|u|uc|s}!{~n} -Hello {name|h|j|u|uc|js}!{~n} -Hello {name|h|j|u|js|s}!{~n} -Hello {name|h|j|u|js|uc}!{~n} -Hello {name|h|j|uc|s|u}!{~n} -Hello {name|h|j|uc|s|js}!{~n} -Hello {name|h|j|uc|u|s}!{~n} -Hello {name|h|j|uc|u|js}!{~n} -Hello {name|h|j|uc|js|s}!{~n} -Hello {name|h|j|uc|js|u}!{~n} -Hello {name|h|j|js|s|u}!{~n} -Hello {name|h|j|js|s|uc}!{~n} -Hello {name|h|j|js|u|s}!{~n} -Hello {name|h|j|js|u|uc}!{~n} -Hello {name|h|j|js|uc|s}!{~n} -Hello {name|h|j|js|uc|u}!{~n} -Hello {name|h|u|s|j|uc}!{~n} -Hello {name|h|u|s|j|js}!{~n} -Hello {name|h|u|s|uc|j}!{~n} -Hello {name|h|u|s|uc|js}!{~n} -Hello {name|h|u|s|js|j}!{~n} -Hello {name|h|u|s|js|uc}!{~n} -Hello {name|h|u|j|s|uc}!{~n} -Hello {name|h|u|j|s|js}!{~n} -Hello {name|h|u|j|uc|s}!{~n} -Hello {name|h|u|j|uc|js}!{~n} -Hello {name|h|u|j|js|s}!{~n} -Hello {name|h|u|j|js|uc}!{~n} -Hello {name|h|u|uc|s|j}!{~n} -Hello {name|h|u|uc|s|js}!{~n} -Hello {name|h|u|uc|j|s}!{~n} -Hello {name|h|u|uc|j|js}!{~n} -Hello {name|h|u|uc|js|s}!{~n} -Hello {name|h|u|uc|js|j}!{~n} -Hello {name|h|u|js|s|j}!{~n} -Hello {name|h|u|js|s|uc}!{~n} -Hello {name|h|u|js|j|s}!{~n} -Hello {name|h|u|js|j|uc}!{~n} -Hello {name|h|u|js|uc|s}!{~n} -Hello {name|h|u|js|uc|j}!{~n} -Hello {name|h|uc|s|j|u}!{~n} -Hello {name|h|uc|s|j|js}!{~n} -Hello {name|h|uc|s|u|j}!{~n} -Hello {name|h|uc|s|u|js}!{~n} -Hello {name|h|uc|s|js|j}!{~n} -Hello {name|h|uc|s|js|u}!{~n} -Hello {name|h|uc|j|s|u}!{~n} -Hello {name|h|uc|j|s|js}!{~n} -Hello {name|h|uc|j|u|s}!{~n} -Hello {name|h|uc|j|u|js}!{~n} -Hello {name|h|uc|j|js|s}!{~n} -Hello {name|h|uc|j|js|u}!{~n} -Hello {name|h|uc|u|s|j}!{~n} -Hello {name|h|uc|u|s|js}!{~n} -Hello {name|h|uc|u|j|s}!{~n} -Hello {name|h|uc|u|j|js}!{~n} -Hello {name|h|uc|u|js|s}!{~n} -Hello {name|h|uc|u|js|j}!{~n} -Hello {name|h|uc|js|s|j}!{~n} -Hello {name|h|uc|js|s|u}!{~n} -Hello {name|h|uc|js|j|s}!{~n} -Hello {name|h|uc|js|j|u}!{~n} -Hello {name|h|uc|js|u|s}!{~n} -Hello {name|h|uc|js|u|j}!{~n} -Hello {name|h|js|s|j|u}!{~n} -Hello {name|h|js|s|j|uc}!{~n} -Hello {name|h|js|s|u|j}!{~n} -Hello {name|h|js|s|u|uc}!{~n} -Hello {name|h|js|s|uc|j}!{~n} -Hello {name|h|js|s|uc|u}!{~n} -Hello {name|h|js|j|s|u}!{~n} -Hello {name|h|js|j|s|uc}!{~n} -Hello {name|h|js|j|u|s}!{~n} -Hello {name|h|js|j|u|uc}!{~n} -Hello {name|h|js|j|uc|s}!{~n} -Hello {name|h|js|j|uc|u}!{~n} -Hello {name|h|js|u|s|j}!{~n} -Hello {name|h|js|u|s|uc}!{~n} -Hello {name|h|js|u|j|s}!{~n} -Hello {name|h|js|u|j|uc}!{~n} -Hello {name|h|js|u|uc|s}!{~n} -Hello {name|h|js|u|uc|j}!{~n} -Hello {name|h|js|uc|s|j}!{~n} -Hello {name|h|js|uc|s|u}!{~n} -Hello {name|h|js|uc|j|s}!{~n} -Hello {name|h|js|uc|j|u}!{~n} -Hello {name|h|js|uc|u|s}!{~n} -Hello {name|h|js|uc|u|j}!{~n} -Hello {name|j|s|h|u|uc}!{~n} -Hello {name|j|s|h|u|js}!{~n} -Hello {name|j|s|h|uc|u}!{~n} -Hello {name|j|s|h|uc|js}!{~n} -Hello {name|j|s|h|js|u}!{~n} -Hello {name|j|s|h|js|uc}!{~n} -Hello {name|j|s|u|h|uc}!{~n} -Hello {name|j|s|u|h|js}!{~n} -Hello {name|j|s|u|uc|h}!{~n} -Hello {name|j|s|u|uc|js}!{~n} -Hello {name|j|s|u|js|h}!{~n} -Hello {name|j|s|u|js|uc}!{~n} -Hello {name|j|s|uc|h|u}!{~n} -Hello {name|j|s|uc|h|js}!{~n} -Hello {name|j|s|uc|u|h}!{~n} -Hello {name|j|s|uc|u|js}!{~n} -Hello {name|j|s|uc|js|h}!{~n} -Hello {name|j|s|uc|js|u}!{~n} -Hello {name|j|s|js|h|u}!{~n} -Hello {name|j|s|js|h|uc}!{~n} -Hello {name|j|s|js|u|h}!{~n} -Hello {name|j|s|js|u|uc}!{~n} -Hello {name|j|s|js|uc|h}!{~n} -Hello {name|j|s|js|uc|u}!{~n} -Hello {name|j|h|s|u|uc}!{~n} -Hello {name|j|h|s|u|js}!{~n} -Hello {name|j|h|s|uc|u}!{~n} -Hello {name|j|h|s|uc|js}!{~n} -Hello {name|j|h|s|js|u}!{~n} -Hello {name|j|h|s|js|uc}!{~n} -Hello {name|j|h|u|s|uc}!{~n} -Hello {name|j|h|u|s|js}!{~n} -Hello {name|j|h|u|uc|s}!{~n} -Hello {name|j|h|u|uc|js}!{~n} -Hello {name|j|h|u|js|s}!{~n} -Hello {name|j|h|u|js|uc}!{~n} -Hello {name|j|h|uc|s|u}!{~n} -Hello {name|j|h|uc|s|js}!{~n} -Hello {name|j|h|uc|u|s}!{~n} -Hello {name|j|h|uc|u|js}!{~n} -Hello {name|j|h|uc|js|s}!{~n} -Hello {name|j|h|uc|js|u}!{~n} -Hello {name|j|h|js|s|u}!{~n} -Hello {name|j|h|js|s|uc}!{~n} -Hello {name|j|h|js|u|s}!{~n} -Hello {name|j|h|js|u|uc}!{~n} -Hello {name|j|h|js|uc|s}!{~n} -Hello {name|j|h|js|uc|u}!{~n} -Hello {name|j|u|s|h|uc}!{~n} -Hello {name|j|u|s|h|js}!{~n} -Hello {name|j|u|s|uc|h}!{~n} -Hello {name|j|u|s|uc|js}!{~n} -Hello {name|j|u|s|js|h}!{~n} -Hello {name|j|u|s|js|uc}!{~n} -Hello {name|j|u|h|s|uc}!{~n} -Hello {name|j|u|h|s|js}!{~n} -Hello {name|j|u|h|uc|s}!{~n} -Hello {name|j|u|h|uc|js}!{~n} -Hello {name|j|u|h|js|s}!{~n} -Hello {name|j|u|h|js|uc}!{~n} -Hello {name|j|u|uc|s|h}!{~n} -Hello {name|j|u|uc|s|js}!{~n} -Hello {name|j|u|uc|h|s}!{~n} -Hello {name|j|u|uc|h|js}!{~n} -Hello {name|j|u|uc|js|s}!{~n} -Hello {name|j|u|uc|js|h}!{~n} -Hello {name|j|u|js|s|h}!{~n} -Hello {name|j|u|js|s|uc}!{~n} -Hello {name|j|u|js|h|s}!{~n} -Hello {name|j|u|js|h|uc}!{~n} -Hello {name|j|u|js|uc|s}!{~n} -Hello {name|j|u|js|uc|h}!{~n} -Hello {name|j|uc|s|h|u}!{~n} -Hello {name|j|uc|s|h|js}!{~n} -Hello {name|j|uc|s|u|h}!{~n} -Hello {name|j|uc|s|u|js}!{~n} -Hello {name|j|uc|s|js|h}!{~n} -Hello {name|j|uc|s|js|u}!{~n} -Hello {name|j|uc|h|s|u}!{~n} -Hello {name|j|uc|h|s|js}!{~n} -Hello {name|j|uc|h|u|s}!{~n} -Hello {name|j|uc|h|u|js}!{~n} -Hello {name|j|uc|h|js|s}!{~n} -Hello {name|j|uc|h|js|u}!{~n} -Hello {name|j|uc|u|s|h}!{~n} -Hello {name|j|uc|u|s|js}!{~n} -Hello {name|j|uc|u|h|s}!{~n} -Hello {name|j|uc|u|h|js}!{~n} -Hello {name|j|uc|u|js|s}!{~n} -Hello {name|j|uc|u|js|h}!{~n} -Hello {name|j|uc|js|s|h}!{~n} -Hello {name|j|uc|js|s|u}!{~n} -Hello {name|j|uc|js|h|s}!{~n} -Hello {name|j|uc|js|h|u}!{~n} -Hello {name|j|uc|js|u|s}!{~n} -Hello {name|j|uc|js|u|h}!{~n} -Hello {name|j|js|s|h|u}!{~n} -Hello {name|j|js|s|h|uc}!{~n} -Hello {name|j|js|s|u|h}!{~n} -Hello {name|j|js|s|u|uc}!{~n} -Hello {name|j|js|s|uc|h}!{~n} -Hello {name|j|js|s|uc|u}!{~n} -Hello {name|j|js|h|s|u}!{~n} -Hello {name|j|js|h|s|uc}!{~n} -Hello {name|j|js|h|u|s}!{~n} -Hello {name|j|js|h|u|uc}!{~n} -Hello {name|j|js|h|uc|s}!{~n} -Hello {name|j|js|h|uc|u}!{~n} -Hello {name|j|js|u|s|h}!{~n} -Hello {name|j|js|u|s|uc}!{~n} -Hello {name|j|js|u|h|s}!{~n} -Hello {name|j|js|u|h|uc}!{~n} -Hello {name|j|js|u|uc|s}!{~n} -Hello {name|j|js|u|uc|h}!{~n} -Hello {name|j|js|uc|s|h}!{~n} -Hello {name|j|js|uc|s|u}!{~n} -Hello {name|j|js|uc|h|s}!{~n} -Hello {name|j|js|uc|h|u}!{~n} -Hello {name|j|js|uc|u|s}!{~n} -Hello {name|j|js|uc|u|h}!{~n} -Hello {name|u|s|h|j|uc}!{~n} -Hello {name|u|s|h|j|js}!{~n} -Hello {name|u|s|h|uc|j}!{~n} -Hello {name|u|s|h|uc|js}!{~n} -Hello {name|u|s|h|js|j}!{~n} -Hello {name|u|s|h|js|uc}!{~n} -Hello {name|u|s|j|h|uc}!{~n} -Hello {name|u|s|j|h|js}!{~n} -Hello {name|u|s|j|uc|h}!{~n} -Hello {name|u|s|j|uc|js}!{~n} -Hello {name|u|s|j|js|h}!{~n} -Hello {name|u|s|j|js|uc}!{~n} -Hello {name|u|s|uc|h|j}!{~n} -Hello {name|u|s|uc|h|js}!{~n} -Hello {name|u|s|uc|j|h}!{~n} -Hello {name|u|s|uc|j|js}!{~n} -Hello {name|u|s|uc|js|h}!{~n} -Hello {name|u|s|uc|js|j}!{~n} -Hello {name|u|s|js|h|j}!{~n} -Hello {name|u|s|js|h|uc}!{~n} -Hello {name|u|s|js|j|h}!{~n} -Hello {name|u|s|js|j|uc}!{~n} -Hello {name|u|s|js|uc|h}!{~n} -Hello {name|u|s|js|uc|j}!{~n} -Hello {name|u|h|s|j|uc}!{~n} -Hello {name|u|h|s|j|js}!{~n} -Hello {name|u|h|s|uc|j}!{~n} -Hello {name|u|h|s|uc|js}!{~n} -Hello {name|u|h|s|js|j}!{~n} -Hello {name|u|h|s|js|uc}!{~n} -Hello {name|u|h|j|s|uc}!{~n} -Hello {name|u|h|j|s|js}!{~n} -Hello {name|u|h|j|uc|s}!{~n} -Hello {name|u|h|j|uc|js}!{~n} -Hello {name|u|h|j|js|s}!{~n} -Hello {name|u|h|j|js|uc}!{~n} -Hello {name|u|h|uc|s|j}!{~n} -Hello {name|u|h|uc|s|js}!{~n} -Hello {name|u|h|uc|j|s}!{~n} -Hello {name|u|h|uc|j|js}!{~n} -Hello {name|u|h|uc|js|s}!{~n} -Hello {name|u|h|uc|js|j}!{~n} -Hello {name|u|h|js|s|j}!{~n} -Hello {name|u|h|js|s|uc}!{~n} -Hello {name|u|h|js|j|s}!{~n} -Hello {name|u|h|js|j|uc}!{~n} -Hello {name|u|h|js|uc|s}!{~n} -Hello {name|u|h|js|uc|j}!{~n} -Hello {name|u|j|s|h|uc}!{~n} -Hello {name|u|j|s|h|js}!{~n} -Hello {name|u|j|s|uc|h}!{~n} -Hello {name|u|j|s|uc|js}!{~n} -Hello {name|u|j|s|js|h}!{~n} -Hello {name|u|j|s|js|uc}!{~n} -Hello {name|u|j|h|s|uc}!{~n} -Hello {name|u|j|h|s|js}!{~n} -Hello {name|u|j|h|uc|s}!{~n} -Hello {name|u|j|h|uc|js}!{~n} -Hello {name|u|j|h|js|s}!{~n} -Hello {name|u|j|h|js|uc}!{~n} -Hello {name|u|j|uc|s|h}!{~n} -Hello {name|u|j|uc|s|js}!{~n} -Hello {name|u|j|uc|h|s}!{~n} -Hello {name|u|j|uc|h|js}!{~n} -Hello {name|u|j|uc|js|s}!{~n} -Hello {name|u|j|uc|js|h}!{~n} -Hello {name|u|j|js|s|h}!{~n} -Hello {name|u|j|js|s|uc}!{~n} -Hello {name|u|j|js|h|s}!{~n} -Hello {name|u|j|js|h|uc}!{~n} -Hello {name|u|j|js|uc|s}!{~n} -Hello {name|u|j|js|uc|h}!{~n} -Hello {name|u|uc|s|h|j}!{~n} -Hello {name|u|uc|s|h|js}!{~n} -Hello {name|u|uc|s|j|h}!{~n} -Hello {name|u|uc|s|j|js}!{~n} -Hello {name|u|uc|s|js|h}!{~n} -Hello {name|u|uc|s|js|j}!{~n} -Hello {name|u|uc|h|s|j}!{~n} -Hello {name|u|uc|h|s|js}!{~n} -Hello {name|u|uc|h|j|s}!{~n} -Hello {name|u|uc|h|j|js}!{~n} -Hello {name|u|uc|h|js|s}!{~n} -Hello {name|u|uc|h|js|j}!{~n} -Hello {name|u|uc|j|s|h}!{~n} -Hello {name|u|uc|j|s|js}!{~n} -Hello {name|u|uc|j|h|s}!{~n} -Hello {name|u|uc|j|h|js}!{~n} -Hello {name|u|uc|j|js|s}!{~n} -Hello {name|u|uc|j|js|h}!{~n} -Hello {name|u|uc|js|s|h}!{~n} -Hello {name|u|uc|js|s|j}!{~n} -Hello {name|u|uc|js|h|s}!{~n} -Hello {name|u|uc|js|h|j}!{~n} -Hello {name|u|uc|js|j|s}!{~n} -Hello {name|u|uc|js|j|h}!{~n} -Hello {name|u|js|s|h|j}!{~n} -Hello {name|u|js|s|h|uc}!{~n} -Hello {name|u|js|s|j|h}!{~n} -Hello {name|u|js|s|j|uc}!{~n} -Hello {name|u|js|s|uc|h}!{~n} -Hello {name|u|js|s|uc|j}!{~n} -Hello {name|u|js|h|s|j}!{~n} -Hello {name|u|js|h|s|uc}!{~n} -Hello {name|u|js|h|j|s}!{~n} -Hello {name|u|js|h|j|uc}!{~n} -Hello {name|u|js|h|uc|s}!{~n} -Hello {name|u|js|h|uc|j}!{~n} -Hello {name|u|js|j|s|h}!{~n} -Hello {name|u|js|j|s|uc}!{~n} -Hello {name|u|js|j|h|s}!{~n} -Hello {name|u|js|j|h|uc}!{~n} -Hello {name|u|js|j|uc|s}!{~n} -Hello {name|u|js|j|uc|h}!{~n} -Hello {name|u|js|uc|s|h}!{~n} -Hello {name|u|js|uc|s|j}!{~n} -Hello {name|u|js|uc|h|s}!{~n} -Hello {name|u|js|uc|h|j}!{~n} -Hello {name|u|js|uc|j|s}!{~n} -Hello {name|u|js|uc|j|h}!{~n} -Hello {name|uc|s|h|j|u}!{~n} -Hello {name|uc|s|h|j|js}!{~n} -Hello {name|uc|s|h|u|j}!{~n} -Hello {name|uc|s|h|u|js}!{~n} -Hello {name|uc|s|h|js|j}!{~n} -Hello {name|uc|s|h|js|u}!{~n} -Hello {name|uc|s|j|h|u}!{~n} -Hello {name|uc|s|j|h|js}!{~n} -Hello {name|uc|s|j|u|h}!{~n} -Hello {name|uc|s|j|u|js}!{~n} -Hello {name|uc|s|j|js|h}!{~n} -Hello {name|uc|s|j|js|u}!{~n} -Hello {name|uc|s|u|h|j}!{~n} -Hello {name|uc|s|u|h|js}!{~n} -Hello {name|uc|s|u|j|h}!{~n} -Hello {name|uc|s|u|j|js}!{~n} -Hello {name|uc|s|u|js|h}!{~n} -Hello {name|uc|s|u|js|j}!{~n} -Hello {name|uc|s|js|h|j}!{~n} -Hello {name|uc|s|js|h|u}!{~n} -Hello {name|uc|s|js|j|h}!{~n} -Hello {name|uc|s|js|j|u}!{~n} -Hello {name|uc|s|js|u|h}!{~n} -Hello {name|uc|s|js|u|j}!{~n} -Hello {name|uc|h|s|j|u}!{~n} -Hello {name|uc|h|s|j|js}!{~n} -Hello {name|uc|h|s|u|j}!{~n} -Hello {name|uc|h|s|u|js}!{~n} -Hello {name|uc|h|s|js|j}!{~n} -Hello {name|uc|h|s|js|u}!{~n} -Hello {name|uc|h|j|s|u}!{~n} -Hello {name|uc|h|j|s|js}!{~n} -Hello {name|uc|h|j|u|s}!{~n} -Hello {name|uc|h|j|u|js}!{~n} -Hello {name|uc|h|j|js|s}!{~n} -Hello {name|uc|h|j|js|u}!{~n} -Hello {name|uc|h|u|s|j}!{~n} -Hello {name|uc|h|u|s|js}!{~n} -Hello {name|uc|h|u|j|s}!{~n} -Hello {name|uc|h|u|j|js}!{~n} -Hello {name|uc|h|u|js|s}!{~n} -Hello {name|uc|h|u|js|j}!{~n} -Hello {name|uc|h|js|s|j}!{~n} -Hello {name|uc|h|js|s|u}!{~n} -Hello {name|uc|h|js|j|s}!{~n} -Hello {name|uc|h|js|j|u}!{~n} -Hello {name|uc|h|js|u|s}!{~n} -Hello {name|uc|h|js|u|j}!{~n} -Hello {name|uc|j|s|h|u}!{~n} -Hello {name|uc|j|s|h|js}!{~n} -Hello {name|uc|j|s|u|h}!{~n} -Hello {name|uc|j|s|u|js}!{~n} -Hello {name|uc|j|s|js|h}!{~n} -Hello {name|uc|j|s|js|u}!{~n} -Hello {name|uc|j|h|s|u}!{~n} -Hello {name|uc|j|h|s|js}!{~n} -Hello {name|uc|j|h|u|s}!{~n} -Hello {name|uc|j|h|u|js}!{~n} -Hello {name|uc|j|h|js|s}!{~n} -Hello {name|uc|j|h|js|u}!{~n} -Hello {name|uc|j|u|s|h}!{~n} -Hello {name|uc|j|u|s|js}!{~n} -Hello {name|uc|j|u|h|s}!{~n} -Hello {name|uc|j|u|h|js}!{~n} -Hello {name|uc|j|u|js|s}!{~n} -Hello {name|uc|j|u|js|h}!{~n} -Hello {name|uc|j|js|s|h}!{~n} -Hello {name|uc|j|js|s|u}!{~n} -Hello {name|uc|j|js|h|s}!{~n} -Hello {name|uc|j|js|h|u}!{~n} -Hello {name|uc|j|js|u|s}!{~n} -Hello {name|uc|j|js|u|h}!{~n} -Hello {name|uc|u|s|h|j}!{~n} -Hello {name|uc|u|s|h|js}!{~n} -Hello {name|uc|u|s|j|h}!{~n} -Hello {name|uc|u|s|j|js}!{~n} -Hello {name|uc|u|s|js|h}!{~n} -Hello {name|uc|u|s|js|j}!{~n} -Hello {name|uc|u|h|s|j}!{~n} -Hello {name|uc|u|h|s|js}!{~n} -Hello {name|uc|u|h|j|s}!{~n} -Hello {name|uc|u|h|j|js}!{~n} -Hello {name|uc|u|h|js|s}!{~n} -Hello {name|uc|u|h|js|j}!{~n} -Hello {name|uc|u|j|s|h}!{~n} -Hello {name|uc|u|j|s|js}!{~n} -Hello {name|uc|u|j|h|s}!{~n} -Hello {name|uc|u|j|h|js}!{~n} -Hello {name|uc|u|j|js|s}!{~n} -Hello {name|uc|u|j|js|h}!{~n} -Hello {name|uc|u|js|s|h}!{~n} -Hello {name|uc|u|js|s|j}!{~n} -Hello {name|uc|u|js|h|s}!{~n} -Hello {name|uc|u|js|h|j}!{~n} -Hello {name|uc|u|js|j|s}!{~n} -Hello {name|uc|u|js|j|h}!{~n} -Hello {name|uc|js|s|h|j}!{~n} -Hello {name|uc|js|s|h|u}!{~n} -Hello {name|uc|js|s|j|h}!{~n} -Hello {name|uc|js|s|j|u}!{~n} -Hello {name|uc|js|s|u|h}!{~n} -Hello {name|uc|js|s|u|j}!{~n} -Hello {name|uc|js|h|s|j}!{~n} -Hello {name|uc|js|h|s|u}!{~n} -Hello {name|uc|js|h|j|s}!{~n} -Hello {name|uc|js|h|j|u}!{~n} -Hello {name|uc|js|h|u|s}!{~n} -Hello {name|uc|js|h|u|j}!{~n} -Hello {name|uc|js|j|s|h}!{~n} -Hello {name|uc|js|j|s|u}!{~n} -Hello {name|uc|js|j|h|s}!{~n} -Hello {name|uc|js|j|h|u}!{~n} -Hello {name|uc|js|j|u|s}!{~n} -Hello {name|uc|js|j|u|h}!{~n} -Hello {name|uc|js|u|s|h}!{~n} -Hello {name|uc|js|u|s|j}!{~n} -Hello {name|uc|js|u|h|s}!{~n} -Hello {name|uc|js|u|h|j}!{~n} -Hello {name|uc|js|u|j|s}!{~n} -Hello {name|uc|js|u|j|h}!{~n} -Hello {name|js|s|h|j|u}!{~n} -Hello {name|js|s|h|j|uc}!{~n} -Hello {name|js|s|h|u|j}!{~n} -Hello {name|js|s|h|u|uc}!{~n} -Hello {name|js|s|h|uc|j}!{~n} -Hello {name|js|s|h|uc|u}!{~n} -Hello {name|js|s|j|h|u}!{~n} -Hello {name|js|s|j|h|uc}!{~n} -Hello {name|js|s|j|u|h}!{~n} -Hello {name|js|s|j|u|uc}!{~n} -Hello {name|js|s|j|uc|h}!{~n} -Hello {name|js|s|j|uc|u}!{~n} -Hello {name|js|s|u|h|j}!{~n} -Hello {name|js|s|u|h|uc}!{~n} -Hello {name|js|s|u|j|h}!{~n} -Hello {name|js|s|u|j|uc}!{~n} -Hello {name|js|s|u|uc|h}!{~n} -Hello {name|js|s|u|uc|j}!{~n} -Hello {name|js|s|uc|h|j}!{~n} -Hello {name|js|s|uc|h|u}!{~n} -Hello {name|js|s|uc|j|h}!{~n} -Hello {name|js|s|uc|j|u}!{~n} -Hello {name|js|s|uc|u|h}!{~n} -Hello {name|js|s|uc|u|j}!{~n} -Hello {name|js|h|s|j|u}!{~n} -Hello {name|js|h|s|j|uc}!{~n} -Hello {name|js|h|s|u|j}!{~n} -Hello {name|js|h|s|u|uc}!{~n} -Hello {name|js|h|s|uc|j}!{~n} -Hello {name|js|h|s|uc|u}!{~n} -Hello {name|js|h|j|s|u}!{~n} -Hello {name|js|h|j|s|uc}!{~n} -Hello {name|js|h|j|u|s}!{~n} -Hello {name|js|h|j|u|uc}!{~n} -Hello {name|js|h|j|uc|s}!{~n} -Hello {name|js|h|j|uc|u}!{~n} -Hello {name|js|h|u|s|j}!{~n} -Hello {name|js|h|u|s|uc}!{~n} -Hello {name|js|h|u|j|s}!{~n} -Hello {name|js|h|u|j|uc}!{~n} -Hello {name|js|h|u|uc|s}!{~n} -Hello {name|js|h|u|uc|j}!{~n} -Hello {name|js|h|uc|s|j}!{~n} -Hello {name|js|h|uc|s|u}!{~n} -Hello {name|js|h|uc|j|s}!{~n} -Hello {name|js|h|uc|j|u}!{~n} -Hello {name|js|h|uc|u|s}!{~n} -Hello {name|js|h|uc|u|j}!{~n} -Hello {name|js|j|s|h|u}!{~n} -Hello {name|js|j|s|h|uc}!{~n} -Hello {name|js|j|s|u|h}!{~n} -Hello {name|js|j|s|u|uc}!{~n} -Hello {name|js|j|s|uc|h}!{~n} -Hello {name|js|j|s|uc|u}!{~n} -Hello {name|js|j|h|s|u}!{~n} -Hello {name|js|j|h|s|uc}!{~n} -Hello {name|js|j|h|u|s}!{~n} -Hello {name|js|j|h|u|uc}!{~n} -Hello {name|js|j|h|uc|s}!{~n} -Hello {name|js|j|h|uc|u}!{~n} -Hello {name|js|j|u|s|h}!{~n} -Hello {name|js|j|u|s|uc}!{~n} -Hello {name|js|j|u|h|s}!{~n} -Hello {name|js|j|u|h|uc}!{~n} -Hello {name|js|j|u|uc|s}!{~n} -Hello {name|js|j|u|uc|h}!{~n} -Hello {name|js|j|uc|s|h}!{~n} -Hello {name|js|j|uc|s|u}!{~n} -Hello {name|js|j|uc|h|s}!{~n} -Hello {name|js|j|uc|h|u}!{~n} -Hello {name|js|j|uc|u|s}!{~n} -Hello {name|js|j|uc|u|h}!{~n} -Hello {name|js|u|s|h|j}!{~n} -Hello {name|js|u|s|h|uc}!{~n} -Hello {name|js|u|s|j|h}!{~n} -Hello {name|js|u|s|j|uc}!{~n} -Hello {name|js|u|s|uc|h}!{~n} -Hello {name|js|u|s|uc|j}!{~n} -Hello {name|js|u|h|s|j}!{~n} -Hello {name|js|u|h|s|uc}!{~n} -Hello {name|js|u|h|j|s}!{~n} -Hello {name|js|u|h|j|uc}!{~n} -Hello {name|js|u|h|uc|s}!{~n} -Hello {name|js|u|h|uc|j}!{~n} -Hello {name|js|u|j|s|h}!{~n} -Hello {name|js|u|j|s|uc}!{~n} -Hello {name|js|u|j|h|s}!{~n} -Hello {name|js|u|j|h|uc}!{~n} -Hello {name|js|u|j|uc|s}!{~n} -Hello {name|js|u|j|uc|h}!{~n} -Hello {name|js|u|uc|s|h}!{~n} -Hello {name|js|u|uc|s|j}!{~n} -Hello {name|js|u|uc|h|s}!{~n} -Hello {name|js|u|uc|h|j}!{~n} -Hello {name|js|u|uc|j|s}!{~n} -Hello {name|js|u|uc|j|h}!{~n} -Hello {name|js|uc|s|h|j}!{~n} -Hello {name|js|uc|s|h|u}!{~n} -Hello {name|js|uc|s|j|h}!{~n} -Hello {name|js|uc|s|j|u}!{~n} -Hello {name|js|uc|s|u|h}!{~n} -Hello {name|js|uc|s|u|j}!{~n} -Hello {name|js|uc|h|s|j}!{~n} -Hello {name|js|uc|h|s|u}!{~n} -Hello {name|js|uc|h|j|s}!{~n} -Hello {name|js|uc|h|j|u}!{~n} -Hello {name|js|uc|h|u|s}!{~n} -Hello {name|js|uc|h|u|j}!{~n} -Hello {name|js|uc|j|s|h}!{~n} -Hello {name|js|uc|j|s|u}!{~n} -Hello {name|js|uc|j|h|s}!{~n} -Hello {name|js|uc|j|h|u}!{~n} -Hello {name|js|uc|j|u|s}!{~n} -Hello {name|js|uc|j|u|h}!{~n} -Hello {name|js|uc|u|s|h}!{~n} -Hello {name|js|uc|u|s|j}!{~n} -Hello {name|js|uc|u|h|s}!{~n} -Hello {name|js|uc|u|h|j}!{~n} -Hello {name|js|uc|u|j|s}!{~n} -Hello {name|js|uc|u|j|h}!{~n} diff --git a/js/test_cases/generated_filters_two/README.md b/js/test_cases/generated_filters_two/README.md new file mode 100644 index 0000000..c32a73e --- /dev/null +++ b/js/test_cases/generated_filters_two/README.md @@ -0,0 +1 @@ +I had to split the generated_filters test into two tests because dustjs is limited to 65536 characters of output (a shortcoming duster will not have). diff --git a/js/test_cases/generated_filters_two/array.json b/js/test_cases/generated_filters_two/array.json new file mode 100644 index 0000000..21ac75d --- /dev/null +++ b/js/test_cases/generated_filters_two/array.json @@ -0,0 +1,6 @@ +{ + "name": [ + "foo", + "bar" + ] +} diff --git a/js/test_cases/generated_filters_two/boolean.json b/js/test_cases/generated_filters_two/boolean.json new file mode 100644 index 0000000..925ccd9 --- /dev/null +++ b/js/test_cases/generated_filters_two/boolean.json @@ -0,0 +1,3 @@ +{ + "name": true +} diff --git a/js/test_cases/generated_filters_two/float.json b/js/test_cases/generated_filters_two/float.json new file mode 100644 index 0000000..e84feaa --- /dev/null +++ b/js/test_cases/generated_filters_two/float.json @@ -0,0 +1,3 @@ +{ + "name": 7.4 +} diff --git a/js/test_cases/generated_filters_two/integer.json b/js/test_cases/generated_filters_two/integer.json new file mode 100644 index 0000000..4c5ec73 --- /dev/null +++ b/js/test_cases/generated_filters_two/integer.json @@ -0,0 +1,3 @@ +{ + "name": 4 +} diff --git a/js/test_cases/generated_filters_two/main.dust b/js/test_cases/generated_filters_two/main.dust new file mode 100644 index 0000000..b3a9f1c --- /dev/null +++ b/js/test_cases/generated_filters_two/main.dust @@ -0,0 +1,720 @@ +Hello {name|s|h|j|u|uc}!{~n} +Hello {name|s|h|j|u|js}!{~n} +Hello {name|s|h|j|uc|u}!{~n} +Hello {name|s|h|j|uc|js}!{~n} +Hello {name|s|h|j|js|u}!{~n} +Hello {name|s|h|j|js|uc}!{~n} +Hello {name|s|h|u|j|uc}!{~n} +Hello {name|s|h|u|j|js}!{~n} +Hello {name|s|h|u|uc|j}!{~n} +Hello {name|s|h|u|uc|js}!{~n} +Hello {name|s|h|u|js|j}!{~n} +Hello {name|s|h|u|js|uc}!{~n} +Hello {name|s|h|uc|j|u}!{~n} +Hello {name|s|h|uc|j|js}!{~n} +Hello {name|s|h|uc|u|j}!{~n} +Hello {name|s|h|uc|u|js}!{~n} +Hello {name|s|h|uc|js|j}!{~n} +Hello {name|s|h|uc|js|u}!{~n} +Hello {name|s|h|js|j|u}!{~n} +Hello {name|s|h|js|j|uc}!{~n} +Hello {name|s|h|js|u|j}!{~n} +Hello {name|s|h|js|u|uc}!{~n} +Hello {name|s|h|js|uc|j}!{~n} +Hello {name|s|h|js|uc|u}!{~n} +Hello {name|s|j|h|u|uc}!{~n} +Hello {name|s|j|h|u|js}!{~n} +Hello {name|s|j|h|uc|u}!{~n} +Hello {name|s|j|h|uc|js}!{~n} +Hello {name|s|j|h|js|u}!{~n} +Hello {name|s|j|h|js|uc}!{~n} +Hello {name|s|j|u|h|uc}!{~n} +Hello {name|s|j|u|h|js}!{~n} +Hello {name|s|j|u|uc|h}!{~n} +Hello {name|s|j|u|uc|js}!{~n} +Hello {name|s|j|u|js|h}!{~n} +Hello {name|s|j|u|js|uc}!{~n} +Hello {name|s|j|uc|h|u}!{~n} +Hello {name|s|j|uc|h|js}!{~n} +Hello {name|s|j|uc|u|h}!{~n} +Hello {name|s|j|uc|u|js}!{~n} +Hello {name|s|j|uc|js|h}!{~n} +Hello {name|s|j|uc|js|u}!{~n} +Hello {name|s|j|js|h|u}!{~n} +Hello {name|s|j|js|h|uc}!{~n} +Hello {name|s|j|js|u|h}!{~n} +Hello {name|s|j|js|u|uc}!{~n} +Hello {name|s|j|js|uc|h}!{~n} +Hello {name|s|j|js|uc|u}!{~n} +Hello {name|s|u|h|j|uc}!{~n} +Hello {name|s|u|h|j|js}!{~n} +Hello {name|s|u|h|uc|j}!{~n} +Hello {name|s|u|h|uc|js}!{~n} +Hello {name|s|u|h|js|j}!{~n} +Hello {name|s|u|h|js|uc}!{~n} +Hello {name|s|u|j|h|uc}!{~n} +Hello {name|s|u|j|h|js}!{~n} +Hello {name|s|u|j|uc|h}!{~n} +Hello {name|s|u|j|uc|js}!{~n} +Hello {name|s|u|j|js|h}!{~n} +Hello {name|s|u|j|js|uc}!{~n} +Hello {name|s|u|uc|h|j}!{~n} +Hello {name|s|u|uc|h|js}!{~n} +Hello {name|s|u|uc|j|h}!{~n} +Hello {name|s|u|uc|j|js}!{~n} +Hello {name|s|u|uc|js|h}!{~n} +Hello {name|s|u|uc|js|j}!{~n} +Hello {name|s|u|js|h|j}!{~n} +Hello {name|s|u|js|h|uc}!{~n} +Hello {name|s|u|js|j|h}!{~n} +Hello {name|s|u|js|j|uc}!{~n} +Hello {name|s|u|js|uc|h}!{~n} +Hello {name|s|u|js|uc|j}!{~n} +Hello {name|s|uc|h|j|u}!{~n} +Hello {name|s|uc|h|j|js}!{~n} +Hello {name|s|uc|h|u|j}!{~n} +Hello {name|s|uc|h|u|js}!{~n} +Hello {name|s|uc|h|js|j}!{~n} +Hello {name|s|uc|h|js|u}!{~n} +Hello {name|s|uc|j|h|u}!{~n} +Hello {name|s|uc|j|h|js}!{~n} +Hello {name|s|uc|j|u|h}!{~n} +Hello {name|s|uc|j|u|js}!{~n} +Hello {name|s|uc|j|js|h}!{~n} +Hello {name|s|uc|j|js|u}!{~n} +Hello {name|s|uc|u|h|j}!{~n} +Hello {name|s|uc|u|h|js}!{~n} +Hello {name|s|uc|u|j|h}!{~n} +Hello {name|s|uc|u|j|js}!{~n} +Hello {name|s|uc|u|js|h}!{~n} +Hello {name|s|uc|u|js|j}!{~n} +Hello {name|s|uc|js|h|j}!{~n} +Hello {name|s|uc|js|h|u}!{~n} +Hello {name|s|uc|js|j|h}!{~n} +Hello {name|s|uc|js|j|u}!{~n} +Hello {name|s|uc|js|u|h}!{~n} +Hello {name|s|uc|js|u|j}!{~n} +Hello {name|s|js|h|j|u}!{~n} +Hello {name|s|js|h|j|uc}!{~n} +Hello {name|s|js|h|u|j}!{~n} +Hello {name|s|js|h|u|uc}!{~n} +Hello {name|s|js|h|uc|j}!{~n} +Hello {name|s|js|h|uc|u}!{~n} +Hello {name|s|js|j|h|u}!{~n} +Hello {name|s|js|j|h|uc}!{~n} +Hello {name|s|js|j|u|h}!{~n} +Hello {name|s|js|j|u|uc}!{~n} +Hello {name|s|js|j|uc|h}!{~n} +Hello {name|s|js|j|uc|u}!{~n} +Hello {name|s|js|u|h|j}!{~n} +Hello {name|s|js|u|h|uc}!{~n} +Hello {name|s|js|u|j|h}!{~n} +Hello {name|s|js|u|j|uc}!{~n} +Hello {name|s|js|u|uc|h}!{~n} +Hello {name|s|js|u|uc|j}!{~n} +Hello {name|s|js|uc|h|j}!{~n} +Hello {name|s|js|uc|h|u}!{~n} +Hello {name|s|js|uc|j|h}!{~n} +Hello {name|s|js|uc|j|u}!{~n} +Hello {name|s|js|uc|u|h}!{~n} +Hello {name|s|js|uc|u|j}!{~n} +Hello {name|h|s|j|u|uc}!{~n} +Hello {name|h|s|j|u|js}!{~n} +Hello {name|h|s|j|uc|u}!{~n} +Hello {name|h|s|j|uc|js}!{~n} +Hello {name|h|s|j|js|u}!{~n} +Hello {name|h|s|j|js|uc}!{~n} +Hello {name|h|s|u|j|uc}!{~n} +Hello {name|h|s|u|j|js}!{~n} +Hello {name|h|s|u|uc|j}!{~n} +Hello {name|h|s|u|uc|js}!{~n} +Hello {name|h|s|u|js|j}!{~n} +Hello {name|h|s|u|js|uc}!{~n} +Hello {name|h|s|uc|j|u}!{~n} +Hello {name|h|s|uc|j|js}!{~n} +Hello {name|h|s|uc|u|j}!{~n} +Hello {name|h|s|uc|u|js}!{~n} +Hello {name|h|s|uc|js|j}!{~n} +Hello {name|h|s|uc|js|u}!{~n} +Hello {name|h|s|js|j|u}!{~n} +Hello {name|h|s|js|j|uc}!{~n} +Hello {name|h|s|js|u|j}!{~n} +Hello {name|h|s|js|u|uc}!{~n} +Hello {name|h|s|js|uc|j}!{~n} +Hello {name|h|s|js|uc|u}!{~n} +Hello {name|h|j|s|u|uc}!{~n} +Hello {name|h|j|s|u|js}!{~n} +Hello {name|h|j|s|uc|u}!{~n} +Hello {name|h|j|s|uc|js}!{~n} +Hello {name|h|j|s|js|u}!{~n} +Hello {name|h|j|s|js|uc}!{~n} +Hello {name|h|j|u|s|uc}!{~n} +Hello {name|h|j|u|s|js}!{~n} +Hello {name|h|j|u|uc|s}!{~n} +Hello {name|h|j|u|uc|js}!{~n} +Hello {name|h|j|u|js|s}!{~n} +Hello {name|h|j|u|js|uc}!{~n} +Hello {name|h|j|uc|s|u}!{~n} +Hello {name|h|j|uc|s|js}!{~n} +Hello {name|h|j|uc|u|s}!{~n} +Hello {name|h|j|uc|u|js}!{~n} +Hello {name|h|j|uc|js|s}!{~n} +Hello {name|h|j|uc|js|u}!{~n} +Hello {name|h|j|js|s|u}!{~n} +Hello {name|h|j|js|s|uc}!{~n} +Hello {name|h|j|js|u|s}!{~n} +Hello {name|h|j|js|u|uc}!{~n} +Hello {name|h|j|js|uc|s}!{~n} +Hello {name|h|j|js|uc|u}!{~n} +Hello {name|h|u|s|j|uc}!{~n} +Hello {name|h|u|s|j|js}!{~n} +Hello {name|h|u|s|uc|j}!{~n} +Hello {name|h|u|s|uc|js}!{~n} +Hello {name|h|u|s|js|j}!{~n} +Hello {name|h|u|s|js|uc}!{~n} +Hello {name|h|u|j|s|uc}!{~n} +Hello {name|h|u|j|s|js}!{~n} +Hello {name|h|u|j|uc|s}!{~n} +Hello {name|h|u|j|uc|js}!{~n} +Hello {name|h|u|j|js|s}!{~n} +Hello {name|h|u|j|js|uc}!{~n} +Hello {name|h|u|uc|s|j}!{~n} +Hello {name|h|u|uc|s|js}!{~n} +Hello {name|h|u|uc|j|s}!{~n} +Hello {name|h|u|uc|j|js}!{~n} +Hello {name|h|u|uc|js|s}!{~n} +Hello {name|h|u|uc|js|j}!{~n} +Hello {name|h|u|js|s|j}!{~n} +Hello {name|h|u|js|s|uc}!{~n} +Hello {name|h|u|js|j|s}!{~n} +Hello {name|h|u|js|j|uc}!{~n} +Hello {name|h|u|js|uc|s}!{~n} +Hello {name|h|u|js|uc|j}!{~n} +Hello {name|h|uc|s|j|u}!{~n} +Hello {name|h|uc|s|j|js}!{~n} +Hello {name|h|uc|s|u|j}!{~n} +Hello {name|h|uc|s|u|js}!{~n} +Hello {name|h|uc|s|js|j}!{~n} +Hello {name|h|uc|s|js|u}!{~n} +Hello {name|h|uc|j|s|u}!{~n} +Hello {name|h|uc|j|s|js}!{~n} +Hello {name|h|uc|j|u|s}!{~n} +Hello {name|h|uc|j|u|js}!{~n} +Hello {name|h|uc|j|js|s}!{~n} +Hello {name|h|uc|j|js|u}!{~n} +Hello {name|h|uc|u|s|j}!{~n} +Hello {name|h|uc|u|s|js}!{~n} +Hello {name|h|uc|u|j|s}!{~n} +Hello {name|h|uc|u|j|js}!{~n} +Hello {name|h|uc|u|js|s}!{~n} +Hello {name|h|uc|u|js|j}!{~n} +Hello {name|h|uc|js|s|j}!{~n} +Hello {name|h|uc|js|s|u}!{~n} +Hello {name|h|uc|js|j|s}!{~n} +Hello {name|h|uc|js|j|u}!{~n} +Hello {name|h|uc|js|u|s}!{~n} +Hello {name|h|uc|js|u|j}!{~n} +Hello {name|h|js|s|j|u}!{~n} +Hello {name|h|js|s|j|uc}!{~n} +Hello {name|h|js|s|u|j}!{~n} +Hello {name|h|js|s|u|uc}!{~n} +Hello {name|h|js|s|uc|j}!{~n} +Hello {name|h|js|s|uc|u}!{~n} +Hello {name|h|js|j|s|u}!{~n} +Hello {name|h|js|j|s|uc}!{~n} +Hello {name|h|js|j|u|s}!{~n} +Hello {name|h|js|j|u|uc}!{~n} +Hello {name|h|js|j|uc|s}!{~n} +Hello {name|h|js|j|uc|u}!{~n} +Hello {name|h|js|u|s|j}!{~n} +Hello {name|h|js|u|s|uc}!{~n} +Hello {name|h|js|u|j|s}!{~n} +Hello {name|h|js|u|j|uc}!{~n} +Hello {name|h|js|u|uc|s}!{~n} +Hello {name|h|js|u|uc|j}!{~n} +Hello {name|h|js|uc|s|j}!{~n} +Hello {name|h|js|uc|s|u}!{~n} +Hello {name|h|js|uc|j|s}!{~n} +Hello {name|h|js|uc|j|u}!{~n} +Hello {name|h|js|uc|u|s}!{~n} +Hello {name|h|js|uc|u|j}!{~n} +Hello {name|j|s|h|u|uc}!{~n} +Hello {name|j|s|h|u|js}!{~n} +Hello {name|j|s|h|uc|u}!{~n} +Hello {name|j|s|h|uc|js}!{~n} +Hello {name|j|s|h|js|u}!{~n} +Hello {name|j|s|h|js|uc}!{~n} +Hello {name|j|s|u|h|uc}!{~n} +Hello {name|j|s|u|h|js}!{~n} +Hello {name|j|s|u|uc|h}!{~n} +Hello {name|j|s|u|uc|js}!{~n} +Hello {name|j|s|u|js|h}!{~n} +Hello {name|j|s|u|js|uc}!{~n} +Hello {name|j|s|uc|h|u}!{~n} +Hello {name|j|s|uc|h|js}!{~n} +Hello {name|j|s|uc|u|h}!{~n} +Hello {name|j|s|uc|u|js}!{~n} +Hello {name|j|s|uc|js|h}!{~n} +Hello {name|j|s|uc|js|u}!{~n} +Hello {name|j|s|js|h|u}!{~n} +Hello {name|j|s|js|h|uc}!{~n} +Hello {name|j|s|js|u|h}!{~n} +Hello {name|j|s|js|u|uc}!{~n} +Hello {name|j|s|js|uc|h}!{~n} +Hello {name|j|s|js|uc|u}!{~n} +Hello {name|j|h|s|u|uc}!{~n} +Hello {name|j|h|s|u|js}!{~n} +Hello {name|j|h|s|uc|u}!{~n} +Hello {name|j|h|s|uc|js}!{~n} +Hello {name|j|h|s|js|u}!{~n} +Hello {name|j|h|s|js|uc}!{~n} +Hello {name|j|h|u|s|uc}!{~n} +Hello {name|j|h|u|s|js}!{~n} +Hello {name|j|h|u|uc|s}!{~n} +Hello {name|j|h|u|uc|js}!{~n} +Hello {name|j|h|u|js|s}!{~n} +Hello {name|j|h|u|js|uc}!{~n} +Hello {name|j|h|uc|s|u}!{~n} +Hello {name|j|h|uc|s|js}!{~n} +Hello {name|j|h|uc|u|s}!{~n} +Hello {name|j|h|uc|u|js}!{~n} +Hello {name|j|h|uc|js|s}!{~n} +Hello {name|j|h|uc|js|u}!{~n} +Hello {name|j|h|js|s|u}!{~n} +Hello {name|j|h|js|s|uc}!{~n} +Hello {name|j|h|js|u|s}!{~n} +Hello {name|j|h|js|u|uc}!{~n} +Hello {name|j|h|js|uc|s}!{~n} +Hello {name|j|h|js|uc|u}!{~n} +Hello {name|j|u|s|h|uc}!{~n} +Hello {name|j|u|s|h|js}!{~n} +Hello {name|j|u|s|uc|h}!{~n} +Hello {name|j|u|s|uc|js}!{~n} +Hello {name|j|u|s|js|h}!{~n} +Hello {name|j|u|s|js|uc}!{~n} +Hello {name|j|u|h|s|uc}!{~n} +Hello {name|j|u|h|s|js}!{~n} +Hello {name|j|u|h|uc|s}!{~n} +Hello {name|j|u|h|uc|js}!{~n} +Hello {name|j|u|h|js|s}!{~n} +Hello {name|j|u|h|js|uc}!{~n} +Hello {name|j|u|uc|s|h}!{~n} +Hello {name|j|u|uc|s|js}!{~n} +Hello {name|j|u|uc|h|s}!{~n} +Hello {name|j|u|uc|h|js}!{~n} +Hello {name|j|u|uc|js|s}!{~n} +Hello {name|j|u|uc|js|h}!{~n} +Hello {name|j|u|js|s|h}!{~n} +Hello {name|j|u|js|s|uc}!{~n} +Hello {name|j|u|js|h|s}!{~n} +Hello {name|j|u|js|h|uc}!{~n} +Hello {name|j|u|js|uc|s}!{~n} +Hello {name|j|u|js|uc|h}!{~n} +Hello {name|j|uc|s|h|u}!{~n} +Hello {name|j|uc|s|h|js}!{~n} +Hello {name|j|uc|s|u|h}!{~n} +Hello {name|j|uc|s|u|js}!{~n} +Hello {name|j|uc|s|js|h}!{~n} +Hello {name|j|uc|s|js|u}!{~n} +Hello {name|j|uc|h|s|u}!{~n} +Hello {name|j|uc|h|s|js}!{~n} +Hello {name|j|uc|h|u|s}!{~n} +Hello {name|j|uc|h|u|js}!{~n} +Hello {name|j|uc|h|js|s}!{~n} +Hello {name|j|uc|h|js|u}!{~n} +Hello {name|j|uc|u|s|h}!{~n} +Hello {name|j|uc|u|s|js}!{~n} +Hello {name|j|uc|u|h|s}!{~n} +Hello {name|j|uc|u|h|js}!{~n} +Hello {name|j|uc|u|js|s}!{~n} +Hello {name|j|uc|u|js|h}!{~n} +Hello {name|j|uc|js|s|h}!{~n} +Hello {name|j|uc|js|s|u}!{~n} +Hello {name|j|uc|js|h|s}!{~n} +Hello {name|j|uc|js|h|u}!{~n} +Hello {name|j|uc|js|u|s}!{~n} +Hello {name|j|uc|js|u|h}!{~n} +Hello {name|j|js|s|h|u}!{~n} +Hello {name|j|js|s|h|uc}!{~n} +Hello {name|j|js|s|u|h}!{~n} +Hello {name|j|js|s|u|uc}!{~n} +Hello {name|j|js|s|uc|h}!{~n} +Hello {name|j|js|s|uc|u}!{~n} +Hello {name|j|js|h|s|u}!{~n} +Hello {name|j|js|h|s|uc}!{~n} +Hello {name|j|js|h|u|s}!{~n} +Hello {name|j|js|h|u|uc}!{~n} +Hello {name|j|js|h|uc|s}!{~n} +Hello {name|j|js|h|uc|u}!{~n} +Hello {name|j|js|u|s|h}!{~n} +Hello {name|j|js|u|s|uc}!{~n} +Hello {name|j|js|u|h|s}!{~n} +Hello {name|j|js|u|h|uc}!{~n} +Hello {name|j|js|u|uc|s}!{~n} +Hello {name|j|js|u|uc|h}!{~n} +Hello {name|j|js|uc|s|h}!{~n} +Hello {name|j|js|uc|s|u}!{~n} +Hello {name|j|js|uc|h|s}!{~n} +Hello {name|j|js|uc|h|u}!{~n} +Hello {name|j|js|uc|u|s}!{~n} +Hello {name|j|js|uc|u|h}!{~n} +Hello {name|u|s|h|j|uc}!{~n} +Hello {name|u|s|h|j|js}!{~n} +Hello {name|u|s|h|uc|j}!{~n} +Hello {name|u|s|h|uc|js}!{~n} +Hello {name|u|s|h|js|j}!{~n} +Hello {name|u|s|h|js|uc}!{~n} +Hello {name|u|s|j|h|uc}!{~n} +Hello {name|u|s|j|h|js}!{~n} +Hello {name|u|s|j|uc|h}!{~n} +Hello {name|u|s|j|uc|js}!{~n} +Hello {name|u|s|j|js|h}!{~n} +Hello {name|u|s|j|js|uc}!{~n} +Hello {name|u|s|uc|h|j}!{~n} +Hello {name|u|s|uc|h|js}!{~n} +Hello {name|u|s|uc|j|h}!{~n} +Hello {name|u|s|uc|j|js}!{~n} +Hello {name|u|s|uc|js|h}!{~n} +Hello {name|u|s|uc|js|j}!{~n} +Hello {name|u|s|js|h|j}!{~n} +Hello {name|u|s|js|h|uc}!{~n} +Hello {name|u|s|js|j|h}!{~n} +Hello {name|u|s|js|j|uc}!{~n} +Hello {name|u|s|js|uc|h}!{~n} +Hello {name|u|s|js|uc|j}!{~n} +Hello {name|u|h|s|j|uc}!{~n} +Hello {name|u|h|s|j|js}!{~n} +Hello {name|u|h|s|uc|j}!{~n} +Hello {name|u|h|s|uc|js}!{~n} +Hello {name|u|h|s|js|j}!{~n} +Hello {name|u|h|s|js|uc}!{~n} +Hello {name|u|h|j|s|uc}!{~n} +Hello {name|u|h|j|s|js}!{~n} +Hello {name|u|h|j|uc|s}!{~n} +Hello {name|u|h|j|uc|js}!{~n} +Hello {name|u|h|j|js|s}!{~n} +Hello {name|u|h|j|js|uc}!{~n} +Hello {name|u|h|uc|s|j}!{~n} +Hello {name|u|h|uc|s|js}!{~n} +Hello {name|u|h|uc|j|s}!{~n} +Hello {name|u|h|uc|j|js}!{~n} +Hello {name|u|h|uc|js|s}!{~n} +Hello {name|u|h|uc|js|j}!{~n} +Hello {name|u|h|js|s|j}!{~n} +Hello {name|u|h|js|s|uc}!{~n} +Hello {name|u|h|js|j|s}!{~n} +Hello {name|u|h|js|j|uc}!{~n} +Hello {name|u|h|js|uc|s}!{~n} +Hello {name|u|h|js|uc|j}!{~n} +Hello {name|u|j|s|h|uc}!{~n} +Hello {name|u|j|s|h|js}!{~n} +Hello {name|u|j|s|uc|h}!{~n} +Hello {name|u|j|s|uc|js}!{~n} +Hello {name|u|j|s|js|h}!{~n} +Hello {name|u|j|s|js|uc}!{~n} +Hello {name|u|j|h|s|uc}!{~n} +Hello {name|u|j|h|s|js}!{~n} +Hello {name|u|j|h|uc|s}!{~n} +Hello {name|u|j|h|uc|js}!{~n} +Hello {name|u|j|h|js|s}!{~n} +Hello {name|u|j|h|js|uc}!{~n} +Hello {name|u|j|uc|s|h}!{~n} +Hello {name|u|j|uc|s|js}!{~n} +Hello {name|u|j|uc|h|s}!{~n} +Hello {name|u|j|uc|h|js}!{~n} +Hello {name|u|j|uc|js|s}!{~n} +Hello {name|u|j|uc|js|h}!{~n} +Hello {name|u|j|js|s|h}!{~n} +Hello {name|u|j|js|s|uc}!{~n} +Hello {name|u|j|js|h|s}!{~n} +Hello {name|u|j|js|h|uc}!{~n} +Hello {name|u|j|js|uc|s}!{~n} +Hello {name|u|j|js|uc|h}!{~n} +Hello {name|u|uc|s|h|j}!{~n} +Hello {name|u|uc|s|h|js}!{~n} +Hello {name|u|uc|s|j|h}!{~n} +Hello {name|u|uc|s|j|js}!{~n} +Hello {name|u|uc|s|js|h}!{~n} +Hello {name|u|uc|s|js|j}!{~n} +Hello {name|u|uc|h|s|j}!{~n} +Hello {name|u|uc|h|s|js}!{~n} +Hello {name|u|uc|h|j|s}!{~n} +Hello {name|u|uc|h|j|js}!{~n} +Hello {name|u|uc|h|js|s}!{~n} +Hello {name|u|uc|h|js|j}!{~n} +Hello {name|u|uc|j|s|h}!{~n} +Hello {name|u|uc|j|s|js}!{~n} +Hello {name|u|uc|j|h|s}!{~n} +Hello {name|u|uc|j|h|js}!{~n} +Hello {name|u|uc|j|js|s}!{~n} +Hello {name|u|uc|j|js|h}!{~n} +Hello {name|u|uc|js|s|h}!{~n} +Hello {name|u|uc|js|s|j}!{~n} +Hello {name|u|uc|js|h|s}!{~n} +Hello {name|u|uc|js|h|j}!{~n} +Hello {name|u|uc|js|j|s}!{~n} +Hello {name|u|uc|js|j|h}!{~n} +Hello {name|u|js|s|h|j}!{~n} +Hello {name|u|js|s|h|uc}!{~n} +Hello {name|u|js|s|j|h}!{~n} +Hello {name|u|js|s|j|uc}!{~n} +Hello {name|u|js|s|uc|h}!{~n} +Hello {name|u|js|s|uc|j}!{~n} +Hello {name|u|js|h|s|j}!{~n} +Hello {name|u|js|h|s|uc}!{~n} +Hello {name|u|js|h|j|s}!{~n} +Hello {name|u|js|h|j|uc}!{~n} +Hello {name|u|js|h|uc|s}!{~n} +Hello {name|u|js|h|uc|j}!{~n} +Hello {name|u|js|j|s|h}!{~n} +Hello {name|u|js|j|s|uc}!{~n} +Hello {name|u|js|j|h|s}!{~n} +Hello {name|u|js|j|h|uc}!{~n} +Hello {name|u|js|j|uc|s}!{~n} +Hello {name|u|js|j|uc|h}!{~n} +Hello {name|u|js|uc|s|h}!{~n} +Hello {name|u|js|uc|s|j}!{~n} +Hello {name|u|js|uc|h|s}!{~n} +Hello {name|u|js|uc|h|j}!{~n} +Hello {name|u|js|uc|j|s}!{~n} +Hello {name|u|js|uc|j|h}!{~n} +Hello {name|uc|s|h|j|u}!{~n} +Hello {name|uc|s|h|j|js}!{~n} +Hello {name|uc|s|h|u|j}!{~n} +Hello {name|uc|s|h|u|js}!{~n} +Hello {name|uc|s|h|js|j}!{~n} +Hello {name|uc|s|h|js|u}!{~n} +Hello {name|uc|s|j|h|u}!{~n} +Hello {name|uc|s|j|h|js}!{~n} +Hello {name|uc|s|j|u|h}!{~n} +Hello {name|uc|s|j|u|js}!{~n} +Hello {name|uc|s|j|js|h}!{~n} +Hello {name|uc|s|j|js|u}!{~n} +Hello {name|uc|s|u|h|j}!{~n} +Hello {name|uc|s|u|h|js}!{~n} +Hello {name|uc|s|u|j|h}!{~n} +Hello {name|uc|s|u|j|js}!{~n} +Hello {name|uc|s|u|js|h}!{~n} +Hello {name|uc|s|u|js|j}!{~n} +Hello {name|uc|s|js|h|j}!{~n} +Hello {name|uc|s|js|h|u}!{~n} +Hello {name|uc|s|js|j|h}!{~n} +Hello {name|uc|s|js|j|u}!{~n} +Hello {name|uc|s|js|u|h}!{~n} +Hello {name|uc|s|js|u|j}!{~n} +Hello {name|uc|h|s|j|u}!{~n} +Hello {name|uc|h|s|j|js}!{~n} +Hello {name|uc|h|s|u|j}!{~n} +Hello {name|uc|h|s|u|js}!{~n} +Hello {name|uc|h|s|js|j}!{~n} +Hello {name|uc|h|s|js|u}!{~n} +Hello {name|uc|h|j|s|u}!{~n} +Hello {name|uc|h|j|s|js}!{~n} +Hello {name|uc|h|j|u|s}!{~n} +Hello {name|uc|h|j|u|js}!{~n} +Hello {name|uc|h|j|js|s}!{~n} +Hello {name|uc|h|j|js|u}!{~n} +Hello {name|uc|h|u|s|j}!{~n} +Hello {name|uc|h|u|s|js}!{~n} +Hello {name|uc|h|u|j|s}!{~n} +Hello {name|uc|h|u|j|js}!{~n} +Hello {name|uc|h|u|js|s}!{~n} +Hello {name|uc|h|u|js|j}!{~n} +Hello {name|uc|h|js|s|j}!{~n} +Hello {name|uc|h|js|s|u}!{~n} +Hello {name|uc|h|js|j|s}!{~n} +Hello {name|uc|h|js|j|u}!{~n} +Hello {name|uc|h|js|u|s}!{~n} +Hello {name|uc|h|js|u|j}!{~n} +Hello {name|uc|j|s|h|u}!{~n} +Hello {name|uc|j|s|h|js}!{~n} +Hello {name|uc|j|s|u|h}!{~n} +Hello {name|uc|j|s|u|js}!{~n} +Hello {name|uc|j|s|js|h}!{~n} +Hello {name|uc|j|s|js|u}!{~n} +Hello {name|uc|j|h|s|u}!{~n} +Hello {name|uc|j|h|s|js}!{~n} +Hello {name|uc|j|h|u|s}!{~n} +Hello {name|uc|j|h|u|js}!{~n} +Hello {name|uc|j|h|js|s}!{~n} +Hello {name|uc|j|h|js|u}!{~n} +Hello {name|uc|j|u|s|h}!{~n} +Hello {name|uc|j|u|s|js}!{~n} +Hello {name|uc|j|u|h|s}!{~n} +Hello {name|uc|j|u|h|js}!{~n} +Hello {name|uc|j|u|js|s}!{~n} +Hello {name|uc|j|u|js|h}!{~n} +Hello {name|uc|j|js|s|h}!{~n} +Hello {name|uc|j|js|s|u}!{~n} +Hello {name|uc|j|js|h|s}!{~n} +Hello {name|uc|j|js|h|u}!{~n} +Hello {name|uc|j|js|u|s}!{~n} +Hello {name|uc|j|js|u|h}!{~n} +Hello {name|uc|u|s|h|j}!{~n} +Hello {name|uc|u|s|h|js}!{~n} +Hello {name|uc|u|s|j|h}!{~n} +Hello {name|uc|u|s|j|js}!{~n} +Hello {name|uc|u|s|js|h}!{~n} +Hello {name|uc|u|s|js|j}!{~n} +Hello {name|uc|u|h|s|j}!{~n} +Hello {name|uc|u|h|s|js}!{~n} +Hello {name|uc|u|h|j|s}!{~n} +Hello {name|uc|u|h|j|js}!{~n} +Hello {name|uc|u|h|js|s}!{~n} +Hello {name|uc|u|h|js|j}!{~n} +Hello {name|uc|u|j|s|h}!{~n} +Hello {name|uc|u|j|s|js}!{~n} +Hello {name|uc|u|j|h|s}!{~n} +Hello {name|uc|u|j|h|js}!{~n} +Hello {name|uc|u|j|js|s}!{~n} +Hello {name|uc|u|j|js|h}!{~n} +Hello {name|uc|u|js|s|h}!{~n} +Hello {name|uc|u|js|s|j}!{~n} +Hello {name|uc|u|js|h|s}!{~n} +Hello {name|uc|u|js|h|j}!{~n} +Hello {name|uc|u|js|j|s}!{~n} +Hello {name|uc|u|js|j|h}!{~n} +Hello {name|uc|js|s|h|j}!{~n} +Hello {name|uc|js|s|h|u}!{~n} +Hello {name|uc|js|s|j|h}!{~n} +Hello {name|uc|js|s|j|u}!{~n} +Hello {name|uc|js|s|u|h}!{~n} +Hello {name|uc|js|s|u|j}!{~n} +Hello {name|uc|js|h|s|j}!{~n} +Hello {name|uc|js|h|s|u}!{~n} +Hello {name|uc|js|h|j|s}!{~n} +Hello {name|uc|js|h|j|u}!{~n} +Hello {name|uc|js|h|u|s}!{~n} +Hello {name|uc|js|h|u|j}!{~n} +Hello {name|uc|js|j|s|h}!{~n} +Hello {name|uc|js|j|s|u}!{~n} +Hello {name|uc|js|j|h|s}!{~n} +Hello {name|uc|js|j|h|u}!{~n} +Hello {name|uc|js|j|u|s}!{~n} +Hello {name|uc|js|j|u|h}!{~n} +Hello {name|uc|js|u|s|h}!{~n} +Hello {name|uc|js|u|s|j}!{~n} +Hello {name|uc|js|u|h|s}!{~n} +Hello {name|uc|js|u|h|j}!{~n} +Hello {name|uc|js|u|j|s}!{~n} +Hello {name|uc|js|u|j|h}!{~n} +Hello {name|js|s|h|j|u}!{~n} +Hello {name|js|s|h|j|uc}!{~n} +Hello {name|js|s|h|u|j}!{~n} +Hello {name|js|s|h|u|uc}!{~n} +Hello {name|js|s|h|uc|j}!{~n} +Hello {name|js|s|h|uc|u}!{~n} +Hello {name|js|s|j|h|u}!{~n} +Hello {name|js|s|j|h|uc}!{~n} +Hello {name|js|s|j|u|h}!{~n} +Hello {name|js|s|j|u|uc}!{~n} +Hello {name|js|s|j|uc|h}!{~n} +Hello {name|js|s|j|uc|u}!{~n} +Hello {name|js|s|u|h|j}!{~n} +Hello {name|js|s|u|h|uc}!{~n} +Hello {name|js|s|u|j|h}!{~n} +Hello {name|js|s|u|j|uc}!{~n} +Hello {name|js|s|u|uc|h}!{~n} +Hello {name|js|s|u|uc|j}!{~n} +Hello {name|js|s|uc|h|j}!{~n} +Hello {name|js|s|uc|h|u}!{~n} +Hello {name|js|s|uc|j|h}!{~n} +Hello {name|js|s|uc|j|u}!{~n} +Hello {name|js|s|uc|u|h}!{~n} +Hello {name|js|s|uc|u|j}!{~n} +Hello {name|js|h|s|j|u}!{~n} +Hello {name|js|h|s|j|uc}!{~n} +Hello {name|js|h|s|u|j}!{~n} +Hello {name|js|h|s|u|uc}!{~n} +Hello {name|js|h|s|uc|j}!{~n} +Hello {name|js|h|s|uc|u}!{~n} +Hello {name|js|h|j|s|u}!{~n} +Hello {name|js|h|j|s|uc}!{~n} +Hello {name|js|h|j|u|s}!{~n} +Hello {name|js|h|j|u|uc}!{~n} +Hello {name|js|h|j|uc|s}!{~n} +Hello {name|js|h|j|uc|u}!{~n} +Hello {name|js|h|u|s|j}!{~n} +Hello {name|js|h|u|s|uc}!{~n} +Hello {name|js|h|u|j|s}!{~n} +Hello {name|js|h|u|j|uc}!{~n} +Hello {name|js|h|u|uc|s}!{~n} +Hello {name|js|h|u|uc|j}!{~n} +Hello {name|js|h|uc|s|j}!{~n} +Hello {name|js|h|uc|s|u}!{~n} +Hello {name|js|h|uc|j|s}!{~n} +Hello {name|js|h|uc|j|u}!{~n} +Hello {name|js|h|uc|u|s}!{~n} +Hello {name|js|h|uc|u|j}!{~n} +Hello {name|js|j|s|h|u}!{~n} +Hello {name|js|j|s|h|uc}!{~n} +Hello {name|js|j|s|u|h}!{~n} +Hello {name|js|j|s|u|uc}!{~n} +Hello {name|js|j|s|uc|h}!{~n} +Hello {name|js|j|s|uc|u}!{~n} +Hello {name|js|j|h|s|u}!{~n} +Hello {name|js|j|h|s|uc}!{~n} +Hello {name|js|j|h|u|s}!{~n} +Hello {name|js|j|h|u|uc}!{~n} +Hello {name|js|j|h|uc|s}!{~n} +Hello {name|js|j|h|uc|u}!{~n} +Hello {name|js|j|u|s|h}!{~n} +Hello {name|js|j|u|s|uc}!{~n} +Hello {name|js|j|u|h|s}!{~n} +Hello {name|js|j|u|h|uc}!{~n} +Hello {name|js|j|u|uc|s}!{~n} +Hello {name|js|j|u|uc|h}!{~n} +Hello {name|js|j|uc|s|h}!{~n} +Hello {name|js|j|uc|s|u}!{~n} +Hello {name|js|j|uc|h|s}!{~n} +Hello {name|js|j|uc|h|u}!{~n} +Hello {name|js|j|uc|u|s}!{~n} +Hello {name|js|j|uc|u|h}!{~n} +Hello {name|js|u|s|h|j}!{~n} +Hello {name|js|u|s|h|uc}!{~n} +Hello {name|js|u|s|j|h}!{~n} +Hello {name|js|u|s|j|uc}!{~n} +Hello {name|js|u|s|uc|h}!{~n} +Hello {name|js|u|s|uc|j}!{~n} +Hello {name|js|u|h|s|j}!{~n} +Hello {name|js|u|h|s|uc}!{~n} +Hello {name|js|u|h|j|s}!{~n} +Hello {name|js|u|h|j|uc}!{~n} +Hello {name|js|u|h|uc|s}!{~n} +Hello {name|js|u|h|uc|j}!{~n} +Hello {name|js|u|j|s|h}!{~n} +Hello {name|js|u|j|s|uc}!{~n} +Hello {name|js|u|j|h|s}!{~n} +Hello {name|js|u|j|h|uc}!{~n} +Hello {name|js|u|j|uc|s}!{~n} +Hello {name|js|u|j|uc|h}!{~n} +Hello {name|js|u|uc|s|h}!{~n} +Hello {name|js|u|uc|s|j}!{~n} +Hello {name|js|u|uc|h|s}!{~n} +Hello {name|js|u|uc|h|j}!{~n} +Hello {name|js|u|uc|j|s}!{~n} +Hello {name|js|u|uc|j|h}!{~n} +Hello {name|js|uc|s|h|j}!{~n} +Hello {name|js|uc|s|h|u}!{~n} +Hello {name|js|uc|s|j|h}!{~n} +Hello {name|js|uc|s|j|u}!{~n} +Hello {name|js|uc|s|u|h}!{~n} +Hello {name|js|uc|s|u|j}!{~n} +Hello {name|js|uc|h|s|j}!{~n} +Hello {name|js|uc|h|s|u}!{~n} +Hello {name|js|uc|h|j|s}!{~n} +Hello {name|js|uc|h|j|u}!{~n} +Hello {name|js|uc|h|u|s}!{~n} +Hello {name|js|uc|h|u|j}!{~n} +Hello {name|js|uc|j|s|h}!{~n} +Hello {name|js|uc|j|s|u}!{~n} +Hello {name|js|uc|j|h|s}!{~n} +Hello {name|js|uc|j|h|u}!{~n} +Hello {name|js|uc|j|u|s}!{~n} +Hello {name|js|uc|j|u|h}!{~n} +Hello {name|js|uc|u|s|h}!{~n} +Hello {name|js|uc|u|s|j}!{~n} +Hello {name|js|uc|u|h|s}!{~n} +Hello {name|js|uc|u|h|j}!{~n} +Hello {name|js|uc|u|j|s}!{~n} +Hello {name|js|uc|u|j|h}!{~n} diff --git a/js/test_cases/generated_filters_two/null.json b/js/test_cases/generated_filters_two/null.json new file mode 100644 index 0000000..298db8f --- /dev/null +++ b/js/test_cases/generated_filters_two/null.json @@ -0,0 +1,3 @@ +{ + "name": null +} diff --git a/js/test_cases/generated_filters_two/object.json b/js/test_cases/generated_filters_two/object.json new file mode 100644 index 0000000..7a016fe --- /dev/null +++ b/js/test_cases/generated_filters_two/object.json @@ -0,0 +1,5 @@ +{ + "name": { + "foo": "bar" + } +} diff --git a/js/test_cases/generated_filters_two/string.json b/js/test_cases/generated_filters_two/string.json new file mode 100644 index 0000000..6b66c0f --- /dev/null +++ b/js/test_cases/generated_filters_two/string.json @@ -0,0 +1,3 @@ +{ + "name": "{\"foo\": \"bar\"}" +} From 5424543122ce662c5b9a6f80142533e615d0ddba Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 23 May 2020 22:31:33 -0400 Subject: [PATCH 15/16] Object also should not turn into a string during javascript escape. --- src/bin.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/bin.rs b/src/bin.rs index 56ed1a2..3ad5f90 100644 --- a/src/bin.rs +++ b/src/bin.rs @@ -195,6 +195,9 @@ fn apply_filter( (serde_json::Value::Number(number), Filter::JavascriptStringEncode) => { Ok(serde_json::Value::Number(number.clone())) } + (serde_json::Value::Object(obj), Filter::JavascriptStringEncode) => { + Ok(serde_json::Value::Object(obj.clone())) + } (_, Filter::JavascriptStringEncode) => Ok(serde_json::Value::String(javascript_escape( &json_value.render(&Vec::new())?, ))), From 92b9e571be3a26e36ff985be46d24c1cf1046252 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 23 May 2020 22:37:56 -0400 Subject: [PATCH 16/16] Array had the same javascript escaping string issue. Filed a bug at https://github.com/linkedin/dustjs/issues/802 . --- src/bin.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/bin.rs b/src/bin.rs index 3ad5f90..2b19174 100644 --- a/src/bin.rs +++ b/src/bin.rs @@ -195,6 +195,9 @@ fn apply_filter( (serde_json::Value::Number(number), Filter::JavascriptStringEncode) => { Ok(serde_json::Value::Number(number.clone())) } + (serde_json::Value::Array(arr), Filter::JavascriptStringEncode) => { + Ok(serde_json::Value::Array(arr.clone())) + } (serde_json::Value::Object(obj), Filter::JavascriptStringEncode) => { Ok(serde_json::Value::Object(obj.clone())) }