swc_ecma_lexer/parser/
typescript.rs

1#[cfg(test)]
2mod tests {
3    use swc_ecma_ast::*;
4
5    use crate::{
6        common::parser::Parser as ParserTrait,
7        token::{BinOpToken, Token, TokenAndSpan},
8        Capturing, Lexer, Parser, Syntax,
9    };
10
11    #[test]
12    fn issue_726() {
13        crate::with_test_sess(
14            "type Test = (
15    string | number);",
16            |handler, input| {
17                let lexer = Lexer::new(
18                    Syntax::Typescript(Default::default()),
19                    EsVersion::Es2019,
20                    input,
21                    None,
22                );
23                let lexer = Capturing::new(lexer);
24
25                let mut parser = Parser::new_from(lexer);
26                parser
27                    .parse_typescript_module()
28                    .map_err(|e| e.into_diagnostic(handler).emit())?;
29                let tokens: Vec<TokenAndSpan> = parser.input_mut().iter.tokens().take();
30                let tokens = tokens.into_iter().map(|t| t.token).collect::<Vec<_>>();
31                assert_eq!(tokens.len(), 9, "Tokens: {tokens:#?}");
32                Ok(())
33            },
34        )
35        .unwrap();
36    }
37
38    #[test]
39    fn issue_751() {
40        crate::with_test_sess("t ? -(v >>> 1) : v >>> 1", |handler, input| {
41            let lexer = Lexer::new(
42                Syntax::Typescript(Default::default()),
43                EsVersion::Es2019,
44                input,
45                None,
46            );
47            let lexer = Capturing::new(lexer);
48
49            let mut parser = Parser::new_from(lexer);
50            parser
51                .parse_typescript_module()
52                .map_err(|e| e.into_diagnostic(handler).emit())?;
53            let tokens: Vec<TokenAndSpan> = parser.input_mut().iter.tokens().take();
54            let token = &tokens[10];
55            assert_eq!(
56                token.token,
57                Token::BinOp(BinOpToken::ZeroFillRShift),
58                "Token: {:#?}",
59                token.token
60            );
61            Ok(())
62        })
63        .unwrap();
64    }
65}