about summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorIgor Matuszewski <Xanewok@gmail.com>2019-06-20 09:37:20 +0200
committerIgor Matuszewski <Xanewok@gmail.com>2019-06-20 09:51:15 +0200
commit047421e69efa88f1a5f65c39b1562063ab859436 (patch)
tree08f09d12a4d56ce7680ec63c864414eb12144c21 /src/libsyntax/parse
parent5e0c6a69e075d9c7d19e28264bb8941f72ecaf4e (diff)
downloadrust-047421e69efa88f1a5f65c39b1562063ab859436.tar.gz
rust-047421e69efa88f1a5f65c39b1562063ab859436.zip
Add unit tests for unescaping raw (byte) strings
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/unescape.rs30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/libsyntax/parse/unescape.rs b/src/libsyntax/parse/unescape.rs
index 22cce67b5ee..87cc9c1c9e3 100644
--- a/src/libsyntax/parse/unescape.rs
+++ b/src/libsyntax/parse/unescape.rs
@@ -569,4 +569,34 @@ mod tests {
         check("hello \\\r\n     world", b"hello world");
         check("thread's", b"thread's")
     }
+
+    #[test]
+    fn test_unescape_raw_str() {
+        fn check(literal: &str, expected: &[(Range<usize>, Result<char, EscapeError>)]) {
+            let mut unescaped = Vec::with_capacity(literal.len());
+            unescape_raw_str(literal, &mut |range, res| unescaped.push((range, res)));
+            assert_eq!(unescaped, expected);
+        }
+
+        check("\r\n", &[(0..2, Ok('\n'))]);
+        check("\r", &[(0..1, Err(EscapeError::BareCarriageReturnInRawString))]);
+        check("\rx", &[(0..1, Err(EscapeError::BareCarriageReturnInRawString)), (1..2, Ok('x'))]);
+    }
+
+    #[test]
+    fn test_unescape_raw_byte_str() {
+        fn check(literal: &str, expected: &[(Range<usize>, Result<u8, EscapeError>)]) {
+            let mut unescaped = Vec::with_capacity(literal.len());
+            unescape_raw_byte_str(literal, &mut |range, res| unescaped.push((range, res)));
+            assert_eq!(unescaped, expected);
+        }
+
+        check("\r\n", &[(0..2, Ok(byte_from_char('\n')))]);
+        check("\r", &[(0..1, Err(EscapeError::BareCarriageReturnInRawString))]);
+        check("🦀", &[(0..4, Err(EscapeError::NonAsciiCharInByteString))]);
+        check(
+            "🦀a",
+            &[(0..4, Err(EscapeError::NonAsciiCharInByteString)), (4..5, Ok(byte_from_char('a')))],
+        );
+    }
 }