aboutsummaryrefslogtreecommitdiff
path: root/build2/test/script/script
blob: de81fa6c6033412b3ea64843932116bfc791e571 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// file      : build2/test/script/script -*- C++ -*-
// copyright : Copyright (c) 2014-2016 Code Synthesis Ltd
// license   : MIT; see accompanying LICENSE file

#ifndef BUILD2_TEST_SCRIPT_SCRIPT
#define BUILD2_TEST_SCRIPT_SCRIPT

#include <build2/types>
#include <build2/utility>

#include <build2/variable>

namespace build2
{
  class target;

  namespace test
  {
    namespace script
    {
      class script
      {
      public:
        script (target& tt, target& st)
            : test_target (tt), script_target (st) {}

      public:
        target& test_target;   // Target we are testing.
        target& script_target; // Target of the testscript file.

      public:
        // Note that if we pass the variable name as a string, then it will
        // be looked up in the wrong pool.
        //
        variable_pool var_pool;
        variable_map vars;

        // Lookup the variable starting from this scope, continuing with outer
        // scopes, then the target being tested, then the testscript target,
        // and then outer buildfile scopes (including testscript-type/pattern
        // specific).
        //
        lookup
        find (const variable&) const;

        // Return a value suitable for assignment. If the variable does not
        // exist in this scope's map, then a new one with the NULL value is
        // added and returned. Otherwise the existing value is returned.
        //
        value&
        assign (const variable& var) {return vars.assign (var);}

        // Return a value suitable for append/prepend. If the variable does
        // not exist in this scope's map, then outer scopes are searched for
        // the same variable. If found then a new variable with the found
        // value is added to this scope and returned. Otherwise this function
        // proceeds as assign() above.
        //
        value&
        append (const variable&);
      };
    }
  }
}

#endif // BUILD2_TEST_SCRIPT_SCRIPT