From b2bfadb52c51b0f73f0b425fb6a486bb644e8ebb Mon Sep 17 00:00:00 2001 From: vlakreeh Date: Tue, 29 Sep 2020 19:05:17 -0400 Subject: Add tests for convert integer literal assist --- .../src/handlers/convert_integer_literal.rs | 574 ++++++++++++++++++++- 1 file changed, 570 insertions(+), 4 deletions(-) (limited to 'crates') diff --git a/crates/assists/src/handlers/convert_integer_literal.rs b/crates/assists/src/handlers/convert_integer_literal.rs index 889f5d030..ea35e833a 100644 --- a/crates/assists/src/handlers/convert_integer_literal.rs +++ b/crates/assists/src/handlers/convert_integer_literal.rs @@ -86,10 +86,7 @@ impl IntegerLiteralBase { }; // Checks that all characters after the base prefix are all valid digits for that base. - if literal_text[base.prefix_len()..] - .chars() - .all(|c| c.is_digit(base.base())) - { + if literal_text[base.prefix_len()..].chars().all(|c| c.is_digit(base.base())) { Some(base) } else { None @@ -133,3 +130,572 @@ impl IntegerLiteralBase { ] } } + +#[cfg(test)] +mod tests { + + use super::*; + use crate::tests::{check_assist_by_label, check_assist_target}; + + #[test] + fn binary_target() { + check_assist_target(convert_integer_literal, "const _: i32 = 0b1010<|>;", "0b1010"); + } + + #[test] + fn octal_target() { + check_assist_target(convert_integer_literal, "const _: i32 = 0o12<|>;", "0o12"); + } + + #[test] + fn decimal_target() { + check_assist_target(convert_integer_literal, "const _: i32 = 10<|>;", "10"); + } + + #[test] + fn hexadecimal_target() { + check_assist_target(convert_integer_literal, "const _: i32 = 0xA<|>;", "0xA"); + } + + #[test] + fn binary_target_with_underscores() { + check_assist_target(convert_integer_literal, "const _: i32 = 0b10_10<|>;", "0b10_10"); + } + + #[test] + fn octal_target_with_underscores() { + check_assist_target(convert_integer_literal, "const _: i32 = 0o1_2<|>;", "0o1_2"); + } + + #[test] + fn decimal_target_with_underscores() { + check_assist_target(convert_integer_literal, "const _: i32 = 1_0<|>;", "1_0"); + } + + #[test] + fn hexadecimal_target_with_underscores() { + check_assist_target(convert_integer_literal, "const _: i32 = 0x_A<|>;", "0x_A"); + } + + #[test] + fn convert_decimal_integer() { + let before = "const _: i32 = 1000<|>;"; + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0b1111101000;", + "Convert 1000 to 0b1111101000", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0o1750;", + "Convert 1000 to 0o1750", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0x3E8;", + "Convert 1000 to 0x3E8", + ); + } + + // Decimal numbers under 3 digits have a special case where they return early because we can't fit a + // other base's prefix, so we have a separate test for that. + #[test] + fn convert_small_decimal_integer() { + let before = "const _: i32 = 10<|>;"; + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0b1010;", + "Convert 10 to 0b1010", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0o12;", + "Convert 10 to 0o12", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0xA;", + "Convert 10 to 0xA", + ); + } + + #[test] + fn convert_hexadecimal_integer() { + let before = "const _: i32 = 0xFF<|>;"; + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0b11111111;", + "Convert 0xFF to 0b11111111", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0o377;", + "Convert 0xFF to 0o377", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 255;", + "Convert 0xFF to 255", + ); + } + + #[test] + fn convert_binary_integer() { + let before = "const _: i32 = 0b11111111<|>;"; + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0o377;", + "Convert 0b11111111 to 0o377", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 255;", + "Convert 0b11111111 to 255", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0xFF;", + "Convert 0b11111111 to 0xFF", + ); + } + + #[test] + fn convert_octal_integer() { + let before = "const _: i32 = 0o377<|>;"; + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0b11111111;", + "Convert 0o377 to 0b11111111", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 255;", + "Convert 0o377 to 255", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0xFF;", + "Convert 0o377 to 0xFF", + ); + } + + #[test] + fn convert_decimal_integer_with_underscores() { + let before = "const _: i32 = 1_00_0<|>;"; + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0b1111101000;", + "Convert 1000 to 0b1111101000", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0o1750;", + "Convert 1000 to 0o1750", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0x3E8;", + "Convert 1000 to 0x3E8", + ); + } + + #[test] + fn convert_small_decimal_integer_with_underscores() { + let before = "const _: i32 = 1_0<|>;"; + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0b1010;", + "Convert 10 to 0b1010", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0o12;", + "Convert 10 to 0o12", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0xA;", + "Convert 10 to 0xA", + ); + } + + #[test] + fn convert_hexadecimal_integer_with_underscores() { + let before = "const _: i32 = 0x_F_F<|>;"; + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0b11111111;", + "Convert 0xFF to 0b11111111", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0o377;", + "Convert 0xFF to 0o377", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 255;", + "Convert 0xFF to 255", + ); + } + + #[test] + fn convert_binary_integer_with_underscores() { + let before = "const _: i32 = 0b1111_1111<|>;"; + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0o377;", + "Convert 0b11111111 to 0o377", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 255;", + "Convert 0b11111111 to 255", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0xFF;", + "Convert 0b11111111 to 0xFF", + ); + } + + #[test] + fn convert_octal_integer_with_underscores() { + let before = "const _: i32 = 0o3_77<|>;"; + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0b11111111;", + "Convert 0o377 to 0b11111111", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 255;", + "Convert 0o377 to 255", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0xFF;", + "Convert 0o377 to 0xFF", + ); + } + + #[test] + fn convert_decimal_integer_with_suffix() { + let before = "const _: i32 = 1000i32<|>;"; + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0b1111101000i32;", + "Convert 1000 (i32) to 0b1111101000", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0o1750i32;", + "Convert 1000 (i32) to 0o1750", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0x3E8i32;", + "Convert 1000 (i32) to 0x3E8", + ); + } + + #[test] + fn convert_small_decimal_integer_with_suffix() { + let before = "const _: i32 = 10i32<|>;"; + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0b1010i32;", + "Convert 10 (i32) to 0b1010", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0o12i32;", + "Convert 10 (i32) to 0o12", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0xAi32;", + "Convert 10 (i32) to 0xA", + ); + } + + #[test] + fn convert_hexadecimal_integer_with_suffix() { + let before = "const _: i32 = 0xFFi32<|>;"; + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0b11111111i32;", + "Convert 0xFF (i32) to 0b11111111", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0o377i32;", + "Convert 0xFF (i32) to 0o377", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 255i32;", + "Convert 0xFF (i32) to 255", + ); + } + + #[test] + fn convert_binary_integer_with_suffix() { + let before = "const _: i32 = 0b11111111i32<|>;"; + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0o377i32;", + "Convert 0b11111111 (i32) to 0o377", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 255i32;", + "Convert 0b11111111 (i32) to 255", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0xFFi32;", + "Convert 0b11111111 (i32) to 0xFF", + ); + } + + #[test] + fn convert_octal_integer_with_suffix() { + let before = "const _: i32 = 0o377i32<|>;"; + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0b11111111i32;", + "Convert 0o377 (i32) to 0b11111111", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 255i32;", + "Convert 0o377 (i32) to 255", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0xFFi32;", + "Convert 0o377 (i32) to 0xFF", + ); + } + + #[test] + fn convert_decimal_integer_with_underscores_and_suffix() { + let before = "const _: i32 = 1_00_0i32<|>;"; + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0b1111101000i32;", + "Convert 1000 (i32) to 0b1111101000", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0o1750i32;", + "Convert 1000 (i32) to 0o1750", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0x3E8i32;", + "Convert 1000 (i32) to 0x3E8", + ); + } + + #[test] + fn convert_small_decimal_integer_with_underscores_and_suffix() { + let before = "const _: i32 = 1_0i32<|>;"; + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0b1010i32;", + "Convert 10 (i32) to 0b1010", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0o12i32;", + "Convert 10 (i32) to 0o12", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0xAi32;", + "Convert 10 (i32) to 0xA", + ); + } + + #[test] + fn convert_hexadecimal_integer_with_underscores_and_suffix() { + let before = "const _: i32 = 0x_F_Fi32<|>;"; + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0b11111111i32;", + "Convert 0xFF (i32) to 0b11111111", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0o377i32;", + "Convert 0xFF (i32) to 0o377", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 255i32;", + "Convert 0xFF (i32) to 255", + ); + } + + #[test] + fn convert_binary_integer_with_underscores_and_suffix() { + let before = "const _: i32 = 0b1111_1111i32<|>;"; + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0o377i32;", + "Convert 0b11111111 (i32) to 0o377", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 255i32;", + "Convert 0b11111111 (i32) to 255", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0xFFi32;", + "Convert 0b11111111 (i32) to 0xFF", + ); + } + + #[test] + fn convert_octal_integer_with_underscores_and_suffix() { + let before = "const _: i32 = 0o3_77i32<|>;"; + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0b11111111i32;", + "Convert 0o377 (i32) to 0b11111111", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 255i32;", + "Convert 0o377 (i32) to 255", + ); + + check_assist_by_label( + convert_integer_literal, + before, + "const _: i32 = 0xFFi32;", + "Convert 0o377 (i32) to 0xFF", + ); + } +} -- cgit v1.2.3