Skip to content
This repository has been archived by the owner on Jan 8, 2020. It is now read-only.

Fixed FileGenerator::setUse() to ignore already added uses. #3317

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 3 additions & 1 deletion library/Zend/Code/Generator/FileGenerator.php
Expand Up @@ -350,7 +350,9 @@ public function setUses(array $uses)
*/
public function setUse($use, $as = null)
{
$this->uses[] = array($use, $as);
if (!in_array(array($use, $as), $this->uses)) {
$this->uses[] = array($use, $as);
}
return $this;
}

Expand Down
33 changes: 33 additions & 0 deletions tests/ZendTest/Code/Generator/FileGeneratorTest.php
Expand Up @@ -202,4 +202,37 @@ public function testGeneratesNamespaceStatements()
$generated = $file->generate();
$this->assertContains('namespace Foo\\Bar', $generated, $generated);
}

public function testSetUseDoesntGenerateMultipleIdenticalUseStatements()
{
$file = new FileGenerator();
$file->setUse('My\Baz')
->setUse('My\Baz');
$generated = $file->generate();
$this->assertSame(strpos($generated, 'use My\\Baz'), strrpos($generated, 'use My\\Baz'));
}

public function testSetUsesDoesntGenerateMultipleIdenticalUseStatements()
{
$file = new FileGenerator();
$file->setUses(array(
array('Your\Bar', 'bar'),
array('Your\Bar', 'bar'),
));
$generated = $file->generate();
$this->assertSame(strpos($generated, 'use Your\\Bar as bar;'), strrpos($generated, 'use Your\\Bar as bar;'));
}

public function testSetUseAllowsMultipleAliasedUseStatements()
{
$file = new FileGenerator();
$file->setUses(array(
array('Your\Bar', 'bar'),
array('Your\Bar', 'bar2'),
));
$generated = $file->generate();
$this->assertContains('use Your\\Bar as bar;', $generated);
$this->assertContains('use Your\\Bar as bar2;', $generated);
}

}