Skip to content

Commit 5ec94dd

Browse files
author
e1himself
committed
Fix a lime comparison bug
The false positives we fix: - 0 was equal to any non-empty string - true was equal to any non-empty string Additionally change the lime unit test to reflect the new behavior.
1 parent c5e11d9 commit 5ec94dd

File tree

2 files changed

+31
-17
lines changed

2 files changed

+31
-17
lines changed

lib/vendor/lime/lime.php

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,29 @@ public function ok($exp, $message = '')
190190
return $result;
191191
}
192192

193+
/**
194+
* Compares two values and returns true if they are equal
195+
*
196+
* @param mixed $exp1 left value
197+
* @param mixed $exp2 right value
198+
* @return bool
199+
*/
200+
private function equals($exp1, $exp2)
201+
{
202+
if (is_object($exp1) || is_object($exp2)) {
203+
$value = $exp1 === $exp2;
204+
} else if (is_float($exp1) && is_float($exp2)) {
205+
$value = abs($exp1 - $exp2) < self::EPSILON;
206+
} else if (is_string($exp1) && is_numeric($exp1) || is_string($exp2) && is_numeric($exp2)) {
207+
return $exp1 == $exp2;
208+
} else if (is_string($exp1) || is_string($exp2)) {
209+
return (string) $exp1 === (string) $exp2;
210+
} else {
211+
$value = $exp1 == $exp2;
212+
}
213+
return $value;
214+
}
215+
193216
/**
194217
* Compares two values and passes if they are equal (==)
195218
*
@@ -201,18 +224,7 @@ public function ok($exp, $message = '')
201224
*/
202225
public function is($exp1, $exp2, $message = '')
203226
{
204-
if (is_object($exp1) || is_object($exp2))
205-
{
206-
$value = $exp1 === $exp2;
207-
}
208-
else if (is_float($exp1) && is_float($exp2))
209-
{
210-
$value = abs($exp1 - $exp2) < self::EPSILON;
211-
}
212-
else
213-
{
214-
$value = $exp1 == $exp2;
215-
}
227+
$value = $this->equals($exp1, $exp2);
216228

217229
if (!$result = $this->ok($value, $message))
218230
{
@@ -233,9 +245,11 @@ public function is($exp1, $exp2, $message = '')
233245
*/
234246
public function isnt($exp1, $exp2, $message = '')
235247
{
236-
if (!$result = $this->ok($exp1 != $exp2, $message))
248+
$value = $this->equals($exp1, $exp2);
249+
250+
if (!$result = $this->ok(!$value, $message))
237251
{
238-
$this->set_last_test_errors(array(sprintf(" %s", var_export($exp2, true)), ' ne', sprintf(" %s", var_export($exp2, true))));
252+
$this->set_last_test_errors(array(sprintf(" %s", var_export($exp1, true)), ' ne', sprintf(" %s", var_export($exp2, true))));
239253
}
240254

241255
return $result;

test/unit/test/limeTestTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
$t->is('aaa', 'aaa');
1717
$t->is("\0", "\0");
1818

19-
$t->comment('C. Equivalent number <-> strings');
19+
$t->comment('C. Equivalent number <-> numeric string');
2020
$t->is('0', 0);
2121
$t->is('1', 1);
2222
$t->is('-1', -1);
@@ -30,10 +30,9 @@
3030
$t->isnt(-2, 'Hello');
3131
$t->isnt(100, array(100));
3232

33-
$t->comment('E. Equivalent falsy');
33+
$t->comment('E. Both falsy');
3434
$t->is(0, false);
3535
$t->is(0, null);
36-
$t->is('', 0);
3736
$t->is('', false);
3837
$t->is(false, null);
3938
$t->is(array(), null);
@@ -43,3 +42,4 @@
4342
$t->isnt('Hello', true);
4443
$t->isnt('Hello', 0);
4544
$t->isnt(0, 'Hello');
45+
$t->isnt('', 0);

0 commit comments

Comments
 (0)