diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2014-12-17 08:33:54 -0800 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2014-12-17 11:50:24 -0800 |
| commit | 6089699411d4644981808c20661fa559646293c8 (patch) | |
| tree | 17c1c5e1b2db7519664b88bd445740c751dc7114 /src/libserialize | |
| parent | fc1b4379eb63363248765a20cd96b38e923236c5 (diff) | |
| parent | 577f742d7a8a593e8134056259f195a7c897eeb9 (diff) | |
| download | rust-6089699411d4644981808c20661fa559646293c8.tar.gz rust-6089699411d4644981808c20661fa559646293c8.zip | |
rollup merge of #19764: lifthrasiir/that-stray-nul
Fixes #19719.
Diffstat (limited to 'src/libserialize')
| -rw-r--r-- | src/libserialize/json.rs | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/src/libserialize/json.rs b/src/libserialize/json.rs index d17f293b443..bd634a58382 100644 --- a/src/libserialize/json.rs +++ b/src/libserialize/json.rs @@ -367,8 +367,8 @@ fn escape_str(writer: &mut io::Writer, v: &str) -> Result<(), io::IoError> { fn escape_char(writer: &mut io::Writer, v: char) -> Result<(), io::IoError> { let mut buf = [0, .. 4]; - v.encode_utf8(&mut buf); - escape_bytes(writer, &mut buf) + let len = v.encode_utf8(&mut buf).unwrap(); + escape_bytes(writer, buf[mut ..len]) } fn spaces(wr: &mut io::Writer, mut n: uint) -> Result<(), io::IoError> { @@ -2729,37 +2729,39 @@ mod tests { ); } + macro_rules! check_encoder_for_simple( + ($value:expr, $expected:expr) => ({ + let s = with_str_writer(|writer| { + let mut encoder = Encoder::new(writer); + $value.encode(&mut encoder).unwrap(); + }); + assert_eq!(s, $expected); + + let s = with_str_writer(|writer| { + let mut encoder = PrettyEncoder::new(writer); + $value.encode(&mut encoder).unwrap(); + }); + assert_eq!(s, $expected); + }) + ) + #[test] fn test_write_some() { - let value = Some("jodhpurs".into_string()); - let s = with_str_writer(|writer| { - let mut encoder = Encoder::new(writer); - value.encode(&mut encoder).unwrap(); - }); - assert_eq!(s, "\"jodhpurs\""); - - let value = Some("jodhpurs".into_string()); - let s = with_str_writer(|writer| { - let mut encoder = PrettyEncoder::new(writer); - value.encode(&mut encoder).unwrap(); - }); - assert_eq!(s, "\"jodhpurs\""); + check_encoder_for_simple!(Some("jodhpurs".to_string()), "\"jodhpurs\""); } #[test] fn test_write_none() { - let value: Option<string::String> = None; - let s = with_str_writer(|writer| { - let mut encoder = Encoder::new(writer); - value.encode(&mut encoder).unwrap(); - }); - assert_eq!(s, "null"); + check_encoder_for_simple!(None::<string::String>, "null"); + } - let s = with_str_writer(|writer| { - let mut encoder = Encoder::new(writer); - value.encode(&mut encoder).unwrap(); - }); - assert_eq!(s, "null"); + #[test] + fn test_write_char() { + check_encoder_for_simple!('a', "\"a\""); + check_encoder_for_simple!('\t', "\"\\t\""); + check_encoder_for_simple!('\u00a0', "\"\u00a0\""); + check_encoder_for_simple!('\uabcd', "\"\uabcd\""); + check_encoder_for_simple!('\U0010ffff', "\"\U0010ffff\""); } #[test] |
