public function testAssemble()
 {
     $statement = new ReplaceStatement();
     $insert = new ReplaceClause();
     $insert->setTable('tbl');
     $statement->addClause($insert);
     $this->assertEquals('REPLACE INTO tbl ()', QueryAssembler::stringify($statement));
     $insert->addField((new FieldExpression())->setField('id'));
     $insert->addField((new FieldExpression())->setField('name'));
     $this->assertEquals('REPLACE INTO tbl (id, name)', QueryAssembler::stringify($statement));
     $values = new ValuesClause();
     $values->addExpression(new ValueExpression());
     $values->addExpression((new ValueExpression())->setValue("Test"));
     $statement->addClause($values);
     $this->assertEquals('REPLACE INTO tbl (id, name) ' . 'VALUES (NULL, "Test")', QueryAssembler::stringify($statement));
 }
 public function testGettersAndSetters()
 {
     $clause = new ReplaceClause();
     $nameField = new FieldExpression();
     $nameField->setField('name');
     $idField = new FieldExpression();
     $idField->setField('id');
     $this->assertFalse($clause->hasFields());
     $clause->addField($nameField);
     $this->assertTrue($clause->hasFields());
     $this->assertSame([$nameField], $clause->getFields());
     $clause->clearFields();
     $clause->setFields([$nameField, $idField]);
     $this->assertTrue($clause->hasFields());
     $clause->clearFields();
     $this->assertFalse($clause->hasFields());
     $this->setExpectedException("InvalidArgumentException");
     $clause->setFields([$nameField, $idField, 'abc']);
 }