build(Shell::root(ArrayType::native(), null)); self::assertSame([], $node->value()); self::assertEmpty($node->children()); } public function test_invalid_type_fails_assertion(): void { $this->expectException(AssertionError::class); (new RootNodeBuilder(new ArrayNodeBuilder()))->build(Shell::root(new FakeType(), [])); } public function test_build_with_invalid_source_throws_exception(): void { $this->expectException(SourceMustBeIterable::class); $this->expectExceptionCode(1618739163); $this->expectExceptionMessage('Source must be iterable in order to be cast to `array`, but is of type `string`.'); (new RootNodeBuilder(new ArrayNodeBuilder()))->build(Shell::root(ArrayType::native(), 'foo')); } public function test_invalid_source_key_throws_exception(): void { $this->expectException(InvalidTraversableKey::class); $this->expectExceptionCode(1630946163); $this->expectExceptionMessage('Invalid key `foo`, it must be of type `int`.'); $type = new ArrayType(ArrayKeyType::integer(), NativeStringType::get()); $value = [ 'foo' => 'key is not ok', ]; (new RootNodeBuilder(new ArrayNodeBuilder()))->build(Shell::root($type, $value)); } }