summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
author星外之神 <wszqkzqk@qq.com>2022-10-28 23:47:56 +0800
committerRico Tzschichholz <ricotz@ubuntu.com>2022-10-30 16:11:11 +0100
commit3c3ee793b499be959b3ed7f1f74014713382a438 (patch)
treefeb077276aa853d7d7d05659e4689c24a6f231cd /tests
parent2b69b8accac817f23bd51ca41d14deec131d83c5 (diff)
downloadvala-3c3ee793b499be959b3ed7f1f74014713382a438.tar.gz
vala: Add support for verbatim template string
Fixes https://gitlab.gnome.org/GNOME/vala/issues/1373
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am4
-rw-r--r--tests/genie/literal-template-string.c-expected54
-rw-r--r--tests/genie/literal-template-string.gs13
-rw-r--r--tests/genie/verbatim-template.c-expected103
-rw-r--r--tests/genie/verbatim-template.gs16
-rw-r--r--tests/parser/template.c-expected29
-rw-r--r--tests/parser/template.vala1
-rw-r--r--tests/parser/verbatim-template.c-expected83
-rw-r--r--tests/parser/verbatim-template.vala15
-rw-r--r--tests/scanner/string-template.c-expected57
-rw-r--r--tests/scanner/string-template.vala8
-rw-r--r--tests/scanner/string-verbatim-template.c-expected57
-rw-r--r--tests/scanner/string-verbatim-template.vala8
13 files changed, 418 insertions, 30 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 10ff6183f..b93d4963c 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -908,6 +908,8 @@ TESTS = \
scanner/string-escape-x-digit-length.test \
scanner/string-escape-x-empty.test \
scanner/string-escape-x.vala \
+ scanner/string-template.vala \
+ scanner/string-verbatim-template.vala \
parser/argument-list-incomplete.test \
parser/array-creation-invalid.test \
parser/array-length.vala \
@@ -1006,6 +1008,7 @@ TESTS = \
parser/using-invalid-namespace.test \
parser/var-type-dynamic.vala \
parser/var-type-nullable.vala \
+ parser/verbatim-template.vala \
parser/with-embedded.vala \
parser/with-empty.vala \
parser/with-invalid-declaration.test \
@@ -1403,6 +1406,7 @@ TESTS = \
genie/struct-after-class.gs \
genie/try-except-finally.gs \
genie/typeof.gs \
+ genie/verbatim-template.gs \
genie/while.gs \
glib/conditional-glib-api.vala \
bindings/gio/memoryoutputstream.vala \
diff --git a/tests/genie/literal-template-string.c-expected b/tests/genie/literal-template-string.c-expected
index 9dad5e432..0333b8546 100644
--- a/tests/genie/literal-template-string.c-expected
+++ b/tests/genie/literal-template-string.c-expected
@@ -5,15 +5,36 @@
#include <string.h>
#include <glib.h>
+#if !defined(VALA_EXTERN)
+#if defined(_MSC_VER)
+#define VALA_EXTERN __declspec(dllexport) extern
+#elif __GNUC__ >= 4
+#define VALA_EXTERN __attribute__((visibility("default"))) extern
+#else
+#define VALA_EXTERN extern
+#endif
+#endif
+
#define _g_free0(var) (var = (g_free (var), NULL))
#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+VALA_EXTERN gchar* m (void);
static void _vala_main (gchar** args,
gint args_length1);
+gchar*
+m (void)
+{
+ gchar* _tmp0_;
+ gchar* result;
+ _tmp0_ = g_strdup ("foo");
+ result = _tmp0_;
+ return result;
+}
+
static const gchar*
string_to_string (const gchar* self)
{
@@ -27,28 +48,35 @@ static void
_vala_main (gchar** args,
gint args_length1)
{
- gchar* a = NULL;
+ gchar* _result_ = NULL;
gchar* _tmp0_;
- gint b = 0;
- gchar* c = NULL;
const gchar* _tmp1_;
+ gint i = 0;
gchar* _tmp2_;
gchar* _tmp3_;
gchar* _tmp4_;
gchar* _tmp5_;
- _tmp0_ = g_strdup ("test");
- a = _tmp0_;
- b = 100;
- _tmp1_ = string_to_string (a);
- _tmp2_ = g_strdup_printf ("%i", b);
+ const gchar* _tmp6_;
+ gchar* _tmp7_;
+ const gchar* _tmp8_;
+ _tmp0_ = g_strdup ("");
+ _result_ = _tmp0_;
+ _tmp1_ = _result_;
+ _vala_assert (g_strcmp0 (_tmp1_, "") == 0, "result == \"\"");
+ i = 42;
+ _tmp2_ = g_strdup_printf ("%i", i);
_tmp3_ = _tmp2_;
- _tmp4_ = g_strconcat (_tmp1_, _tmp3_, NULL);
+ _tmp4_ = m ();
_tmp5_ = _tmp4_;
+ _tmp6_ = string_to_string (_tmp5_);
+ _tmp7_ = g_strconcat ("i=", _tmp3_, " m=", _tmp6_, " ", "$", NULL);
+ _g_free0 (_result_);
+ _result_ = _tmp7_;
+ _g_free0 (_tmp5_);
_g_free0 (_tmp3_);
- c = _tmp5_;
- _vala_assert (g_strcmp0 (c, "test100") == 0, "c == \"test100\"");
- _g_free0 (c);
- _g_free0 (a);
+ _tmp8_ = _result_;
+ _vala_assert (g_strcmp0 (_tmp8_, "i=42 m=foo $") == 0, "result == \"i=42 m=foo $\"");
+ _g_free0 (_result_);
}
int
diff --git a/tests/genie/literal-template-string.gs b/tests/genie/literal-template-string.gs
index 87e75ae92..8c7dc617d 100644
--- a/tests/genie/literal-template-string.gs
+++ b/tests/genie/literal-template-string.gs
@@ -1,5 +1,10 @@
+def m():string
+ return "foo"
+
init
- var a = "test"
- var b = 100
- var c = @"$( a )$b"
- assert( c == "test100" )
+ result:string = @""
+ assert( result == "" )
+
+ i:int = 42
+ result = @"i=$i m=$( m() ) $$"
+ assert( result == "i=42 m=foo $" )
diff --git a/tests/genie/verbatim-template.c-expected b/tests/genie/verbatim-template.c-expected
new file mode 100644
index 000000000..97531c04f
--- /dev/null
+++ b/tests/genie/verbatim-template.c-expected
@@ -0,0 +1,103 @@
+/* genie_verbatim_template.c generated by valac, the Vala compiler
+ * generated from genie_verbatim_template.gs, do not modify */
+
+#include <stdlib.h>
+#include <string.h>
+#include <glib.h>
+
+#if !defined(VALA_EXTERN)
+#if defined(_MSC_VER)
+#define VALA_EXTERN __declspec(dllexport) extern
+#elif __GNUC__ >= 4
+#define VALA_EXTERN __attribute__((visibility("default"))) extern
+#else
+#define VALA_EXTERN extern
+#endif
+#endif
+
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
+#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
+#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+
+VALA_EXTERN gchar* m (void);
+static void _vala_main (gchar** args,
+ gint args_length1);
+
+gchar*
+m (void)
+{
+ gchar* _tmp0_;
+ gchar* result;
+ _tmp0_ = g_strdup ("foo");
+ result = _tmp0_;
+ return result;
+}
+
+static const gchar*
+string_to_string (const gchar* self)
+{
+ const gchar* result;
+ g_return_val_if_fail (self != NULL, NULL);
+ result = self;
+ return result;
+}
+
+static void
+_vala_main (gchar** args,
+ gint args_length1)
+{
+ gchar* _result_ = NULL;
+ gchar* _tmp0_;
+ const gchar* _tmp1_;
+ gint i = 0;
+ gchar* _tmp2_;
+ gchar* _tmp3_;
+ gchar* _tmp4_;
+ gchar* _tmp5_;
+ const gchar* _tmp6_;
+ gchar* _tmp7_;
+ const gchar* _tmp8_;
+ gint a = 0;
+ gchar* _tmp9_;
+ gchar* _tmp10_;
+ gchar* _tmp11_;
+ const gchar* _tmp12_;
+ _tmp0_ = g_strdup ("");
+ _result_ = _tmp0_;
+ _tmp1_ = _result_;
+ _vala_assert (g_strcmp0 (_tmp1_, "") == 0, "result == \"\"");
+ i = 42;
+ _tmp2_ = g_strdup_printf ("%i", i);
+ _tmp3_ = _tmp2_;
+ _tmp4_ = m ();
+ _tmp5_ = _tmp4_;
+ _tmp6_ = string_to_string (_tmp5_);
+ _tmp7_ = g_strconcat ("i=", _tmp3_, " \nm=", _tmp6_, " \n", "$", NULL);
+ _g_free0 (_result_);
+ _result_ = _tmp7_;
+ _g_free0 (_tmp5_);
+ _g_free0 (_tmp3_);
+ _tmp8_ = _result_;
+ _vala_assert (g_strcmp0 (_tmp8_, "i=42 \nm=foo \n$") == 0, "result == \"i=42 \\nm=foo \\n$\"");
+ a = 4711;
+ _tmp9_ = g_strdup_printf ("%i", a);
+ _tmp10_ = _tmp9_;
+ _tmp11_ = g_strconcat ("\"", _tmp10_, "\"", "\"", NULL);
+ _g_free0 (_result_);
+ _result_ = _tmp11_;
+ _g_free0 (_tmp10_);
+ _tmp12_ = _result_;
+ _vala_assert (g_strcmp0 (_tmp12_, "\"4711\"\"") == 0, "result == \"\\\"4711\\\"\\\"\"");
+ _g_free0 (_result_);
+}
+
+int
+main (int argc,
+ char ** argv)
+{
+ _vala_main (argv, argc);
+ return 0;
+}
+
diff --git a/tests/genie/verbatim-template.gs b/tests/genie/verbatim-template.gs
new file mode 100644
index 000000000..92f9a5c80
--- /dev/null
+++ b/tests/genie/verbatim-template.gs
@@ -0,0 +1,16 @@
+def m():string
+ return "foo"
+
+init
+ result:string = @""""""
+ assert( result == "" )
+
+ i:int = 42
+ result = @"""i=$i
+m=$( m() )
+$$"""
+ assert( result == "i=42 \nm=foo \n$" )
+
+ a:int = 4711
+ result = @""""$a"""""
+ assert( result == "\"4711\"\"" )
diff --git a/tests/parser/template.c-expected b/tests/parser/template.c-expected
index 933aa14f5..093acfe15 100644
--- a/tests/parser/template.c-expected
+++ b/tests/parser/template.c-expected
@@ -46,27 +46,30 @@ _vala_main (void)
{
gchar* _result_ = NULL;
gchar* _tmp0_;
+ const gchar* _tmp1_;
gint i = 0;
- gchar* _tmp1_;
gchar* _tmp2_;
- const gchar* _tmp3_;
+ gchar* _tmp3_;
const gchar* _tmp4_;
- gchar* _tmp5_;
- const gchar* _tmp6_;
+ const gchar* _tmp5_;
+ gchar* _tmp6_;
+ const gchar* _tmp7_;
_tmp0_ = g_strdup ("");
_g_free0 (_result_);
_result_ = _tmp0_;
+ _tmp1_ = _result_;
+ _vala_assert (g_strcmp0 (_tmp1_, "") == 0, "result == \"\"");
i = 42;
- _tmp1_ = g_strdup_printf ("%i", i);
- _tmp2_ = _tmp1_;
- _tmp3_ = m ();
- _tmp4_ = string_to_string (_tmp3_);
- _tmp5_ = g_strconcat ("i=", _tmp2_, " m=", _tmp4_, " ", "$", NULL);
+ _tmp2_ = g_strdup_printf ("%i", i);
+ _tmp3_ = _tmp2_;
+ _tmp4_ = m ();
+ _tmp5_ = string_to_string (_tmp4_);
+ _tmp6_ = g_strconcat ("i=", _tmp3_, " m=", _tmp5_, " ", "$", NULL);
_g_free0 (_result_);
- _result_ = _tmp5_;
- _g_free0 (_tmp2_);
- _tmp6_ = _result_;
- _vala_assert (g_strcmp0 (_tmp6_, "i=42 m=foo $") == 0, "result == \"i=42 m=foo $\"");
+ _result_ = _tmp6_;
+ _g_free0 (_tmp3_);
+ _tmp7_ = _result_;
+ _vala_assert (g_strcmp0 (_tmp7_, "i=42 m=foo $") == 0, "result == \"i=42 m=foo $\"");
_g_free0 (_result_);
}
diff --git a/tests/parser/template.vala b/tests/parser/template.vala
index b4a073676..f1fd76cfe 100644
--- a/tests/parser/template.vala
+++ b/tests/parser/template.vala
@@ -5,6 +5,7 @@ unowned string m () {
void main () {
string result;
result = @"";
+ assert (result == "");
int i = 42;
result = @"i=$i m=$(m ()) $$";
diff --git a/tests/parser/verbatim-template.c-expected b/tests/parser/verbatim-template.c-expected
new file mode 100644
index 000000000..108cae7c5
--- /dev/null
+++ b/tests/parser/verbatim-template.c-expected
@@ -0,0 +1,83 @@
+/* parser_verbatim_template.c generated by valac, the Vala compiler
+ * generated from parser_verbatim_template.vala, do not modify */
+
+#include <stdlib.h>
+#include <string.h>
+#include <glib.h>
+
+#if !defined(VALA_EXTERN)
+#if defined(_MSC_VER)
+#define VALA_EXTERN __declspec(dllexport) extern
+#elif __GNUC__ >= 4
+#define VALA_EXTERN __attribute__((visibility("default"))) extern
+#else
+#define VALA_EXTERN extern
+#endif
+#endif
+
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
+#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
+#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+
+VALA_EXTERN const gchar* m (void);
+static void _vala_main (void);
+
+const gchar*
+m (void)
+{
+ const gchar* result;
+ result = "foo";
+ return result;
+}
+
+static const gchar*
+string_to_string (const gchar* self)
+{
+ const gchar* result;
+ g_return_val_if_fail (self != NULL, NULL);
+ result = self;
+ return result;
+}
+
+static void
+_vala_main (void)
+{
+ gchar* _result_ = NULL;
+ gchar* _tmp0_;
+ const gchar* _tmp1_;
+ gint i = 0;
+ gchar* _tmp2_;
+ gchar* _tmp3_;
+ const gchar* _tmp4_;
+ const gchar* _tmp5_;
+ gchar* _tmp6_;
+ const gchar* _tmp7_;
+ _tmp0_ = g_strdup ("");
+ _g_free0 (_result_);
+ _result_ = _tmp0_;
+ _tmp1_ = _result_;
+ _vala_assert (g_strcmp0 (_tmp1_, "") == 0, "result == \"\"");
+ i = 42;
+ _tmp2_ = g_strdup_printf ("%i", i);
+ _tmp3_ = _tmp2_;
+ _tmp4_ = m ();
+ _tmp5_ = string_to_string (_tmp4_);
+ _tmp6_ = g_strconcat ("i=", _tmp3_, " \nm=", _tmp5_, " \n", "$", NULL);
+ _g_free0 (_result_);
+ _result_ = _tmp6_;
+ _g_free0 (_tmp3_);
+ _tmp7_ = _result_;
+ _vala_assert (g_strcmp0 (_tmp7_, "i=42 \nm=foo \n$") == 0, "result == \"i=42 \\nm=foo \\n$\"");
+ _g_free0 (_result_);
+}
+
+int
+main (int argc,
+ char ** argv)
+{
+ _vala_main ();
+ return 0;
+}
+
diff --git a/tests/parser/verbatim-template.vala b/tests/parser/verbatim-template.vala
new file mode 100644
index 000000000..4a3db1fa5
--- /dev/null
+++ b/tests/parser/verbatim-template.vala
@@ -0,0 +1,15 @@
+unowned string m () {
+ return "foo";
+}
+
+void main () {
+ string result;
+ result = @"""""";
+ assert (result == "");
+
+ int i = 42;
+ result = @"""i=$i
+m=$(m ())
+$$""";
+ assert (result == "i=42 \nm=foo \n$");
+}
diff --git a/tests/scanner/string-template.c-expected b/tests/scanner/string-template.c-expected
new file mode 100644
index 000000000..eb6821b76
--- /dev/null
+++ b/tests/scanner/string-template.c-expected
@@ -0,0 +1,57 @@
+/* scanner_string_template.c generated by valac, the Vala compiler
+ * generated from scanner_string_template.vala, do not modify */
+
+#include <stdlib.h>
+#include <string.h>
+#include <glib.h>
+
+#define _g_free0(var) (var = (g_free (var), NULL))
+
+static void _vala_main (void);
+
+static const gchar*
+string_to_string (const gchar* self)
+{
+ const gchar* result;
+ g_return_val_if_fail (self != NULL, NULL);
+ result = self;
+ return result;
+}
+
+static void
+_vala_main (void)
+{
+ gchar* foo = NULL;
+ gchar* _tmp0_;
+ gchar* bar = NULL;
+ gchar* _tmp1_;
+ gchar* manam = NULL;
+ const gchar* _tmp2_;
+ const gchar* _tmp3_;
+ gchar* _tmp4_;
+ gchar* minim = NULL;
+ gchar* _tmp5_;
+ _tmp0_ = g_strdup ("Hello");
+ foo = _tmp0_;
+ _tmp1_ = g_strdup ("world");
+ bar = _tmp1_;
+ _tmp2_ = string_to_string (foo);
+ _tmp3_ = string_to_string (bar);
+ _tmp4_ = g_strconcat (_tmp2_, " ", _tmp3_, "!", NULL);
+ manam = _tmp4_;
+ _tmp5_ = g_strdup ("");
+ minim = _tmp5_;
+ _g_free0 (minim);
+ _g_free0 (manam);
+ _g_free0 (bar);
+ _g_free0 (foo);
+}
+
+int
+main (int argc,
+ char ** argv)
+{
+ _vala_main ();
+ return 0;
+}
+
diff --git a/tests/scanner/string-template.vala b/tests/scanner/string-template.vala
new file mode 100644
index 000000000..3d4a00d4f
--- /dev/null
+++ b/tests/scanner/string-template.vala
@@ -0,0 +1,8 @@
+void main () {
+ var foo = "Hello";
+ var bar = "world";
+
+ var manam = @"$foo $bar!";
+ var minim = @"";
+}
+
diff --git a/tests/scanner/string-verbatim-template.c-expected b/tests/scanner/string-verbatim-template.c-expected
new file mode 100644
index 000000000..6f7b0d214
--- /dev/null
+++ b/tests/scanner/string-verbatim-template.c-expected
@@ -0,0 +1,57 @@
+/* scanner_string_verbatim_template.c generated by valac, the Vala compiler
+ * generated from scanner_string_verbatim_template.vala, do not modify */
+
+#include <stdlib.h>
+#include <string.h>
+#include <glib.h>
+
+#define _g_free0(var) (var = (g_free (var), NULL))
+
+static void _vala_main (void);
+
+static const gchar*
+string_to_string (const gchar* self)
+{
+ const gchar* result;
+ g_return_val_if_fail (self != NULL, NULL);
+ result = self;
+ return result;
+}
+
+static void
+_vala_main (void)
+{
+ gchar* foo = NULL;
+ gchar* _tmp0_;
+ gchar* bar = NULL;
+ gchar* _tmp1_;
+ gchar* manam = NULL;
+ const gchar* _tmp2_;
+ const gchar* _tmp3_;
+ gchar* _tmp4_;
+ gchar* minim = NULL;
+ gchar* _tmp5_;
+ _tmp0_ = g_strdup ("Hello");
+ foo = _tmp0_;
+ _tmp1_ = g_strdup ("world");
+ bar = _tmp1_;
+ _tmp2_ = string_to_string (foo);
+ _tmp3_ = string_to_string (bar);
+ _tmp4_ = g_strconcat (_tmp2_, " \n", _tmp3_, "!", NULL);
+ manam = _tmp4_;
+ _tmp5_ = g_strdup ("");
+ minim = _tmp5_;
+ _g_free0 (minim);
+ _g_free0 (manam);
+ _g_free0 (bar);
+ _g_free0 (foo);
+}
+
+int
+main (int argc,
+ char ** argv)
+{
+ _vala_main ();
+ return 0;
+}
+
diff --git a/tests/scanner/string-verbatim-template.vala b/tests/scanner/string-verbatim-template.vala
new file mode 100644
index 000000000..32ff85755
--- /dev/null
+++ b/tests/scanner/string-verbatim-template.vala
@@ -0,0 +1,8 @@
+void main () {
+ var foo = "Hello";
+ var bar = "world";
+
+ var manam = @"""$foo
+$bar!""";
+ var minim = @"""""";
+}