summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorMats Wichmann <mats@linux.com>2021-10-31 18:34:13 (GMT)
committerMats Wichmann <mats@linux.com>2021-10-31 18:53:59 (GMT)
commitc8a32bbade10418eb613ac5c4be90ea6494d6aa8 (patch)
treea5a862424e8c34ec330a3f1b6bb7c326d553f0a9 /test
parent40ede9995361abb3169891486754f51bfaabdf9b (diff)
downloadSCons-c8a32bbade10418eb613ac5c4be90ea6494d6aa8.zip
SCons-c8a32bbade10418eb613ac5c4be90ea6494d6aa8.tar.gz
SCons-c8a32bbade10418eb613ac5c4be90ea6494d6aa8.tar.bz2
Skip unusable javah tests
For the three tests which fail, skip if the command finder (WhereIs), which is much less aggressive than the java_where_j* routines, doesn't find javah. Split the JAVAH test file into two files, so that the part which doesn't call javah can run even if the rest is skipped. Did the header cleanup and partial reformats on those. Leave a comment in the Repository/JavaH test, and do some reformatting there as well. Test needs rework, but for now doesn't fail so leave alone. Signed-off-by: Mats Wichmann <mats@linux.com>
Diffstat (limited to 'test')
-rw-r--r--test/Java/JAVACLASSPATH.py15
-rw-r--r--test/Java/JAVAH-mock.py100
-rw-r--r--test/Java/JAVAH.py69
-rw-r--r--test/Java/multi-step.py132
-rw-r--r--test/Repository/JavaH.py41
5 files changed, 212 insertions, 145 deletions
diff --git a/test/Java/JAVACLASSPATH.py b/test/Java/JAVACLASSPATH.py
index aefacca..6f062db 100644
--- a/test/Java/JAVACLASSPATH.py
+++ b/test/Java/JAVACLASSPATH.py
@@ -38,11 +38,18 @@ test = TestSCons.TestSCons()
where_javac, java_version = test.java_where_javac()
where_javah = test.java_where_javah()
+# TODO rework for 'javac -h', for now skip
+# The logical test would be:
+# if float(java_version) > 9:
+# but java_where_javac() lies on a multi-java system
+if not test.Environment().WhereIs('javah'):
+ test.skip_test("No Java javah for version > 9, skipping test.\n")
+
test.write('SConstruct', """
-env = Environment(tools = ['javac', 'javah'])
-j1 = env.Java(target = 'class1', source = 'com.1/Example1.java')
-j2 = env.Java(target = 'class2', source = 'com.2/Example2.java')
-env.JavaH(target = 'outdir', source = [j1, j2], JAVACLASSPATH = 'class2')
+env = Environment(tools=['javac', 'javah'])
+j1 = env.Java(target='class1', source='com.1/Example1.java')
+j2 = env.Java(target='class2', source='com.2/Example2.java')
+env.JavaH(target='outdir', source=[j1, j2], JAVACLASSPATH='class2')
""" % locals())
test.subdir('com.1', 'com.2')
diff --git a/test/Java/JAVAH-mock.py b/test/Java/JAVAH-mock.py
new file mode 100644
index 0000000..e44f533
--- /dev/null
+++ b/test/Java/JAVAH-mock.py
@@ -0,0 +1,100 @@
+#!/usr/bin/env python
+#
+# MIT License
+#
+# Copyright The SCons Foundation
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+"""
+Test JavaH without calling the tool
+Split from rest of test to allow these to run if real javah skipped.
+"""
+
+import os
+
+import TestSCons
+
+_python_ = TestSCons._python_
+
+test = TestSCons.TestSCons()
+
+test.write('myjavah.py', r"""
+import sys
+args = sys.argv[1:]
+while args:
+ a = args[0]
+ if a == '-d':
+ outdir = args[1]
+ args = args[1:]
+ elif a == '-o':
+ outfile = open(args[1], 'w')
+ args = args[1:]
+ elif a == '-classpath':
+ args = args[1:]
+ elif a == '-sourcepath':
+ args = args[1:]
+ else:
+ break
+ args = args[1:]
+for file in args:
+ infile = open(file, 'r')
+ for l in infile.readlines():
+ if l[:9] != '/*javah*/':
+ outfile.write(l)
+sys.exit(0)
+""")
+
+test.write('SConstruct', """
+env = Environment(tools=['javah'], JAVAH=r'%(_python_)s myjavah.py')
+env.JavaH(target=File('test1.h'), source='test1.java')
+""" % locals())
+
+test.write('test1.java', """\
+test1.java
+/*javah*/
+line 3
+""")
+
+test.run(arguments='.', stderr=None)
+test.must_match('test1.h', "test1.java\nline 3\n", mode='r')
+
+if os.path.normcase('.java') == os.path.normcase('.JAVA'):
+ test.write('SConstruct', """\
+env = Environment(tools=['javah'], JAVAH=r'%(_python_)s myjavah.py')
+env.JavaH(target=File('test2.h'), source='test2.JAVA')
+""" % locals())
+
+ test.write('test2.JAVA', """\
+test2.JAVA
+/*javah*/
+line 3
+""")
+
+ test.run(arguments='.', stderr=None)
+ test.must_match('test2.h', "test2.JAVA\nline 3\n", mode='r')
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/test/Java/JAVAH.py b/test/Java/JAVAH.py
index 853b2da..bd05e56 100644
--- a/test/Java/JAVAH.py
+++ b/test/Java/JAVAH.py
@@ -31,70 +31,8 @@ _python_ = TestSCons._python_
test = TestSCons.TestSCons()
-test.write('myjavah.py', r"""
-import sys
-args = sys.argv[1:]
-while args:
- a = args[0]
- if a == '-d':
- outdir = args[1]
- args = args[1:]
- elif a == '-o':
- outfile = open(args[1], 'w')
- args = args[1:]
- elif a == '-classpath':
- args = args[1:]
- elif a == '-sourcepath':
- args = args[1:]
- else:
- break
- args = args[1:]
-for file in args:
- infile = open(file, 'r')
- for l in infile.readlines():
- if l[:9] != '/*javah*/':
- outfile.write(l)
-sys.exit(0)
-""")
-
-test.write('SConstruct', """
-env = Environment(tools = ['javah'],
- JAVAH = r'%(_python_)s myjavah.py')
-env.JavaH(target = File('test1.h'), source = 'test1.java')
-""" % locals())
-
-test.write('test1.java', """\
-test1.java
-/*javah*/
-line 3
-""")
-
-test.run(arguments='.', stderr=None)
-
-test.must_match('test1.h', "test1.java\nline 3\n", mode='r')
-
-if os.path.normcase('.java') == os.path.normcase('.JAVA'):
-
- test.write('SConstruct', """\
-env = Environment(tools = ['javah'],
- JAVAH = r'%(_python_)s myjavah.py')
-env.JavaH(target = File('test2.h'), source = 'test2.JAVA')
-""" % locals())
-
- test.write('test2.JAVA', """\
-test2.JAVA
-/*javah*/
-line 3
-""")
-
- test.run(arguments='.', stderr=None)
-
- test.must_match('test2.h', "test2.JAVA\nline 3\n", mode='r')
-
-
where_javac, java_version = test.java_where_javac()
where_javah = test.java_where_javah()
-
if java_version:
java_version = repr(java_version)
@@ -104,6 +42,13 @@ if java_version:
if test.javac_is_gcj:
test.skip_test('Test not valid for gcj (gnu java); skipping test(s).\n')
+# TODO rework for 'javac -h', for now skip
+# The logical test would be:
+# if float(java_version) > 9:
+# but java_where_javac() lies on a multi-java system
+if not test.Environment().WhereIs('javah'):
+ test.skip_test("No Java javah for version > 9, skipping test.\n")
+
test.file_fixture('wrapper_with_args.py')
test.write('SConstruct', """
diff --git a/test/Java/multi-step.py b/test/Java/multi-step.py
index 37656b8..f3eec18 100644
--- a/test/Java/multi-step.py
+++ b/test/Java/multi-step.py
@@ -26,6 +26,8 @@
"""
Real-world test (courtesy Leanid Nazdrynau) of the multi-step
capabilities of the various Java Builders.
+
+TODO: the whole Applet facility is deprecated, need a new test.
"""
import os
@@ -50,27 +52,36 @@ if not swig:
if test.javac_is_gcj:
test.skip_test('Test not valid for gcj (gnu java); skipping test(s).\n')
-test.subdir(['src'],
- ['src', 'HelloApplet'],
- ['src', 'HelloApplet', 'com'],
- ['src', 'javah'],
- ['src', 'jni'],
- ['src', 'server'],
- ['src', 'server', 'JavaSource'],
- ['src', 'server', 'JavaSource', 'com'],
- ['src', 'server', 'JavaSource', 'com', 'gnu'],
- ['src', 'server', 'JavaSource', 'com', 'gnu', 'scons'],
- ['src', 'server', 'JavaSource', 'com', 'gnu', 'scons', 'web'],
- ['src', 'server', 'JavaSource', 'com', 'gnu', 'scons', 'web', 'tools'],
- ['src', 'server', 'WebContent'],
- ['src', 'server', 'WebContent', 'META-INF'],
- ['src', 'server', 'WebContent', 'WEB-INF'],
- ['src', 'server', 'WebContent', 'WEB-INF', 'conf'],
- ['src', 'server', 'WebContent', 'WEB-INF', 'lib'],
- ['src', 'server', 'WebContent', 'theme'])
+# TODO rework for 'javac -h', for now skip
+# The logical test would be:
+# if float(java_version) > 9:
+# but java_where_javac() lies on a multi-java system
+if not test.Environment().WhereIs('javah'):
+ test.skip_test("No Java javah for version > 9, skipping test.\n")
+
+test.subdir(
+ ['src'],
+ ['src', 'HelloApplet'],
+ ['src', 'HelloApplet', 'com'],
+ ['src', 'javah'],
+ ['src', 'jni'],
+ ['src', 'server'],
+ ['src', 'server', 'JavaSource'],
+ ['src', 'server', 'JavaSource', 'com'],
+ ['src', 'server', 'JavaSource', 'com', 'gnu'],
+ ['src', 'server', 'JavaSource', 'com', 'gnu', 'scons'],
+ ['src', 'server', 'JavaSource', 'com', 'gnu', 'scons', 'web'],
+ ['src', 'server', 'JavaSource', 'com', 'gnu', 'scons', 'web', 'tools'],
+ ['src', 'server', 'WebContent'],
+ ['src', 'server', 'WebContent', 'META-INF'],
+ ['src', 'server', 'WebContent', 'WEB-INF'],
+ ['src', 'server', 'WebContent', 'WEB-INF', 'conf'],
+ ['src', 'server', 'WebContent', 'WEB-INF', 'lib'],
+ ['src', 'server', 'WebContent', 'theme'],
+)
test.write(['SConstruct'], """\
-import os,sys
+import os, sys
if sys.platform == 'win32':
# Ensure tests don't pick up link from mingw or cygwin
@@ -78,31 +89,35 @@ if sys.platform == 'win32':
else:
tools = ['default', 'javac', 'javah', 'swig']
-env=Environment(tools = tools,
- CPPPATH=["$JAVAINCLUDES"])
+env = Environment(tools=tools, CPPPATH=["$JAVAINCLUDES"])
Export('env')
# env.PrependENVPath('PATH',os.environ.get('PATH',[]))
-env['INCPREFIX']='-I'
-env.Append(SWIGFLAGS=['-c++','$_CPPINCFLAGS'])
+env['INCPREFIX'] = '-I'
+env.Append(SWIGFLAGS=['-c++', '$_CPPINCFLAGS'])
-#this is for JNI
-#env.Append(CCFLAGS=['/IN:/jdk/v1.3.1/include','/IN:/jdk/v1.3.1/include/win32'])
+# this is for JNI
+# env.Append(CCFLAGS=['/IN:/jdk/v1.3.1/include','/IN:/jdk/v1.3.1/include/win32'])
-#this for windows only C++ build
-#env.Append(CXXFLAGS='-GX')
+# this for windows only C++ build
+# env.Append(CXXFLAGS='-GX')
env.Append(CPPPATH='.')
env.VariantDir('buildout', 'src', duplicate=0)
-if sys.platform[:6]=='darwin':
- env.Append(CPPPATH=['/System/Library/Frameworks/JavaVM.framework/Headers'])
-
-#If you do not have swig on your system please remove 'buildout/jni/SConscript' line from next call
-env.SConscript(['buildout/server/JavaSource/SConscript',
- 'buildout/HelloApplet/SConscript',
- 'buildout/jni/SConscript',
- 'buildout/javah/SConscript'])
+if sys.platform[:6] == 'darwin':
+ env.Append(CPPPATH=['/System/Library/Frameworks/JavaVM.framework/Headers'])
+
+# If you do not have swig on your system please remove
+# 'buildout/jni/SConscript' line from next call
+env.SConscript(
+ [
+ 'buildout/server/JavaSource/SConscript',
+ 'buildout/HelloApplet/SConscript',
+ 'buildout/jni/SConscript',
+ 'buildout/javah/SConscript',
+ ]
+)
""" % locals())
test.write(['src', 'HelloApplet', 'Hello.html'], """\
@@ -123,21 +138,20 @@ test.write(['src', 'HelloApplet', 'Hello.html'], """\
test.write(['src', 'HelloApplet', 'SConscript'], """\
import os
-Import ("env")
-denv=env.Clone()
-classes=denv.Java(target='classes',source=['com'])
-#set correct path for jar
-denv['JARCHDIR']=os.path.join(denv.Dir('.').get_abspath(),'classes')
-denv.Jar('HelloApplet',classes)
+Import("env")
+denv = env.Clone()
+classes = denv.Java(target='classes', source=['com'])
+# set correct path for jar
+denv['JARCHDIR'] = os.path.join(denv.Dir('.').get_abspath(), 'classes')
+denv.Jar('HelloApplet', classes)
-#To sign applet you have to create keystore before and made a calls like this
-
-#keystore='/path/to/jarsignkey'
-#denv['JARSIGNFLAGS']='-keystore '+keystore+' -storepass pass -keypass passkey'
-#denv['JARSIGNALIAS']='ALIAS'
-#denv['JARCOM']=[denv['JARCOM'],'$JARSIGNCOM']
+# To sign applet you have to create keystore before and made a calls like this
+# keystore='/path/to/jarsignkey'
+# denv['JARSIGNFLAGS']='-keystore '+keystore+' -storepass pass -keypass passkey'
+# denv['JARSIGNALIAS']='ALIAS'
+# denv['JARCOM']=[denv['JARCOM'],'$JARSIGNCOM']
""")
test.write(['src', 'HelloApplet', 'com', 'Hello.java'], """\
@@ -179,12 +193,11 @@ public class MyID
test.write(['src', 'javah', 'SConscript'], """\
Import('env')
-denv=env.Clone()
-denv['JARCHDIR']=denv.Dir('.').get_abspath()
-denv.Jar('myid','MyID.java')
-denv.JavaH(denv.Dir('.').get_abspath(),'MyID.java')
-denv.SharedLibrary('myid','MyID.cc')
-
+denv = env.Clone()
+denv['JARCHDIR'] = denv.Dir('.').get_abspath()
+denv.Jar('myid', 'MyID.java')
+denv.JavaH(denv.Dir('.').get_abspath(), 'MyID.java')
+denv.SharedLibrary('myid', 'MyID.cc')
""")
test.write(['src', 'jni', 'A.java'], """\
@@ -225,8 +238,6 @@ test.write(['src', 'jni', 'JniWrapper.cc'], """\
#include "JniWrapper.h"
-
-
JniWrapper::JniWrapper( JNIEnv *pEnv )
: mpEnv( pEnv )
{
@@ -239,7 +250,6 @@ JniWrapper::JniWrapper( const JniWrapper& rJniWrapper )
JniWrapper::~JniWrapper()
{
-
}
JniWrapper& JniWrapper::operator=( const JniWrapper& rJniWrapper )
@@ -373,13 +383,13 @@ private:
""")
test.write(['src', 'jni', 'SConscript'], """\
-Import ("env")
-denv=env.Clone()
+Import("env")
+denv = env.Clone()
denv.Append(SWIGFLAGS=['-java'])
-denv.SharedLibrary('scons',['JniWrapper.cc','Sample.i'])
-denv['JARCHDIR']=denv.Dir('.').get_abspath()
-denv.Jar(['Sample.i','A.java'])
+denv.SharedLibrary('scons', ['JniWrapper.cc', 'Sample.i'])
+denv['JARCHDIR'] = denv.Dir('.').get_abspath()
+denv.Jar(['Sample.i', 'A.java'])
""")
test.write(['src', 'jni', 'Sample.h'], """\
diff --git a/test/Repository/JavaH.py b/test/Repository/JavaH.py
index 1cb5078..77f097d 100644
--- a/test/Repository/JavaH.py
+++ b/test/Repository/JavaH.py
@@ -1,6 +1,8 @@
#!/usr/bin/env python
#
-# __COPYRIGHT__
+# MIT License
+#
+# Copyright The SCons Foundation
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
@@ -20,9 +22,6 @@
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
"""
Test building Java applications when using Repositories.
@@ -44,13 +43,23 @@ java = where_java
javac = where_javac
javah = where_javah
+# TODO: javah no longer exists for Java > 9. Other tests fail
+# on certain systems because the java_where_* routines are very greedy
+# and may indicate it's found even if the working java is > 9 if there
+# was a 1.8 insallation present - and then at runtime it's not found.
+# In this case we actually pass the javac/javah that's found by those,
+# which means the test will seem to work. We still need to rework this.
+
###############################################################################
#
-test.subdir('rep1', ['rep1', 'src'],
- 'work1',
- 'work2',
- 'work3')
+test.subdir(
+ 'rep1',
+ ['rep1', 'src'],
+ 'work1',
+ 'work2',
+ 'work3'
+)
#
rep1_classes = test.workpath('rep1', 'classes')
@@ -62,11 +71,9 @@ opts = '-Y ' + test.workpath('rep1')
#
test.write(['rep1', 'SConstruct'], """
-env = Environment(tools = ['javac', 'javah'],
- JAVAC = r'"%s"',
- JAVAH = r'"%s"')
-classes = env.Java(target = 'classes', source = 'src')
-env.JavaH(target = 'outdir', source = classes)
+env = Environment(tools=['javac', 'javah'], JAVAC=r'"%s"', JAVAH=r'"%s"')
+classes = env.Java(target='classes', source='src')
+env.JavaH(target='outdir', source=classes)
""" % (javac, javah))
test.write(['rep1', 'src', 'Foo1.java'], """\
@@ -206,11 +213,9 @@ test.up_to_date(chdir = 'work2', options = opts, arguments = ".")
#
test.write(['work3', 'SConstruct'], """
-env = Environment(tools = ['javac', 'javah'],
- JAVAC = r'"%s"',
- JAVAH = r'"%s"')
-classes = env.Java(target = 'classes', source = 'src')
-hfiles = env.JavaH(target = 'outdir', source = classes)
+env = Environment(tools=['javac', 'javah'], JAVAC=r'"%s"', JAVAH=r'"%s"')
+classes = env.Java(target='classes', source='src')
+hfiles = env.JavaH(target='outdir', source=classes)
Local(hfiles)
""" % (javac, javah))