#include "StdAfx.h"
''')
-test.run(arguments='test.exe')
+# Visual Studio 8 has deprecated the /Yd option and prints warnings
+# about it, so ignore stderr when running SCons.
-test.fail_test(not os.path.exists(test.workpath('test.exe')))
-test.fail_test(not os.path.exists(test.workpath('test.res')))
-test.fail_test(not os.path.exists(test.workpath('test.pdb')))
-test.fail_test(not os.path.exists(test.workpath('StdAfx.pch')))
-test.fail_test(not os.path.exists(test.workpath('StdAfx.obj')))
+test.run(arguments='test.exe', stderr=None)
+
+test.must_exist(test.workpath('test.exe'))
+test.must_exist(test.workpath('test.res'))
+test.must_exist(test.workpath('test.pdb'))
+test.must_exist(test.workpath('StdAfx.pch'))
+test.must_exist(test.workpath('StdAfx.obj'))
test.run(program=test.workpath('test.exe'), stdout='2001 test 1\n')
test.write('resource.h', '''
#define IDS_TEST 2002
''')
-test.run(arguments='test.exe')
+test.run(arguments='test.exe', stderr=None)
test.run(program=test.workpath('test.exe'), stdout='2002 test 1\n')
test.write('test.rc', '''
IDS_TEST "test 2"
END
''')
-test.run(arguments='test.exe')
+test.run(arguments='test.exe', stderr=None)
test.run(program=test.workpath('test.exe'), stdout='2002 test 2\n')
test.run(arguments='-c .')
-test.fail_test(os.path.exists(test.workpath('test.exe')))
-test.fail_test(os.path.exists(test.workpath('test.pdb')))
-test.fail_test(os.path.exists(test.workpath('test.res')))
-test.fail_test(os.path.exists(test.workpath('StdAfx.pch')))
-test.fail_test(os.path.exists(test.workpath('StdAfx.obj')))
+test.must_not_exist(test.workpath('test.exe'))
+test.must_not_exist(test.workpath('test.pdb'))
+test.must_not_exist(test.workpath('test.res'))
+test.must_not_exist(test.workpath('StdAfx.pch'))
+test.must_not_exist(test.workpath('StdAfx.obj'))
-test.run(arguments='test.exe')
+test.run(arguments='test.exe', stderr=None)
-test.fail_test(not os.path.exists(test.workpath('test.pdb')))
-test.fail_test(not os.path.exists(test.workpath('StdAfx.pch')))
-test.fail_test(not os.path.exists(test.workpath('StdAfx.obj')))
+test.must_exist(test.workpath('test.pdb'))
+test.must_exist(test.workpath('StdAfx.pch'))
+test.must_exist(test.workpath('StdAfx.obj'))
test.run(arguments='-c test.pdb')
-test.fail_test(os.path.exists(test.workpath('test.exe')))
-test.fail_test(os.path.exists(test.workpath('test.obj')))
-test.fail_test(os.path.exists(test.workpath('test.pdb')))
-test.fail_test(os.path.exists(test.workpath('StdAfx.pch')))
-test.fail_test(os.path.exists(test.workpath('StdAfx.obj')))
+test.must_not_exist(test.workpath('test.exe'))
+test.must_not_exist(test.workpath('test.obj'))
+test.must_not_exist(test.workpath('test.pdb'))
+test.must_not_exist(test.workpath('StdAfx.pch'))
+test.must_not_exist(test.workpath('StdAfx.obj'))
-test.run(arguments='StdAfx.pch')
+test.run(arguments='StdAfx.pch', stderr=None)
-test.fail_test(os.path.exists(test.workpath('test.pdb')))
-test.fail_test(not os.path.exists(test.workpath('StdAfx.pch')))
-test.fail_test(not os.path.exists(test.workpath('StdAfx.obj')))
+test.must_not_exist(test.workpath('test.pdb'))
+test.must_exist(test.workpath('StdAfx.pch'))
+test.must_exist(test.workpath('StdAfx.obj'))
test.run(arguments='-c test.exe')
-test.fail_test(os.path.exists(test.workpath('test.exe')))
-test.fail_test(os.path.exists(test.workpath('test.obj')))
-test.fail_test(os.path.exists(test.workpath('test.pdb')))
-test.fail_test(os.path.exists(test.workpath('StdAfx.pch')))
-test.fail_test(os.path.exists(test.workpath('StdAfx.obj')))
+test.must_not_exist(test.workpath('test.exe'))
+test.must_not_exist(test.workpath('test.obj'))
+test.must_not_exist(test.workpath('test.pdb'))
+test.must_not_exist(test.workpath('StdAfx.pch'))
+test.must_not_exist(test.workpath('StdAfx.obj'))
-test.run(arguments='test.obj')
-test.fail_test(os.path.exists(test.workpath('test.pdb')))
-test.fail_test(not os.path.exists(test.workpath('test.obj')))
+test.run(arguments='test.obj', stderr=None)
+test.must_not_exist(test.workpath('test.pdb'))
+test.must_exist(test.workpath('test.obj'))
start = time.time()
-test.run(arguments='fast.obj')
+test.run(arguments='fast.obj', stderr=None)
fast = time.time() - start
start = time.time()
-test.run(arguments='slow.obj')
+test.run(arguments='slow.obj', stderr=None)
slow = time.time() - start
# using precompiled headers should be significantly faster
#define IDS_TEST 2003
''')
-test.not_up_to_date(arguments='test.res')
-test.not_up_to_date(arguments='StdAfx.pch')
-test.not_up_to_date(arguments='test.exe')
+test.not_up_to_date(arguments='test.res', stderr=None)
+test.not_up_to_date(arguments='StdAfx.pch', stderr=None)
+test.not_up_to_date(arguments='test.exe', stderr=None)
test.run(program=test.workpath('test.exe'), stdout='2003 test 2\n')
#include "StdAfx.h"
''')
-test.run(arguments='out')
+test.run(arguments='out', stderr=None)
-test.fail_test(not os.path.exists(test.workpath('out/test.pdb')))
-test.fail_test(not os.path.exists(test.workpath('build/StdAfx.pch')))
-test.fail_test(not os.path.exists(test.workpath('build/StdAfx.obj')))
+test.must_exist(test.workpath('out/test.pdb'))
+test.must_exist(test.workpath('build/StdAfx.pch'))
+test.must_exist(test.workpath('build/StdAfx.obj'))
test.run(arguments='-c out')
-test.fail_test(os.path.exists(test.workpath('out/test.pdb')))
-test.fail_test(os.path.exists(test.workpath('build/StdAfx.pch')))
-test.fail_test(os.path.exists(test.workpath('build/StdAfx.obj')))
+test.must_not_exist(test.workpath('out/test.pdb'))
+test.must_not_exist(test.workpath('build/StdAfx.pch'))
+test.must_not_exist(test.workpath('build/StdAfx.obj'))
#####
# Test error reporting
test.write('SConstruct', """
env = Environment(OBJSUFFIX = '.ooo', PROGSUFFIX = '.xxx')
-env.Program('foo', Split('foo.c bar.c'))
+env.Program('Foo', Split('Foo.c Bar.c'))
""")
-test.write('foo.c', r"""
-#include "foo.h"
+# N.B.: We use upper-case file names (Foo* and Bar*) so that the sorting
+# order with our upper-case SConstruct file is the same on case-sensitive
+# (UNIX/Linux) and case-insensitive (Windows) systems.
+
+test.write('Foo.c', r"""
+#include "Foo.h"
int main(int argc, char *argv[])
{
argv[argc++] = "--";
}
""")
-test.write('bar.c', """
-#include "bar.h"
+test.write('Bar.c', """
+#include "Bar.h"
""")
-test.write('foo.h', """
+test.write('Foo.h', """
#ifndef FOO_H
#define FOO_H
-#include "bar.h"
+#include "Bar.h"
#endif
""")
-test.write('bar.h', """
+test.write('Bar.h', """
#ifndef BAR_H
#define BAR_H
-#include "foo.h"
+#include "Foo.h"
#endif
""")
tree1 = """
-+-foo.xxx
- +-foo.ooo
- | +-foo.c
- | +-foo.h
- | +-bar.h
- +-bar.ooo
- +-bar.c
- +-bar.h
- +-foo.h
++-Foo.xxx
+ +-Foo.ooo
+ | +-Foo.c
+ | +-Foo.h
+ | +-Bar.h
+ +-Bar.ooo
+ +-Bar.c
+ +-Bar.h
+ +-Foo.h
"""
-test.run(arguments = "--debug=tree foo.xxx")
+test.run(arguments = "--debug=tree Foo.xxx")
test.fail_test(string.find(test.stdout(), tree1) == -1)
tree2 = """
+-.
+ +-Bar.c
+ +-Bar.ooo
+ | +-Bar.c
+ | +-Bar.h
+ | +-Foo.h
+ +-Foo.c
+ +-Foo.ooo
+ | +-Foo.c
+ | +-Foo.h
+ | +-Bar.h
+ +-Foo.xxx
+ | +-Foo.ooo
+ | | +-Foo.c
+ | | +-Foo.h
+ | | +-Bar.h
+ | +-Bar.ooo
+ | +-Bar.c
+ | +-Bar.h
+ | +-Foo.h
+-SConstruct
- +-bar.c
- +-bar.ooo
- | +-bar.c
- | +-bar.h
- | +-foo.h
- +-foo.c
- +-foo.ooo
- | +-foo.c
- | +-foo.h
- | +-bar.h
- +-foo.xxx
- +-foo.ooo
- | +-foo.c
- | +-foo.h
- | +-bar.h
- +-bar.ooo
- +-bar.c
- +-bar.h
- +-foo.h
"""
test.run(arguments = "--debug=tree .")
test.fail_test(string.find(test.stdout(), tree2) == -1)
# Make sure we print the debug stuff even if there's a build failure.
-test.write('bar.h', """
+test.write('Bar.h', """
#ifndef BAR_H
#define BAR_H
-#include "foo.h"
+#include "Foo.h"
#endif
THIS SHOULD CAUSE A BUILD FAILURE
""")
-test.run(arguments = "--debug=tree foo.xxx",
+test.run(arguments = "--debug=tree Foo.xxx",
status = 2,
stderr = None)
test.fail_test(string.find(test.stdout(), tree1) == -1)