From 8c144adc7a32f23e63eb85b989739adf476d04b4 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Sun, 12 Apr 2020 23:40:49 +0300 Subject: Create a test skeleton for generator targets. --- .../common/234 generator target/gen1/comp2xml.py | 14 ++++++++++ .../234 generator target/gen1/first.component | 1 + .../common/234 generator target/gen1/meson.build | 12 ++++++++ .../234 generator target/gen1/second.component | 1 + .../234 generator target/gen1/third.component | 1 + .../234 generator target/gen2/localizexml.py | 19 +++++++++++++ .../common/234 generator target/gen2/meson.build | 8 ++++++ .../common/234 generator target/gensrc/gensrc.py | 32 ++++++++++++++++++++++ .../common/234 generator target/gensrc/meson.build | 7 +++++ .../common/234 generator target/genzip/genzip.py | 19 +++++++++++++ .../common/234 generator target/genzip/meson.build | 4 +++ test cases/common/234 generator target/meson.build | 11 ++++++++ .../234 generator target/prog/localizationtest.c | 23 ++++++++++++++++ .../common/234 generator target/prog/meson.build | 1 + .../common/234 generator target/validate_zip.py | 20 ++++++++++++++ 15 files changed, 173 insertions(+) create mode 100755 test cases/common/234 generator target/gen1/comp2xml.py create mode 100644 test cases/common/234 generator target/gen1/first.component create mode 100644 test cases/common/234 generator target/gen1/meson.build create mode 100644 test cases/common/234 generator target/gen1/second.component create mode 100644 test cases/common/234 generator target/gen1/third.component create mode 100755 test cases/common/234 generator target/gen2/localizexml.py create mode 100644 test cases/common/234 generator target/gen2/meson.build create mode 100755 test cases/common/234 generator target/gensrc/gensrc.py create mode 100644 test cases/common/234 generator target/gensrc/meson.build create mode 100644 test cases/common/234 generator target/genzip/genzip.py create mode 100644 test cases/common/234 generator target/genzip/meson.build create mode 100644 test cases/common/234 generator target/meson.build create mode 100644 test cases/common/234 generator target/prog/localizationtest.c create mode 100644 test cases/common/234 generator target/prog/meson.build create mode 100755 test cases/common/234 generator target/validate_zip.py diff --git a/test cases/common/234 generator target/gen1/comp2xml.py b/test cases/common/234 generator target/gen1/comp2xml.py new file mode 100755 index 0000000..db4b253 --- /dev/null +++ b/test cases/common/234 generator target/gen1/comp2xml.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 + +import os, sys +import xml.etree.ElementTree as ET +from pathlib import Path + +ifile = Path(sys.argv[1]) +ofilename = sys.argv[2] + +compname = ifile.read_text().strip() +root = ET.Element('component') +root.text = compname +tree = ET.ElementTree(root) +tree.write(ofilename, encoding='utf-8', xml_declaration=True) diff --git a/test cases/common/234 generator target/gen1/first.component b/test cases/common/234 generator target/gen1/first.component new file mode 100644 index 0000000..9c59e24 --- /dev/null +++ b/test cases/common/234 generator target/gen1/first.component @@ -0,0 +1 @@ +first diff --git a/test cases/common/234 generator target/gen1/meson.build b/test cases/common/234 generator target/gen1/meson.build new file mode 100644 index 0000000..7a77721 --- /dev/null +++ b/test cases/common/234 generator target/gen1/meson.build @@ -0,0 +1,12 @@ +g1 = generator(find_program('comp2xml.py'), + output: '@BASENAME@.xc', + arguments: ['@INPUT@', '@OUTPUT@'], +) + +xml1 = generator_target('gen1', + input: ['first.component', + 'second.component', + 'third.component', + ], + generator: g1 +) diff --git a/test cases/common/234 generator target/gen1/second.component b/test cases/common/234 generator target/gen1/second.component new file mode 100644 index 0000000..e019be0 --- /dev/null +++ b/test cases/common/234 generator target/gen1/second.component @@ -0,0 +1 @@ +second diff --git a/test cases/common/234 generator target/gen1/third.component b/test cases/common/234 generator target/gen1/third.component new file mode 100644 index 0000000..234496b --- /dev/null +++ b/test cases/common/234 generator target/gen1/third.component @@ -0,0 +1 @@ +third diff --git a/test cases/common/234 generator target/gen2/localizexml.py b/test cases/common/234 generator target/gen2/localizexml.py new file mode 100755 index 0000000..1de964d --- /dev/null +++ b/test cases/common/234 generator target/gen2/localizexml.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 + +import os, sys +import xml.etree.ElementTree as ET +from pathlib import Path + +ifilename = sys.argv[1] +ofilename = sys.argv[2] + +intree = ET.parse(ifilename) +inroot = intree.root() + +component_name = inroot.text +localized_name = 'le_' + component_name + +outroot = ET.Element('component', {'name': component_name, + 'localized_name': localized_name}) +tree = ET.ElementTree(root) +tree.write(ofilename, encoding='utf-8', xml_declaration=True) diff --git a/test cases/common/234 generator target/gen2/meson.build b/test cases/common/234 generator target/gen2/meson.build new file mode 100644 index 0000000..4442f1a --- /dev/null +++ b/test cases/common/234 generator target/gen2/meson.build @@ -0,0 +1,8 @@ +g2 = generator( output: '@BASENAME@.xlc', + command: [find_program('localizexml.py'), '@INPUT@', '@OUTPUT@'] +) + +xmlloc = generator_target('localize', + xml1, + generator: g2 +) diff --git a/test cases/common/234 generator target/gensrc/gensrc.py b/test cases/common/234 generator target/gensrc/gensrc.py new file mode 100755 index 0000000..9247d11 --- /dev/null +++ b/test cases/common/234 generator target/gensrc/gensrc.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python3 + +import os, sys +import xml.etree.ElementTree as ET +from pathlib import Path + +h_templ= '''#pragma once + +const char *component_{}_localized_name(void); +''' + +c_templ = '''#include<{}.h> + +const char *component_{}_localized_name(void) {{ + return "{}"; +}} +''' + +ifilename = sys.argv[1] +h_file = Path(sys.argv[2]) +c_file = Path(sys.argv[3]) + +h_incname = h_file.name + +intree = ET.parse(ifilename) +inroot = intree.root() + +component_name = inroot.attrib['name'] +localized_name = inroot.attrib['localized_name'] + +h_file.write_string(h_templ.format(component_name)) +c_file.write_string(c_templ.format(h_incname, component_name, localized_name)) diff --git a/test cases/common/234 generator target/gensrc/meson.build b/test cases/common/234 generator target/gensrc/meson.build new file mode 100644 index 0000000..92f22cf --- /dev/null +++ b/test cases/common/234 generator target/gensrc/meson.build @@ -0,0 +1,7 @@ +gensrc = generator(output: ['@BASENAME@.h', '@BASENAME@.c'], + command: [find_program('gensrc.py'), '@INPUT@', '@OUTPUT0@', '@OUTPUT1@'] +) + +compsrc = generator_target('generate', + sources: xmlloc, + generator: gensrc) diff --git a/test cases/common/234 generator target/genzip/genzip.py b/test cases/common/234 generator target/genzip/genzip.py new file mode 100644 index 0000000..fac0b60 --- /dev/null +++ b/test cases/common/234 generator target/genzip/genzip.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 + +import os, sys, zipfile +import xml.etree.ElementTree as ET +from pathlib import Path + +ofilename = sys.argv[1] +ofiletmpname = ofilename + '.tmp' +infiles = sys.argv[2:] + +with zipfile.ZipFile(ofiletmpname, 'w') as zf: + for xmlfilename in infiles: + xmlfile = Path(xmlfilename) + zf.write(xmlfilename, xmlfile.name()) + +if os.path.exists(ofilename): + os.unlink(ofilename) + +os.rename(ofiletmpname, ofilename) diff --git a/test cases/common/234 generator target/genzip/meson.build b/test cases/common/234 generator target/genzip/meson.build new file mode 100644 index 0000000..2b16517 --- /dev/null +++ b/test cases/common/234 generator target/genzip/meson.build @@ -0,0 +1,4 @@ +zip_output = custom_target('genzip', + input: xmlloc, + output: 'registry.zip', + command: [find_program('genzip.py'), '@OUTPUT@', '@INPUT@']) diff --git a/test cases/common/234 generator target/meson.build b/test cases/common/234 generator target/meson.build new file mode 100644 index 0000000..02f84d7 --- /dev/null +++ b/test cases/common/234 generator target/meson.build @@ -0,0 +1,11 @@ +project('generator target', 'c') + +subdir('gen1') +subdir('gen2') +subdir('genzip') +subdir('gensrc') +subdir('prog') + +add_test('validate_zip', + find_program('validate_zip.py'), + args: [zip_output]) diff --git a/test cases/common/234 generator target/prog/localizationtest.c b/test cases/common/234 generator target/prog/localizationtest.c new file mode 100644 index 0000000..ce5294f --- /dev/null +++ b/test cases/common/234 generator target/prog/localizationtest.c @@ -0,0 +1,23 @@ +#include +#include + +#include +#include +#include + +int main(int argc, char **argv) { + if(argc != 1) { + printf("%s takes no arguments.", argv[0]); + return 10; + } + if(strcmp(component_first_localized_name(), "le_first") != 0) { + return 1; + } + if(strcmp(component_second_localized_name(), "le_second") != 0) { + return 2; + } + if(strcmp(component_third_localized_name(), "le_third") != 0) { + return 3; + } + return 0; +} diff --git a/test cases/common/234 generator target/prog/meson.build b/test cases/common/234 generator target/prog/meson.build new file mode 100644 index 0000000..7f2674a --- /dev/null +++ b/test cases/common/234 generator target/prog/meson.build @@ -0,0 +1 @@ +test('localization', executable('localizationtest', 'localizationtest.c', compsrc)) diff --git a/test cases/common/234 generator target/validate_zip.py b/test cases/common/234 generator target/validate_zip.py new file mode 100755 index 0000000..7c2eb64 --- /dev/null +++ b/test cases/common/234 generator target/validate_zip.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python3 + +import os, sys, zipfile + +expected_files = {'first.xlc', + 'second.xlc', + 'third.xlc'} + +def validate(zfname): + with zipfile.ZipFile(zfname, 'r') as zf: + namelist = zf.namelist() + if len(namelist) != 3: + sys.exit('Incorrect number of entries in zipfile') + for i in namelist: + if i not in expected_files: + sys.exit('Unexpected file {}.'.format(i)) + sys.exit('Not done yet') + +if __name__ == '__main__': + validate(sys.argv[1]) -- cgit v1.1