[ci skip] Add note that this change may break SetOption() + ninja usage with fix
[scons.git] / test / Clean / mkfifo.py
blob62d19d0465f3629c7db174f5459bf2e1fa9f6f04
1 #!/usr/bin/env python
3 # MIT License
5 # Copyright The SCons Foundation
7 # Permission is hereby granted, free of charge, to any person obtaining
8 # a copy of this software and associated documentation files (the
9 # "Software"), to deal in the Software without restriction, including
10 # without limitation the rights to use, copy, modify, merge, publish,
11 # distribute, sublicense, and/or sell copies of the Software, and to
12 # permit persons to whom the Software is furnished to do so, subject to
13 # the following conditions:
15 # The above copyright notice and this permission notice shall be included
16 # in all copies or substantial portions of the Software.
18 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
19 # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
20 # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
22 # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23 # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24 # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 """
27 Verify that SCons reports an error when cleaning up a target directory
28 containing a named pipe created with o.mkfifo().
29 """
31 import os
33 import TestSCons
35 test = TestSCons.TestSCons()
37 if not hasattr(os, 'mkfifo'):
38 test.skip_test('No os.mkfifo() function; skipping test\n')
40 test_dir_name = 'testdir'
41 pipe_path = os.path.join(test_dir_name, 'namedpipe')
43 test.write('SConstruct', """\
44 Execute(Mkdir("{0}"))
45 dir = Dir("{0}")
46 Clean(dir, '{0}')
47 """.format(test_dir_name))
49 test.run(arguments='-Q -q', stdout='Mkdir("{0}")\n'.format(test_dir_name))
51 os.mkfifo(pipe_path)
53 test.must_exist(test.workpath(pipe_path))
55 expect1 = """\
56 Mkdir("{0}")
57 Path '{1}' exists but isn't a file or directory.
58 scons: Could not remove '{0}': Directory not empty
59 """.format(test_dir_name, pipe_path)
61 expect2 = """\
62 Mkdir("{0}")
63 Path '{1}' exists but isn't a file or directory.
64 scons: Could not remove '{0}': File exists
65 """.format(test_dir_name, pipe_path)
67 test.run(arguments='-c -Q -q')
69 test.must_exist(test.workpath(pipe_path))
71 if test.stdout() not in [expect1, expect2]:
72 test.diff(expect1, test.stdout(), 'STDOUT ')
73 test.fail_test()
75 test.pass_test()
77 # Local Variables:
78 # tab-width:4
79 # indent-tabs-mode:nil
80 # End:
81 # vim: set expandtab tabstop=4 shiftwidth=4: