As tested with phpunit:
$xml_1 = new SimpleXMLElement('<name>Bugs</name>');
$xml_2 = new SimpleXMLElement('<name>Bugs</name>');
$this->assertEquals($xml_1, $xml_2); // Passes
$this->assertTrue($xml_1==$xml_2); // Fails
Um, what?
EDIT: No, this is not a stupid question. In Python:
import unittest
class TestEqualityIdentity(unittest.TestCase):
def test_equality(self):
x = 1
y = 1
self.assertTrue(x==y) # Passes
self.assertEqual(x, y) # Passes
if __name__ == '__main__':
unittest.main()
No reason PHP need behave like Python. But, it isn't a stupid question in PHP either.
$x = 1;
$y = 1;
$this->assertEquals($x, $y); // Passes
$this->assertTrue($x==$y); // Passes
EDIT 2 Raymond's answer below is right, never mind that at this writing it's 3 votes down.
FWIW, I needed an if test comparison of the text node values of two XML objects, and got it by casting them to strings.
$this->assertTrue((string) $xml_1== (string) $xml_2); // Passes, works in if test
// Note that simply referring to a SimpleXMLElement _seems_ to give its
// text node.
$this->assertEquals($xml_1, 'Bugs'); // Passes
// This seemed weird to me when I first saw it, and I can't
// say I like it any better now
+1 This is a great question.
I had to look in the PHP docs for the answers: http://www.phpunit.de/manual/3.4/en/api.html
Equality isn't defined for XML Element objects, so the $this->assertTrue($xml_1==$xml_2);
will only succeed if the two objects have the same identity (are the same object).
In contrast, assertEquals tries to be smart and has special case handling depending on object type. In the case of XML, it compares the structure and contents of the XML elements, returning True if they have the same semantic meaning eventhough they are distinct objects.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With