directory = sys_get_temp_dir() . '/typephp-native-project-' . bin2hex(random_bytes(6));
mkdir($this->directory . '/generated', 0777, true);
file_put_contents($this->directory . '/generated/runtime.c', 'int native_c(void) { return 1; }');
file_put_contents($this->directory . '/generated/main.cpp', 'int main() { return 0; }');
file_put_contents($this->directory . '/generated/main.php', 'directory . '/generated/runtime.c');
@unlink($this->directory . '/generated/main.cpp');
@unlink($this->directory . '/generated/main.php');
@unlink($this->directory . '/generated/invalid.txt');
@unlink($this->directory . '/project.xml');
@rmdir($this->directory . '/generated');
@rmdir($this->directory);
}
public function testPhpCAndCppSourcesAreAccepted(): void
{
file_put_contents($this->directory . '/project.xml', <<<'XML'
generated/main.php
generated/runtime.c
generated/main.cpp
XML);
$config = NativeSourceProjectConfig::load($this->directory . '/project.xml');
self::assertSame('cc', $config->cCompiler);
self::assertSame('c++', $config->compiler);
self::assertSame([
realpath($this->directory . '/generated/main.php'),
], $config->phpSources);
self::assertSame([
realpath($this->directory . '/generated/runtime.c'),
realpath($this->directory . '/generated/main.cpp'),
], $config->sources);
}
public function testNonNativeSourceIsRejected(): void
{
file_put_contents($this->directory . '/generated/invalid.txt', 'invalid');
file_put_contents($this->directory . '/project.xml', <<<'XML'
generated/invalid.txt
XML);
$this->expectException(RuntimeException::class);
$this->expectExceptionMessage('must be PHP, C, or C++');
NativeSourceProjectConfig::load($this->directory . '/project.xml');
}
}