Austin Schuh | e89fa2d | 2019-08-14 20:24:23 -0700 | [diff] [blame^] | 1 | <?php |
| 2 | |
| 3 | require join(DIRECTORY_SEPARATOR, array(dirname(dirname(__FILE__)), "php", "Constants.php")); |
| 4 | require join(DIRECTORY_SEPARATOR, array(dirname(dirname(__FILE__)), "php", "ByteBuffer.php")); |
| 5 | require join(DIRECTORY_SEPARATOR, array(dirname(dirname(__FILE__)), "php", "FlatbufferBuilder.php")); |
| 6 | require join(DIRECTORY_SEPARATOR, array(dirname(dirname(__FILE__)), "php", "Table.php")); |
| 7 | require join(DIRECTORY_SEPARATOR, array(dirname(dirname(__FILE__)), "php", "Struct.php")); |
| 8 | |
| 9 | require join(DIRECTORY_SEPARATOR, array(dirname(__FILE__), "php", 'Attacker.php')); |
| 10 | require join(DIRECTORY_SEPARATOR, array(dirname(__FILE__), "php", 'BookReader.php')); |
| 11 | require join(DIRECTORY_SEPARATOR, array(dirname(__FILE__), "php", 'Character.php')); |
| 12 | require join(DIRECTORY_SEPARATOR, array(dirname(__FILE__), "php", 'Movie.php')); |
| 13 | |
| 14 | class Assert { |
| 15 | public function ok($result, $message = "") { |
| 16 | if (!$result){ |
| 17 | throw new Exception(!empty($message) ? $message : "{$result} is not true."); |
| 18 | } |
| 19 | } |
| 20 | |
| 21 | public function Equal($result, $expected, $message = "") { |
| 22 | if ($result != $expected) { |
| 23 | throw new Exception(!empty($message) ? $message : "given the result {$result} is not equals as {$expected}"); |
| 24 | } |
| 25 | } |
| 26 | |
| 27 | |
| 28 | public function strictEqual($result, $expected, $message = "") { |
| 29 | if ($result !== $expected) { |
| 30 | throw new Exception(!empty($message) ? $message : "given the result {$result} is not strict equals as {$expected}"); |
| 31 | } |
| 32 | } |
| 33 | |
| 34 | public function Throws($class, Callable $callback) { |
| 35 | try { |
| 36 | $callback(); |
| 37 | |
| 38 | throw new \Exception("passed statement don't throw an exception."); |
| 39 | } catch (\Exception $e) { |
| 40 | if (get_class($e) != get_class($class)) { |
| 41 | throw new Exception("passed statement doesn't throw " . get_class($class) . ". throwws " . get_class($e)); |
| 42 | } |
| 43 | } |
| 44 | } |
| 45 | } |
| 46 | |
| 47 | function main() |
| 48 | { |
| 49 | $assert = new Assert(); |
| 50 | |
| 51 | $fbb = new Google\FlatBuffers\FlatBufferBuilder(1); |
| 52 | |
| 53 | $charTypes = [ |
| 54 | Character::Belle, |
| 55 | Character::MuLan, |
| 56 | Character::BookFan, |
| 57 | ]; |
| 58 | |
| 59 | Attacker::startAttacker($fbb); |
| 60 | Attacker::addSwordAttackDamage($fbb, 5); |
| 61 | $attackerOffset = Attacker::endAttacker($fbb); |
| 62 | |
| 63 | $charTypesOffset = Movie::createCharactersTypeVector($fbb, $charTypes); |
| 64 | $charsOffset = Movie::createCharactersVector( |
| 65 | $fbb, |
| 66 | [ |
| 67 | BookReader::createBookReader($fbb, 7), |
| 68 | $attackerOffset, |
| 69 | BookReader::createBookReader($fbb, 2), |
| 70 | ] |
| 71 | ); |
| 72 | |
| 73 | Movie::startMovie($fbb); |
| 74 | Movie::addCharactersType($fbb, $charTypesOffset); |
| 75 | Movie::addCharacters($fbb, $charsOffset); |
| 76 | Movie::finishMovieBuffer($fbb, Movie::endMovie($fbb)); |
| 77 | |
| 78 | $buf = Google\FlatBuffers\ByteBuffer::wrap($fbb->dataBuffer()->data()); |
| 79 | |
| 80 | $movie = Movie::getRootAsMovie($buf); |
| 81 | |
| 82 | $assert->strictEqual($movie->getCharactersTypeLength(), count($charTypes)); |
| 83 | $assert->strictEqual($movie->getCharactersLength(), $movie->getCharactersTypeLength()); |
| 84 | |
| 85 | for ($i = 0; $i < count($charTypes); ++$i) { |
| 86 | $assert->strictEqual($movie->getCharactersType($i), $charTypes[$i]); |
| 87 | } |
| 88 | |
| 89 | $bookReader7 = $movie->getCharacters(0, new BookReader()); |
| 90 | $assert->strictEqual($bookReader7->getBooksRead(), 7); |
| 91 | |
| 92 | $attacker = $movie->getCharacters(1, new Attacker()); |
| 93 | $assert->strictEqual($attacker->getSwordAttackDamage(), 5); |
| 94 | |
| 95 | $bookReader2 = $movie->getCharacters(2, new BookReader()); |
| 96 | $assert->strictEqual($bookReader2->getBooksRead(), 2); |
| 97 | } |
| 98 | |
| 99 | try { |
| 100 | main(); |
| 101 | exit(0); |
| 102 | } catch(Exception $e) { |
| 103 | printf("Fatal error: Uncaught exception '%s' with message '%s. in %s:%d\n", get_class($e), $e->getMessage(), $e->getFile(), $e->getLine()); |
| 104 | printf("Stack trace:\n"); |
| 105 | echo $e->getTraceAsString() . PHP_EOL; |
| 106 | printf(" thrown in in %s:%d\n", $e->getFile(), $e->getLine()); |
| 107 | |
| 108 | die(-1); |
| 109 | } |