Fix ast::String::value not properly escaping in some cases
This commit is contained in:
parent
557c1e36dd
commit
6c2ce55150
@ -173,7 +173,7 @@ pub fn value(&self) -> Option<Cow<'_, str>> {
|
||||
buf.capacity() == 0,
|
||||
) {
|
||||
(Ok(c), false) => buf.push(c),
|
||||
(Ok(c), true) if Some(c) == text_iter.next() => (),
|
||||
(Ok(c), true) if char_range.len() == 1 && Some(c) == text_iter.next() => (),
|
||||
(Ok(c), true) => {
|
||||
buf.reserve_exact(text.len());
|
||||
buf.push_str(&text[..char_range.start]);
|
||||
@ -659,7 +659,7 @@ const fn prefix_len(&self) -> usize {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::ast::{make, FloatNumber, IntNumber};
|
||||
use crate::ast::{self, make, FloatNumber, IntNumber};
|
||||
|
||||
fn check_float_suffix<'a>(lit: &str, expected: impl Into<Option<&'a str>>) {
|
||||
assert_eq!(FloatNumber { syntax: make::tokens::literal(lit) }.suffix(), expected.into());
|
||||
@ -692,4 +692,21 @@ fn test_int_number_suffix() {
|
||||
check_int_suffix("0o11u32", "u32");
|
||||
check_int_suffix("0xffu32", "u32");
|
||||
}
|
||||
|
||||
fn check_string_value<'a>(lit: &str, expected: impl Into<Option<&'a str>>) {
|
||||
assert_eq!(
|
||||
ast::String { syntax: make::tokens::literal(&format!("\"{}\"", lit)) }
|
||||
.value()
|
||||
.as_deref(),
|
||||
expected.into()
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_string_escape() {
|
||||
check_string_value(r"foobar", "foobar");
|
||||
check_string_value(r"\foobar", None);
|
||||
check_string_value(r"\nfoobar", "\nfoobar");
|
||||
check_string_value(r"C:\\Windows\\System32\\", "C:\\Windows\\System32\\");
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user