diff options
| author | Marijn Schouten <mhkbst@gmail.com> | 2025-02-19 11:41:31 +0100 |
|---|---|---|
| committer | Marijn Schouten <mhkbst@gmail.com> | 2025-05-06 10:00:22 +0000 |
| commit | 3d4737fb5e999ef66e57753e432f7f8076bc5192 (patch) | |
| tree | 79432af4e9b453ec9e8743dc3385be11b6abdbd4 /compiler/rustc_parse_format/src/tests.rs | |
| parent | 7295b08a17d1107155acd4b552069e3705b0ab1f (diff) | |
| download | rust-3d4737fb5e999ef66e57753e432f7f8076bc5192.tar.gz rust-3d4737fb5e999ef66e57753e432f7f8076bc5192.zip | |
Remove duplicate impl of string unescape
Diffstat (limited to 'compiler/rustc_parse_format/src/tests.rs')
| -rw-r--r-- | compiler/rustc_parse_format/src/tests.rs | 159 |
1 files changed, 122 insertions, 37 deletions
diff --git a/compiler/rustc_parse_format/src/tests.rs b/compiler/rustc_parse_format/src/tests.rs index cc8a0069c4e..e6a7f24034a 100644 --- a/compiler/rustc_parse_format/src/tests.rs +++ b/compiler/rustc_parse_format/src/tests.rs @@ -41,7 +41,6 @@ fn simple() { same("}}", &[Lit("}")]); same("\\}}", &[Lit("\\"), Lit("}")]); } - #[test] fn invalid01() { musterr("{") @@ -79,23 +78,48 @@ fn invalid_precision() { } #[test] -fn format_nothing() { +fn format_empty() { same( "{}", &[NextArgument(Box::new(Argument { position: ArgumentImplicitlyIs(0), - position_span: InnerSpan { start: 2, end: 2 }, + position_span: 2..2, format: fmtdflt(), }))], ); } #[test] +fn format_tab_empty() { + let fmt_pre = r###""\t{}""###; + let fmt = "\t{}"; + let parser = Parser::new(fmt, None, Some(fmt_pre.into()), false, ParseMode::Format); + assert_eq!( + parser.collect::<Vec<Piece<'static>>>(), + &[ + Lit("\t"), + NextArgument(Box::new(Argument { + position: ArgumentImplicitlyIs(0), + position_span: 4..4, + format: fmtdflt(), + })) + ], + ); +} +#[test] +fn format_open_brace_tab() { + let fmt_pre = r###""{\t""###; + let fmt = "{\t"; + let mut parser = Parser::new(fmt, None, Some(fmt_pre.into()), false, ParseMode::Format); + let _ = parser.by_ref().collect::<Vec<Piece<'static>>>(); + assert_eq!(parser.errors[0].span, 4..4); +} +#[test] fn format_position() { same( "{3}", &[NextArgument(Box::new(Argument { position: ArgumentIs(3), - position_span: InnerSpan { start: 2, end: 3 }, + position_span: 2..3, format: fmtdflt(), }))], ); @@ -106,7 +130,7 @@ fn format_position_nothing_else() { "{3:}", &[NextArgument(Box::new(Argument { position: ArgumentIs(3), - position_span: InnerSpan { start: 2, end: 3 }, + position_span: 2..3, format: fmtdflt(), }))], ); @@ -117,18 +141,54 @@ fn format_named() { "{name}", &[NextArgument(Box::new(Argument { position: ArgumentNamed("name"), - position_span: InnerSpan { start: 2, end: 6 }, + position_span: 2..6, format: fmtdflt(), }))], ) } #[test] +fn format_named_space_nothing() { + same( + "{name} {}", + &[ + NextArgument(Box::new(Argument { + position: ArgumentNamed("name"), + position_span: 2..6, + format: fmtdflt(), + })), + Lit(" "), + NextArgument(Box::new(Argument { + position: ArgumentImplicitlyIs(0), + position_span: 9..9, + format: fmtdflt(), + })), + ], + ) +} +#[test] +fn format_raw() { + let snippet = r###"r#"assertion `left {op} right` failed"#"###.into(); + let source = r#"assertion `left {op} right` failed"#; + + let parser = Parser::new(source, Some(1), Some(snippet), true, ParseMode::Format); + let expected = &[ + Lit("assertion `left "), + NextArgument(Box::new(Argument { + position: ArgumentNamed("op"), + position_span: 20..22, + format: fmtdflt(), + })), + Lit(" right` failed"), + ]; + assert_eq!(parser.collect::<Vec<Piece<'static>>>(), expected); +} +#[test] fn format_type() { same( "{3:x}", &[NextArgument(Box::new(Argument { position: ArgumentIs(3), - position_span: InnerSpan { start: 2, end: 3 }, + position_span: 2..3, format: FormatSpec { fill: None, fill_span: None, @@ -153,7 +213,7 @@ fn format_align_fill() { "{3:>}", &[NextArgument(Box::new(Argument { position: ArgumentIs(3), - position_span: InnerSpan { start: 2, end: 3 }, + position_span: 2..3, format: FormatSpec { fill: None, fill_span: None, @@ -175,10 +235,10 @@ fn format_align_fill() { "{3:0<}", &[NextArgument(Box::new(Argument { position: ArgumentIs(3), - position_span: InnerSpan { start: 2, end: 3 }, + position_span: 2..3, format: FormatSpec { fill: Some('0'), - fill_span: Some(InnerSpan::new(4, 5)), + fill_span: Some(4..5), align: AlignLeft, sign: None, alternate: false, @@ -197,10 +257,10 @@ fn format_align_fill() { "{3:*<abcd}", &[NextArgument(Box::new(Argument { position: ArgumentIs(3), - position_span: InnerSpan { start: 2, end: 3 }, + position_span: 2..3, format: FormatSpec { fill: Some('*'), - fill_span: Some(InnerSpan::new(4, 5)), + fill_span: Some(4..5), align: AlignLeft, sign: None, alternate: false, @@ -211,7 +271,7 @@ fn format_align_fill() { precision_span: None, width_span: None, ty: "abcd", - ty_span: Some(InnerSpan::new(6, 10)), + ty_span: Some(6..10), }, }))], ); @@ -222,7 +282,7 @@ fn format_counts() { "{:10x}", &[NextArgument(Box::new(Argument { position: ArgumentImplicitlyIs(0), - position_span: InnerSpan { start: 2, end: 2 }, + position_span: 2..2, format: FormatSpec { fill: None, fill_span: None, @@ -234,7 +294,7 @@ fn format_counts() { precision: CountImplied, precision_span: None, width: CountIs(10), - width_span: Some(InnerSpan { start: 3, end: 5 }), + width_span: Some(3..5), ty: "x", ty_span: None, }, @@ -244,7 +304,7 @@ fn format_counts() { "{:10$.10x}", &[NextArgument(Box::new(Argument { position: ArgumentImplicitlyIs(0), - position_span: InnerSpan { start: 2, end: 2 }, + position_span: 2..2, format: FormatSpec { fill: None, fill_span: None, @@ -254,9 +314,9 @@ fn format_counts() { zero_pad: false, debug_hex: None, precision: CountIs(10), - precision_span: Some(InnerSpan { start: 6, end: 9 }), + precision_span: Some(6..9), width: CountIsParam(10), - width_span: Some(InnerSpan { start: 3, end: 6 }), + width_span: Some(3..6), ty: "x", ty_span: None, }, @@ -266,7 +326,7 @@ fn format_counts() { "{1:0$.10x}", &[NextArgument(Box::new(Argument { position: ArgumentIs(1), - position_span: InnerSpan { start: 2, end: 3 }, + position_span: 2..3, format: FormatSpec { fill: None, fill_span: None, @@ -276,9 +336,9 @@ fn format_counts() { zero_pad: false, debug_hex: None, precision: CountIs(10), - precision_span: Some(InnerSpan { start: 6, end: 9 }), + precision_span: Some(6..9), width: CountIsParam(0), - width_span: Some(InnerSpan { start: 4, end: 6 }), + width_span: Some(4..6), ty: "x", ty_span: None, }, @@ -288,7 +348,7 @@ fn format_counts() { "{:.*x}", &[NextArgument(Box::new(Argument { position: ArgumentImplicitlyIs(1), - position_span: InnerSpan { start: 2, end: 2 }, + position_span: 2..2, format: FormatSpec { fill: None, fill_span: None, @@ -298,7 +358,7 @@ fn format_counts() { zero_pad: false, debug_hex: None, precision: CountIsStar(0), - precision_span: Some(InnerSpan { start: 3, end: 5 }), + precision_span: Some(3..5), width: CountImplied, width_span: None, ty: "x", @@ -310,7 +370,7 @@ fn format_counts() { "{:.10$x}", &[NextArgument(Box::new(Argument { position: ArgumentImplicitlyIs(0), - position_span: InnerSpan { start: 2, end: 2 }, + position_span: 2..2, format: FormatSpec { fill: None, fill_span: None, @@ -321,7 +381,7 @@ fn format_counts() { debug_hex: None, precision: CountIsParam(10), width: CountImplied, - precision_span: Some(InnerSpan::new(3, 7)), + precision_span: Some(3..7), width_span: None, ty: "x", ty_span: None, @@ -332,7 +392,7 @@ fn format_counts() { "{:a$.b$?}", &[NextArgument(Box::new(Argument { position: ArgumentImplicitlyIs(0), - position_span: InnerSpan { start: 2, end: 2 }, + position_span: 2..2, format: FormatSpec { fill: None, fill_span: None, @@ -341,10 +401,10 @@ fn format_counts() { alternate: false, zero_pad: false, debug_hex: None, - precision: CountIsName("b", InnerSpan { start: 6, end: 7 }), - precision_span: Some(InnerSpan { start: 5, end: 8 }), - width: CountIsName("a", InnerSpan { start: 3, end: 4 }), - width_span: Some(InnerSpan { start: 3, end: 5 }), + precision: CountIsName("b", 6..7), + precision_span: Some(5..8), + width: CountIsName("a", 3..4), + width_span: Some(3..5), ty: "?", ty_span: None, }, @@ -354,7 +414,7 @@ fn format_counts() { "{:.4}", &[NextArgument(Box::new(Argument { position: ArgumentImplicitlyIs(0), - position_span: InnerSpan { start: 2, end: 2 }, + position_span: 2..2, format: FormatSpec { fill: None, fill_span: None, @@ -364,7 +424,7 @@ fn format_counts() { zero_pad: false, debug_hex: None, precision: CountIs(4), - precision_span: Some(InnerSpan { start: 3, end: 5 }), + precision_span: Some(3..5), width: CountImplied, width_span: None, ty: "", @@ -379,7 +439,7 @@ fn format_flags() { "{:-}", &[NextArgument(Box::new(Argument { position: ArgumentImplicitlyIs(0), - position_span: InnerSpan { start: 2, end: 2 }, + position_span: 2..2, format: FormatSpec { fill: None, fill_span: None, @@ -401,7 +461,7 @@ fn format_flags() { "{:+#}", &[NextArgument(Box::new(Argument { position: ArgumentImplicitlyIs(0), - position_span: InnerSpan { start: 2, end: 2 }, + position_span: 2..2, format: FormatSpec { fill: None, fill_span: None, @@ -428,7 +488,7 @@ fn format_mixture() { Lit("abcd "), NextArgument(Box::new(Argument { position: ArgumentIs(3), - position_span: InnerSpan { start: 7, end: 8 }, + position_span: 7..8, format: FormatSpec { fill: None, fill_span: None, @@ -455,7 +515,7 @@ fn format_whitespace() { "{ }", &[NextArgument(Box::new(Argument { position: ArgumentImplicitlyIs(0), - position_span: InnerSpan { start: 2, end: 3 }, + position_span: 2..3, format: fmtdflt(), }))], ); @@ -463,8 +523,33 @@ fn format_whitespace() { "{ }", &[NextArgument(Box::new(Argument { position: ArgumentImplicitlyIs(0), - position_span: InnerSpan { start: 2, end: 4 }, + position_span: 2..4, format: fmtdflt(), }))], ); } +#[test] +fn asm_linespans() { + let asm_pre = r###"r" + .intel_syntax noprefix + nop""###; + let asm = r" + .intel_syntax noprefix + nop"; + let mut parser = Parser::new(asm, Some(0), Some(asm_pre.into()), false, ParseMode::InlineAsm); + assert!(parser.is_source_literal); + assert_eq!( + parser.by_ref().collect::<Vec<Piece<'static>>>(), + &[Lit("\n .intel_syntax noprefix\n nop")] + ); + assert_eq!(parser.line_spans, &[2..2, 11..33, 42..45]); +} +#[test] +fn asm_concat() { + let asm_pre = r###"concat!("invalid", "_", "instruction")"###; + let asm = "invalid_instruction"; + let mut parser = Parser::new(asm, None, Some(asm_pre.into()), false, ParseMode::InlineAsm); + assert!(!parser.is_source_literal); + assert_eq!(parser.by_ref().collect::<Vec<Piece<'static>>>(), &[Lit(asm)]); + assert_eq!(parser.line_spans, &[]); +} |
