/**
* Builds a sleep(), usleep(), date(), time() and microtime() mock environment.
*
* @return MockEnvironment
*/
public function build()
{
$environment = new MockEnvironment();
$builder = new MockBuilder();
$incrementables = [];
foreach ($this->namespaces as $namespace) {
$builder->setNamespace($namespace);
// microtime() mock
$microtime = new FixedMicrotimeFunction($this->timestamp);
$builder->setName("microtime")->setFunctionProvider($microtime);
$environment->addMock($builder->build());
// time() mock
$builder->setName("time")->setFunction([$microtime, "getTime"]);
$environment->addMock($builder->build());
// date() mock
$date = new FixedDateFunction($this->timestamp);
$builder->setName("date")->setFunctionProvider($date);
$environment->addMock($builder->build());
$incrementables[] = $microtime;
$incrementables[] = $date;
}
// Need a complete list of $incrementables.
foreach ($this->namespaces as $namespace) {
$builder->setNamespace($namespace);
// sleep() mock
$builder->setName("sleep")->setFunctionProvider(new SleepFunction($incrementables));
$environment->addMock($builder->build());
// usleep() mock
$builder->setName("usleep")->setFunctionProvider(new UsleepFunction($incrementables));
$environment->addMock($builder->build());
}
return $environment;
}