protected function matches($actual) { $expected = $this->expected; switch (true) { case $this->analyzer->isArray($actual): $asserter = new asserters\phpArray(null, $this->analyzer); $asserter->setWith($actual); break; case $actual instanceof \iterator: $asserter = new asserters\iterator(null, $this->analyzer); $asserter = $asserter->setWith($actual)->toArray; break; case $this->analyzer->isString($actual): $asserter = new asserters\phpString(null, $this->analyzer); if ($this->ignoreCase) { $actual = strtolower($actual); $expected = strtolower($expected); } $asserter->setWith($actual); break; default: throw new \PHPUnit_Framework_Exception('Actual value of ' . __CLASS__ . ' must be an array, a string or a traversable object'); } try { if ($this->analyzer->isObject($expected)) { if ($this->checkForObjectIdentity) { $asserter->strictlyContains($expected); } else { $asserter->contains($expected); } } else { if ($this->checkForNonObjectIdentity) { $asserter->strictlyContains($expected); } else { $asserter->contains($expected); } } } catch (exception $exception) { throw new exception($asserter, $this->analyzer->getTypeOf($actual) . ' does not contain ' . $this->analyzer->getTypeOf($expected)); } }