summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2020-04-12 23:40:49 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2020-05-10 19:02:43 +0300
commit8c144adc7a32f23e63eb85b989739adf476d04b4 (patch)
treed405919edd9e000afa5eeb4072d58b6d200f4758
parentd87925dc3a45fce97603b6165fb489c30e004b4d (diff)
downloadmeson-8c144adc7a32f23e63eb85b989739adf476d04b4.tar.gz
Create a test skeleton for generator targets.
-rwxr-xr-xtest cases/common/234 generator target/gen1/comp2xml.py14
-rw-r--r--test cases/common/234 generator target/gen1/first.component1
-rw-r--r--test cases/common/234 generator target/gen1/meson.build12
-rw-r--r--test cases/common/234 generator target/gen1/second.component1
-rw-r--r--test cases/common/234 generator target/gen1/third.component1
-rwxr-xr-xtest cases/common/234 generator target/gen2/localizexml.py19
-rw-r--r--test cases/common/234 generator target/gen2/meson.build8
-rwxr-xr-xtest cases/common/234 generator target/gensrc/gensrc.py32
-rw-r--r--test cases/common/234 generator target/gensrc/meson.build7
-rw-r--r--test cases/common/234 generator target/genzip/genzip.py19
-rw-r--r--test cases/common/234 generator target/genzip/meson.build4
-rw-r--r--test cases/common/234 generator target/meson.build11
-rw-r--r--test cases/common/234 generator target/prog/localizationtest.c23
-rw-r--r--test cases/common/234 generator target/prog/meson.build1
-rwxr-xr-xtest cases/common/234 generator target/validate_zip.py20
15 files changed, 173 insertions, 0 deletions
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 000000000..db4b253e8
--- /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 000000000..9c59e24b8
--- /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 000000000..7a7772118
--- /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 000000000..e019be006
--- /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 000000000..234496b1c
--- /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 000000000..1de964d86
--- /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 000000000..4442f1a5e
--- /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 000000000..9247d111a
--- /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 000000000..92f22cf21
--- /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 000000000..fac0b6040
--- /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 000000000..2b16517f0
--- /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 000000000..02f84d7a4
--- /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 000000000..ce5294f7b
--- /dev/null
+++ b/test cases/common/234 generator target/prog/localizationtest.c
@@ -0,0 +1,23 @@
+#include<stdio.h>
+#include<string.h>
+
+#include<first.h>
+#include<second.h>
+#include<third.h>
+
+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 000000000..7f2674a92
--- /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 000000000..7c2eb644e
--- /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])