5 # Permission is hereby granted, free of charge, to any person obtaining
6 # a copy of this software and associated documentation files (the
7 # "Software"), to deal in the Software without restriction, including
8 # without limitation the rights to use, copy, modify, merge, publish,
9 # distribute, sublicense, and/or sell copies of the Software, and to
10 # permit persons to whom the Software is furnished to do so, subject to
11 # the following conditions:
13 # The above copyright notice and this permission notice shall be included
14 # in all copies or substantial portions of the Software.
16 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
17 # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
18 # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20 # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
29 Verifies that using the same source file in different environments
30 will get the proper scanner for the environment being used.
35 _python_ = TestSCons._python_
37 test = TestSCons.TestSCons()
40 test.write('SConstruct', """
43 include_re = re.compile(r'^include\s+(\S+)$', re.M)
44 input_re = re.compile(r'^input\s+(\S+)$', re.M)
46 scan1 = Scanner(name = 'Include',
47 function = lambda N,E,P,A: A.findall(N.get_text_contents()),
48 argument = include_re,
51 scan2 = Scanner(name = 'Input',
52 function = lambda N,E,P,A: A.findall(N.get_text_contents()),
59 env1.Append(SCANNERS=scan1)
60 env2.Append(SCANNERS=scan2)
62 env1.Command('frog.1', 'frog.inp', r'%(_python_)s do_incl.py $TARGET $SOURCES')
63 env2.Command('frog.2', 'frog.inp', r'%(_python_)s do_inp.py $TARGET $SOURCES')
70 def process(infp, outfp):
71 prefix = '%(command)s '
73 for line in infp.readlines():
74 if line[:l] == prefix:
75 process(open(line[l:-1], 'rb'), outfp)
79 process(open(sys.argv[2], 'rb'),
80 open(sys.argv[1], 'wb'))
84 test.write('do_incl.py', process % { 'command' : 'include' })
85 test.write('do_inp.py', process % { 'command' : 'input' })
87 test.write('frog.inp', """\
92 test.write('sound1', 'croak\n')
93 test.write('sound2', 'ribbet\n')
95 expect = test.wrap_stdout("""\
96 %(_python_)s do_incl.py frog.1 frog.inp
97 %(_python_)s do_inp.py frog.2 frog.inp
100 test.run(arguments='.', stdout=expect)
102 test.must_match('frog.1', 'croak\ninput sound2\n')
103 test.must_match('frog.2', 'include sound1\nribbet\n')
105 test.write('sound2', 'rudeep\n')
107 expect = test.wrap_stdout("""\
108 %(_python_)s do_inp.py frog.2 frog.inp
111 test.run(arguments='.', stdout=expect)
113 test.must_match('frog.1', 'croak\ninput sound2\n')
114 test.must_match('frog.2', 'include sound1\nrudeep\n')
120 # indent-tabs-mode:nil
122 # vim: set expandtab tabstop=4 shiftwidth=4: