[Scons-dev] Java test for sources in two directories

Bill Deegan bill at baddogconsulting.com
Sat Apr 30 14:48:09 EDT 2016


Rob,

The best thing would be to add this file to the bug.

-Bill

On Sat, Apr 30, 2016 at 11:56 AM, Rob Boehne <robb at datalogics.com> wrote:

> Scons dev,
>
> Apparently the attachment was scrubbed, so here is the test case I’ve
> called “Compile2Dirs.py” inline below.
>
> #!/usr/bin/env python
> #
> # __COPYRIGHT__
> #
> # 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.
> #
>
> __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
>
> """
> Real world test for compiling dependent classes from different directories.
> """
>
> import os
>
> import TestSCons
>
> test = TestSCons.TestSCons()
>
> where_javac, java_version = test.java_where_javac()
> where_javah = test.java_where_javah()
> where_java_include=test.java_where_includes()
>
>
> test.subdir(['src'],
>             ['src', 'Source'],
>             ['src', 'Source', 'Interface'],
>             ['src', 'gen'],
>             ['src', 'gen', 'mymod'],
>             ['src', 'gen', 'mymod', 'java'],
>             ['src', 'build'],
>             ['src', 'build', 'classes'])
>
> test.write(['SConstruct'], """\
> import os,sys
> env=Environment(tools = ['default', 'javac'],
>                 JAVAC = r'%(where_javac)s')
> Export('env')
> env.PrependENVPath('PATH',os.environ.get('PATH',[]))
>
> Java('build/classes', [env.Dir('src/gen/mymod/java'),
> env.Dir('src/Source/Interface')])
>
> """ % locals())
>
> test.write(['src', 'gen', 'mymod', 'java', 'LibraryFlags.java'], """\
> package com.mycompany.PROD;
>
> public enum LibraryFlags {
>   @com.mycompany.metadata.ConstantName("IgnoreDefaultDirectories")
> IGNORE_DEFAULT_DIRECTORIES(1),
>   @com.mycompany.metadata.ConstantName("CheckSubFonts")
> CHECK_SUB_FONTS(4),
>   @com.mycompany.metadata.ConstantName("InitEdit")   INIT_EDIT(32);
>
>   final int someValue() {
>     return someValue;
>   }
>
>   static LibraryFlags someToEnum(int someValue) {
>     LibraryFlags[] someValues = LibraryFlags.class.getEnumConstants();
>     if (someValue < someValues.length && someValue >= 0 &&
> someValues[someValue].someValue == someValue)
>       return someValues[someValue];
>     for (LibraryFlags someEnum : someValues)
>       if (someEnum.someValue == someValue)
>         return someEnum;
>     throw new IllegalArgumentException("No enum " + LibraryFlags.class + "
> with value " + someValue);
>   }
>
>   private LibraryFlags() {
>       this.someValue = 75;
>   }
>
>   private LibraryFlags(int someValue) {
>     this.someValue = someValue;
>   }
>
>   private LibraryFlags(LibraryFlags someEnum) {
>     this.someValue = someEnum.someValue;
>   }
>
>   private final int someValue;
>
> }
> """)
>
> test.write(['src', 'Source', 'Interface', 'ConstantName.java'], """\
> package com.mycompany.metadata;
>
> import java.lang.annotation.*;
>
> /**
>  * Indicates the canonical name of a constant or enum value
>  */
> @Retention(RetentionPolicy.RUNTIME)
> @Target(ElementType.FIELD)
> public @interface ConstantName {
>     String value();
> }
> """)
>
> test.run(arguments = '.')
>
> test.must_exist(['src', 'build', 'classes', 'com', 'mycompany',
> 'metadata', 'ConstantName.class'])
> test.must_exist(['src', 'build', 'classes', 'com', 'mycompany', 'PROD',
> 'LibraryFlags.class'])
>
> test.must_exist(['src', 'gen', 'mymod', 'java', 'LibraryFlags.java'])
> test.must_exist(['src', 'Source', 'Interface', 'ConstantName.java'])
>
> test.up_to_date(arguments = '.')
>
> test.pass_test()
>
> # Local Variables:
> # tab-width:4
> # indent-tabs-mode:nil
> # End:
> # vim: set expandtab tabstop=4 shiftwidth=4:
>
>
> _______________________________________________
> Scons-dev mailing list
> Scons-dev at scons.org
> https://pairlist2.pair.net/mailman/listinfo/scons-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist2.pair.net/pipermail/scons-dev/attachments/20160430/ab6bc89d/attachment-0001.html>


More information about the Scons-dev mailing list