getDiagnostics(); } /** * Assertions about a diagnostic. * * @param Diagnostic|null $diagnostic * @param int $message * @param string $severity * @param Range $range */ private function assertDiagnostic($diagnostic, $message, $severity, $range) { $this->assertInstanceOf(Diagnostic::class, $diagnostic); $this->assertEquals($message, $diagnostic->message); $this->assertEquals($severity, $diagnostic->severity); $this->assertEquals($range, $diagnostic->range); } public function testThisInStaticMethodProducesError() { $diagnostics = $this->collectDiagnostics( __DIR__ . '/../../fixtures/diagnostics/errors/this_in_static_method.php' ); $this->assertCount(1, $diagnostics); $this->assertDiagnostic( $diagnostics[0], '$this can not be used in static methods.', DiagnosticSeverity::ERROR, new Range( new Position(6, 15), new Position(6, 20) ) ); } public function testThisInFunctionProducesError() { $diagnostics = $this->collectDiagnostics( __DIR__ . '/../../fixtures/diagnostics/errors/this_in_function.php' ); $this->assertCount(1, $diagnostics); $this->assertDiagnostic( $diagnostics[0], '$this can only be used in an object context.', DiagnosticSeverity::ERROR, new Range( new Position(4, 11), new Position(4, 16) ) ); } public function testThisInRoot() { $diagnostics = $this->collectDiagnostics( __DIR__ . '/../../fixtures/diagnostics/errors/this_in_root.php' ); $this->assertCount(1, $diagnostics); $this->assertDiagnostic( $diagnostics[0], '$this can only be used in an object context.', DiagnosticSeverity::ERROR, new Range( new Position(2, 5), new Position(2, 10) ) ); } public function testThisInMethodProducesNoError() { $diagnostics = $this->collectDiagnostics( __DIR__ . '/../../fixtures/diagnostics/baselines/this_in_method.php' ); $this->assertCount(0, $diagnostics); } }