]> git.lizzy.rs Git - rust.git/commitdiff
Implement ToJson for &[T], and add tests. Closes #14619
authorJorge Aparicio <japaric@linux.com>
Tue, 3 Jun 2014 15:49:26 +0000 (10:49 -0500)
committerJorge Aparicio <japaric@linux.com>
Tue, 3 Jun 2014 15:52:54 +0000 (10:52 -0500)
src/libserialize/json.rs

index 5e23c9c34511260a0c379ee1c35c7093957a7c00..82f9294fc9a3799a55c63517ca87d33c2c2f656e 100644 (file)
@@ -2227,6 +2227,10 @@ fn to_json(&self) -> Json {
     }
 }
 
+impl<'a, A:ToJson> ToJson for &'a [A] {
+    fn to_json(&self) -> Json { List(self.iter().map(|elt| elt.to_json()).collect()) }
+}
+
 impl<A:ToJson> ToJson for ~[A] {
     fn to_json(&self) -> Json { List(self.iter().map(|elt| elt.to_json()).collect()) }
 }
@@ -3334,6 +3338,56 @@ fn test_stack() {
         assert!(stack.get(1) == Key("foo"));
     }
 
+    #[test]
+    fn test_to_json() {
+        use collections::{HashMap,TreeMap};
+        use super::ToJson;
+
+        let list2 = List(vec!(Number(1.0_f64), Number(2.0_f64)));
+        let list3 = List(vec!(Number(1.0f64), Number(2.0f64), Number(3.0f64)));
+        let object = {
+            let mut tree_map = TreeMap::new();
+            tree_map.insert("a".to_string(), Number(1.0_f64));
+            tree_map.insert("b".to_string(), Number(2.0_f64));
+            Object(box tree_map)
+        };
+
+        assert_eq!(list2.to_json(), list2);
+        assert_eq!(object.to_json(), object);
+        assert_eq!(3_i.to_json(), Number(3.0_f64));
+        assert_eq!(4_i8.to_json(), Number(4.0_f64));
+        assert_eq!(5_i16.to_json(), Number(5.0_f64));
+        assert_eq!(6_i32.to_json(), Number(6.0_f64));
+        assert_eq!(7_i64.to_json(), Number(7.0_f64));
+        assert_eq!(8_u.to_json(), Number(8.0_f64));
+        assert_eq!(9_u8.to_json(), Number(9.0_f64));
+        assert_eq!(10_u16.to_json(), Number(10.0_f64));
+        assert_eq!(11_u32.to_json(), Number(11.0_f64));
+        assert_eq!(12_u64.to_json(), Number(12.0_f64));
+        assert_eq!(13.0_f32.to_json(), Number(13.0_f64));
+        assert_eq!(14.0_f64.to_json(), Number(14.0_f64));
+        assert_eq!(().to_json(), Null);
+        assert_eq!(true.to_json(), Boolean(true));
+        assert_eq!(false.to_json(), Boolean(false));
+        assert_eq!("abc".to_string().to_json(), String("abc".to_string()));
+        assert_eq!((1, 2).to_json(), list2);
+        assert_eq!((1, 2, 3).to_json(), list3);
+        assert_eq!([1, 2].to_json(), list2);
+        assert_eq!((&[1, 2, 3]).to_json(), list3);
+        assert_eq!((~[1, 2]).to_json(), list2);
+        assert_eq!(vec!(1, 2, 3).to_json(), list3);
+        let mut tree_map = TreeMap::new();
+        tree_map.insert("a".to_string(), 1);
+        tree_map.insert("b".to_string(), 2);
+        assert_eq!(tree_map.to_json(), object);
+        let mut hash_map = HashMap::new();
+        hash_map.insert("a".to_string(), 1);
+        hash_map.insert("b".to_string(), 2);
+        assert_eq!(hash_map.to_json(), object);
+        assert_eq!(Some(15).to_json(), Number(15 as f64));
+        assert_eq!(None::<int>.to_json(), Null);
+    }
+
     #[bench]
     fn bench_streaming_small(b: &mut Bencher) {
         b.iter( || {