@@ -1881,4 +1881,91 @@ mod tests {
18811881 assert_eq ! ( errors, expected. 1 ) ;
18821882 assert_eq ! ( nodes, expected. 0 ) ;
18831883 }
1884+
1885+ #[ test]
1886+ fn test_error_reporter_error_ranges ( ) {
1887+ let text = "def foo():\n bar()\n " ;
1888+
1889+ let mut reporter = ErrorReporter :: new ( 100 ) ;
1890+
1891+ let unexpected_token = Arc :: new ( Token {
1892+ range : Range {
1893+ start : Position { line : 1 , column : 4 } ,
1894+ end : Position { line : 1 , column : 7 } ,
1895+ } ,
1896+ kind : TokenKind :: Ident ( "foo" . into ( ) ) ,
1897+ module_id : 1 . into ( ) ,
1898+ } ) ;
1899+ reporter. report ( ParseError :: UnexpectedToken ( Arc :: clone ( & unexpected_token) ) ) ;
1900+
1901+ let insufficient_token = Arc :: new ( Token {
1902+ range : Range {
1903+ start : Position { line : 1 , column : 4 } ,
1904+ end : Position { line : 1 , column : 7 } ,
1905+ } ,
1906+ kind : TokenKind :: Ident ( "bar" . into ( ) ) ,
1907+ module_id : 1 . into ( ) ,
1908+ } ) ;
1909+ reporter. report ( ParseError :: InsufficientTokens ( Arc :: clone (
1910+ & insufficient_token,
1911+ ) ) ) ;
1912+
1913+ reporter. report ( ParseError :: UnexpectedEOFDetected ) ;
1914+
1915+ let ranges = reporter. error_ranges ( text) ;
1916+
1917+ assert_eq ! ( ranges. len( ) , 3 ) ;
1918+
1919+ assert_eq ! ( ranges[ 0 ] . 1 . start. line, 1 ) ;
1920+ assert_eq ! ( ranges[ 0 ] . 1 . start. column, 4 ) ;
1921+ assert_eq ! ( ranges[ 0 ] . 1 . end. line, 1 ) ;
1922+ assert_eq ! ( ranges[ 0 ] . 1 . end. column, 7 ) ;
1923+
1924+ assert_eq ! ( ranges[ 1 ] . 1 . start. line, 1 ) ;
1925+ assert_eq ! ( ranges[ 1 ] . 1 . start. column, 4 ) ;
1926+ assert_eq ! ( ranges[ 1 ] . 1 . end. line, 1 ) ;
1927+ assert_eq ! ( ranges[ 1 ] . 1 . end. column, 7 ) ;
1928+
1929+ assert_eq ! ( ranges[ 2 ] . 1 . start. line, 2 ) ;
1930+ assert_eq ! ( ranges[ 2 ] . 1 . start. column, 6 ) ;
1931+ assert_eq ! ( ranges[ 2 ] . 1 . end. line, 2 ) ;
1932+ assert_eq ! ( ranges[ 2 ] . 1 . end. column, 6 ) ;
1933+ }
1934+
1935+ #[ test]
1936+ fn test_error_reporter_has_errors ( ) {
1937+ let mut reporter = ErrorReporter :: new ( 100 ) ;
1938+ assert ! ( !reporter. has_errors( ) ) ;
1939+
1940+ reporter. report ( ParseError :: UnexpectedEOFDetected ) ;
1941+ assert ! ( reporter. has_errors( ) ) ;
1942+ }
1943+
1944+ #[ test]
1945+ fn test_error_reporter_max_errors ( ) {
1946+ let mut reporter = ErrorReporter :: new ( 2 ) ;
1947+
1948+ reporter. report ( ParseError :: UnexpectedEOFDetected ) ;
1949+ reporter. report ( ParseError :: UnexpectedEOFDetected ) ;
1950+ reporter. report ( ParseError :: UnexpectedEOFDetected ) ;
1951+
1952+ assert_eq ! ( reporter. errors. len( ) , 2 ) ;
1953+ }
1954+
1955+ #[ test]
1956+ fn test_error_reporter_display ( ) {
1957+ let mut reporter = ErrorReporter :: new ( 100 ) ;
1958+
1959+ reporter. report ( ParseError :: UnexpectedEOFDetected ) ;
1960+ let token = Arc :: new ( Token {
1961+ range : Range :: default ( ) ,
1962+ kind : TokenKind :: Ident ( "foo" . into ( ) ) ,
1963+ module_id : 1 . into ( ) ,
1964+ } ) ;
1965+ reporter. report ( ParseError :: UnexpectedToken ( token) ) ;
1966+
1967+ let display = format ! ( "{}" , reporter) ;
1968+ assert ! ( display. contains( "Unexpected EOF detected" ) ) ;
1969+ assert ! ( display. contains( "Unexpected token" ) ) ;
1970+ }
18841971}
0 commit comments