summaryrefslogtreecommitdiff
path: root/modules/simpletest/unit_tester.php
blob: 5b77faaccbc1f2a45886841d0335f6003185c686 (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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
<?php
// $Id$

/**
 * Standard unit test class for day to day testing
 * of PHP code XP style. Adds some useful standard
 * assertions.
 */
class UnitTestCase extends SimpleTestCase {

  /**
   *    Creates an empty test case. Should be subclassed
   *    with test methods for a functional test case.
   *    @param string $label     Name of test case. Will use
   *                             the class name if none specified.
   *    @access public
   */
  function UnitTestCase($label = false) {
    if (!$label) {
      $label = get_class($this);
    }
    $this->SimpleTestCase($label);
  }

  /**
   *    Called from within the test methods to register
   *    passes and failures.
   *    @param boolean $result    Pass on true.
   *    @param string $message    Message to display describing
   *                              the test state.
   *    @return boolean           True on pass
   *    @access public
   */
  function assertTrue($result, $message = FALSE, $group = 'Other') {
    return $this->assert(new TrueExpectation(), $result, $message, $group);
  }

  /**
   *    Will be true on false and vice versa. False
   *    is the PHP definition of false, so that null,
   *    empty strings, zero and an empty array all count
   *    as false.
   *    @param boolean $result    Pass on false.
   *    @param string $message    Message to display.
   *    @return boolean           True on pass
   *    @access public
   */
  function assertFalse($result, $message = '%s', $group = 'Other') {
    $dumper = &new SimpleDumper();
    $message = sprintf($message, 'Expected false, got [' . $dumper->describeValue($result) . ']');
    return $this->assertTrue(!$result, $message, $group);
  }

  /**
   *    Will be true if the value is null.
   *    @param null $value       Supposedly null value.
   *    @param string $message   Message to display.
   *    @return boolean                        True on pass
   *    @access public
   */
  function assertNull($value, $message = '%s', $group = 'Other') {
    $dumper = &new SimpleDumper();
    $message = sprintf($message, '[' . $dumper->describeValue($value) . '] should be null');
    return $this->assertTrue(!isset($value), $message, $group);
  }

  /**
   *    Will be true if the value is set.
   *    @param mixed $value           Supposedly set value.
   *    @param string $message        Message to display.
   *    @return boolean               True on pass.
   *    @access public
   */
  function assertNotNull($value, $message = '%s', $group = 'Other') {
    $dumper = &new SimpleDumper();
    $message = sprintf($message, '[' . $dumper->describeValue($value) . '] should not be null');
    return $this->assertTrue(isset($value), $message, $group);
  }

  /**
   *    Will trigger a pass if the two parameters have
   *    the same value only. Otherwise a fail.
   *    @param mixed $first          Value to compare.
   *    @param mixed $second         Value to compare.
   *    @param string $message       Message to display.
   *    @return boolean              True on pass
   *    @access public
   */
  function assertEqual($first, $second, $message = '%s', $group = 'Other') {
    $dumper = &new SimpleDumper();
    $message = sprintf($message, 'Expected ' . $dumper->describeValue($first) . ', got [' . $dumper->describeValue($second) . ']');
    $this->assertTrue($first == $second, $message, $group);
  }

  /**
   *    Will trigger a pass if the two parameters have
   *    a different value. Otherwise a fail.
   *    @param mixed $first           Value to compare.
   *    @param mixed $second          Value to compare.
   *    @param string $message        Message to display.
   *    @return boolean               True on pass
   *    @access public
   */
  function assertNotEqual($first, $second, $message = '%s', $group = 'Other') {
    $dumper = &new SimpleDumper();
    $message = sprintf($message, 'Expected ' . $dumper->describeValue($first) . ', not equal to ' . $dumper->describeValue($second));
    $this->assertTrue($first != $second, $message, $group);
  }

  /**
   *    Will trigger a pass if the two parameters have
   *    the same value and same type. Otherwise a fail.
   *    @param mixed $first           Value to compare.
   *    @param mixed $second          Value to compare.
   *    @param string $message        Message to display.
   *    @return boolean               True on pass
   *    @access public
   */
  function assertIdentical($first, $second, $message = '%s', $group = 'Other') {
    $dumper = &new SimpleDumper();
    $message = sprintf($message, 'Expected ' . $dumper->describeValue($first) . ', got [' . $dumper->describeValue($second) . ']');
    $this->assertTrue($first === $second, $message, $group);
  }

  /**
   *    Will trigger a pass if the two parameters have
   *    the different value or different type.
   *    @param mixed $first           Value to compare.
   *    @param mixed $second          Value to compare.
   *    @param string $message        Message to display.
   *    @return boolean               True on pass
   *    @access public
   */
  function assertNotIdentical($first, $second, $message = '%s', $group = 'Other') {
    $dumper = &new SimpleDumper();
    $message = sprintf($message, 'Expected ' . $dumper->describeValue($first) . ', not identical to ' . $dumper->describeValue($second));
    $this->assertTrue($first !== $second, $message, $group);
  }

  /**
   *    Will trigger a pass if the Perl regex pattern
   *    is found in the subject. Fail otherwise.
   *    @param string $pattern    Perl regex to look for including
   *                              the regex delimiters.
   *    @param string $subject    String to search in.
   *    @param string $message    Message to display.
   *    @return boolean           True on pass
   *    @access public
   */
  function assertPattern($pattern, $subject, $message = '%s', $group = 'Other') {
    $dumper  = &new SimpleDumper();
    $replace = 'Pattern ' . $pattern . ' detected in [' . $dumper->describeValue($subject) . ']';
    $found   = preg_match($pattern, $subject, $matches);
    if ($found) {
      $position = strpos($subject, $matches[0]);
      $replace .= ' in region [' . $dumper->clipString($subject, 100, $position) . ']';
    }
    $message = sprintf($message, $replace);
    $this->assertTrue($found, $message, $group);
  }

  /**
   *    Will trigger a pass if the perl regex pattern
   *    is not present in subject. Fail if found.
   *    @param string $pattern    Perl regex to look for including
   *                              the regex delimiters.
   *    @param string $subject    String to search in.
   *    @param string $message    Message to display.
   *    @return boolean           True on pass
   *    @access public
   */
  function assertNoPattern($pattern, $subject, $message = '%s', $group = 'Other') {
    $dumper  = &new SimpleDumper();
    $found   = preg_match($pattern, $subject);
    $message = sprintf($message, 'Pattern ' . $pattern . ' not detected in [' . $dumper->describeValue($subject) . ']');
    $this->assertFalse($found, $message, $group = 'Other');
  }
}