diff options
Diffstat (limited to 'meson/test cases/common/179 escape and unicode')
6 files changed, 77 insertions, 0 deletions
diff --git a/meson/test cases/common/179 escape and unicode/file.c.in b/meson/test cases/common/179 escape and unicode/file.c.in new file mode 100644 index 000000000..5dd6e50fa --- /dev/null +++ b/meson/test cases/common/179 escape and unicode/file.c.in @@ -0,0 +1,5 @@ +#include<stdio.h> +const char* does_it_work(void) { + printf("{NAME}\n"); + return "yes it does"; +} diff --git a/meson/test cases/common/179 escape and unicode/file.py b/meson/test cases/common/179 escape and unicode/file.py new file mode 100644 index 000000000..40fa7ca48 --- /dev/null +++ b/meson/test cases/common/179 escape and unicode/file.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python3 + +import sys +import os + +with open(sys.argv[1]) as fh: + content = fh.read().replace("{NAME}", sys.argv[2]) + +with open(os.path.join(sys.argv[3]), 'w', errors='replace') as fh: + fh.write(content) diff --git a/meson/test cases/common/179 escape and unicode/find.py b/meson/test cases/common/179 escape and unicode/find.py new file mode 100644 index 000000000..34a3eb835 --- /dev/null +++ b/meson/test cases/common/179 escape and unicode/find.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python3 + +import os +import sys + +for fh in os.listdir('.'): + if os.path.isfile(fh): + if fh.endswith('.c'): + sys.stdout.write(fh + '\0') diff --git a/meson/test cases/common/179 escape and unicode/fun.c b/meson/test cases/common/179 escape and unicode/fun.c new file mode 100644 index 000000000..c5634d836 --- /dev/null +++ b/meson/test cases/common/179 escape and unicode/fun.c @@ -0,0 +1,3 @@ +int a_fun(void) { + return 1; +} diff --git a/meson/test cases/common/179 escape and unicode/main.c b/meson/test cases/common/179 escape and unicode/main.c new file mode 100644 index 000000000..6137ad79c --- /dev/null +++ b/meson/test cases/common/179 escape and unicode/main.c @@ -0,0 +1,12 @@ +#include <string.h> + +const char* does_it_work(void); + +int a_fun(void); + +int main(void) { + if(strcmp(does_it_work(), "yes it does") != 0) { + return -a_fun(); + } + return 0; +} diff --git a/meson/test cases/common/179 escape and unicode/meson.build b/meson/test cases/common/179 escape and unicode/meson.build new file mode 100644 index 000000000..e4fe628ae --- /dev/null +++ b/meson/test cases/common/179 escape and unicode/meson.build @@ -0,0 +1,38 @@ +project('180 escape', 'c') + +gen = generator(find_program('file.py'), arguments:['@INPUT@', 'erd\u0151', '@OUTPUT@'], output: '@BASENAME@') + +gen_file = gen.process('file.c.in') + +find_file_list = run_command(find_program('find.py')) +assert(find_file_list.returncode() == 0, 'Didn\'t find any files.') + +# Strings should support both octal \ooo and hex \xhh encodings + +found_files_oct = [] +foreach l : find_file_list.stdout().strip('\0').split('\000') + found_files_oct += [files(l)] +endforeach + +test('first', executable('first', found_files_oct + [gen_file])) + +found_files_hex = [] +foreach l : find_file_list.stdout().strip('\x00').split('\x00') + found_files_hex += [files(l)] +endforeach + +test('second', executable('second', found_files_hex + [gen_file])) + +# Unrecognized and malformed escape sequences are literal + +malformed = [ + [ '\c', 'c' ], + [ '\Uabcdefghi', 'Uabcdefghi'], + [ '\u123 ', 'u123 '], + [ '\xqr', 'xqr'], +] + +foreach m : malformed + assert(m[0].endswith(m[1]), 'bad escape sequence had unexpected end') + assert(m[0].startswith('\\'), 'bad escape sequence had unexpected start') +endforeach |