| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -12,6 +12,7 @@ use flight\net\Request;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					use flight\net\Response;
 | 
					 | 
					 | 
					 | 
					use flight\net\Response;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					use flight\util\Collection;
 | 
					 | 
					 | 
					 | 
					use flight\util\Collection;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					use InvalidArgumentException;
 | 
					 | 
					 | 
					 | 
					use InvalidArgumentException;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					use JsonException;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					use PDOException;
 | 
					 | 
					 | 
					 | 
					use PDOException;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					use PHPUnit\Framework\TestCase;
 | 
					 | 
					 | 
					 | 
					use PHPUnit\Framework\TestCase;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					use tests\classes\Container;
 | 
					 | 
					 | 
					 | 
					use tests\classes\Container;
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -355,18 +356,36 @@ class EngineTest extends TestCase
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    {
 | 
					 | 
					 | 
					 | 
					    {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        $engine = new Engine();
 | 
					 | 
					 | 
					 | 
					        $engine = new Engine();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        $engine->json(['key1' => 'value1', 'key2' => 'value2']);
 | 
					 | 
					 | 
					 | 
					        $engine->json(['key1' => 'value1', 'key2' => 'value2']);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        $this->assertEquals('application/json; charset=utf-8', $engine->response()->headers()['Content-Type']);
 | 
					 | 
					 | 
					 | 
					        $this->assertEquals('application/json', $engine->response()->headers()['Content-Type']);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        $this->assertEquals(200, $engine->response()->status());
 | 
					 | 
					 | 
					 | 
					        $this->assertEquals(200, $engine->response()->status());
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							$this->assertEquals('{"key1":"value1","key2":"value2"}', $engine->response()->getBody());
 | 
					 | 
					 | 
					 | 
							$this->assertEquals('{"key1":"value1","key2":"value2"}', $engine->response()->getBody());
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						public function testJsonWithDuplicateDefaultFlags()
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							$engine = new Engine();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							// utf8 emoji
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							$engine->json(['key1' => 'value1', 'key2' => 'value2', 'utf8_emoji' => '😀'], 201, true, '', JSON_HEX_TAG | JSON_HEX_TAG | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							$this->assertEquals('application/json', $engine->response()->headers()['Content-Type']);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							$this->assertEquals(201, $engine->response()->status());
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							$this->assertEquals('{"key1":"value1","key2":"value2","utf8_emoji":"😀"}', $engine->response()->getBody());
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						public function testJsonThrowOnErrorByDefault()
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						{
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							$engine = new Engine();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							$this->expectException(JsonException::class);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							$this->expectExceptionMessage('Malformed UTF-8 characters, possibly incorrectly encoded');
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							$engine->json(['key1' => 'value1', 'key2' => 'value2', 'utf8_emoji' => "\xB1\x31"]);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						public function testJsonV2OutputBuffering()
 | 
					 | 
					 | 
					 | 
						public function testJsonV2OutputBuffering()
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    {
 | 
					 | 
					 | 
					 | 
					    {
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        $engine = new Engine();
 | 
					 | 
					 | 
					 | 
					        $engine = new Engine();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							$engine->response()->v2_output_buffering = true;
 | 
					 | 
					 | 
					 | 
							$engine->response()->v2_output_buffering = true;
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        $engine->json(['key1' => 'value1', 'key2' => 'value2']);
 | 
					 | 
					 | 
					 | 
					        $engine->json(['key1' => 'value1', 'key2' => 'value2']);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        $this->expectOutputString('{"key1":"value1","key2":"value2"}');
 | 
					 | 
					 | 
					 | 
					        $this->expectOutputString('{"key1":"value1","key2":"value2"}');
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        $this->assertEquals('application/json; charset=utf-8', $engine->response()->headers()['Content-Type']);
 | 
					 | 
					 | 
					 | 
					        $this->assertEquals('application/json', $engine->response()->headers()['Content-Type']);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        $this->assertEquals(200, $engine->response()->status());
 | 
					 | 
					 | 
					 | 
					        $this->assertEquals(200, $engine->response()->status());
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -375,7 +394,7 @@ class EngineTest extends TestCase
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        $engine = new Engine();
 | 
					 | 
					 | 
					 | 
					        $engine = new Engine();
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							$this->expectOutputString('{"key1":"value1","key2":"value2"}');
 | 
					 | 
					 | 
					 | 
							$this->expectOutputString('{"key1":"value1","key2":"value2"}');
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        $engine->jsonHalt(['key1' => 'value1', 'key2' => 'value2']);
 | 
					 | 
					 | 
					 | 
					        $engine->jsonHalt(['key1' => 'value1', 'key2' => 'value2']);
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        $this->assertEquals('application/json; charset=utf-8', $engine->response()->headers()['Content-Type']);
 | 
					 | 
					 | 
					 | 
					        $this->assertEquals('application/json', $engine->response()->headers()['Content-Type']);
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        $this->assertEquals(200, $engine->response()->status());
 | 
					 | 
					 | 
					 | 
					        $this->assertEquals(200, $engine->response()->status());
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							$this->assertEquals('{"key1":"value1","key2":"value2"}', $engine->response()->getBody());
 | 
					 | 
					 | 
					 | 
							$this->assertEquals('{"key1":"value1","key2":"value2"}', $engine->response()->getBody());
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    }
 | 
					 | 
					 | 
					 | 
					    }
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
 
 |