/** * @covers ::compile * * @dataProvider dataProviderTestCompileWithKnownOperators() * * @param string $expected * The expected generated SQL condition. * @param string $field * The field to pass into the condition() method. * @param mixed $value * The value to pass into the condition() method. * @param string $operator * The operator to pass into the condition() method. * @param mixed $expected_arguments * (optional) The expected set arguments. */ public function testCompileWithKnownOperators($expected, $field, $value, $operator, $expected_arguments = NULL) { $connection = $this->prophesize(Connection::class); $connection->escapeField(Argument::any())->will(function ($args) { return preg_replace('/[^A-Za-z0-9_.]+/', '', $args[0]); }); $connection->mapConditionOperator(Argument::any())->willReturn(NULL); $connection = $connection->reveal(); $query_placeholder = $this->prophesize(PlaceholderInterface::class); $counter = 0; $query_placeholder->nextPlaceholder()->will(function () use(&$counter) { return $counter++; }); $query_placeholder->uniqueIdentifier()->willReturn(4); $query_placeholder = $query_placeholder->reveal(); $condition = new Condition('AND'); $condition->condition($field, $value, $operator); $condition->compile($connection, $query_placeholder); $this->assertEquals($expected, $condition->__toString()); if (isset($expected_arguments)) { $this->assertEquals($expected_arguments, $condition->arguments()); } }