@@ -1173,6 +1173,22 @@ mod tests {
11731173 Frog(~str, int)
11741174 }
11751175
1176+ #[auto_encode]
1177+ #[auto_decode]
1178+ #[deriving(Eq)]
1179+ struct Inner {
1180+ a: (),
1181+ b: uint,
1182+ c: ~[~str],
1183+ }
1184+
1185+ #[auto_encode]
1186+ #[auto_decode]
1187+ #[deriving(Eq)]
1188+ struct Outer {
1189+ inner: ~[Inner],
1190+ }
1191+
11761192 fn mk_object(items: &[(~str, Json)]) -> Json {
11771193 let mut d = ~LinearMap::new();
11781194
@@ -1441,6 +1457,18 @@ mod tests {
14411457 assert_eq!(from_str(~" false "), Ok(Boolean(false)));
14421458 }
14431459
1460+ #[test]
1461+ fn test_decode_identifiers() {
1462+ let v: () = Decodable::decode(&Decoder(from_str(~" null").unwrap()));
1463+ assert_eq!(v, ());
1464+
1465+ let v: bool = Decodable::decode(&Decoder(from_str(~" true ").unwrap()));
1466+ assert_eq!(v, true);
1467+
1468+ let v: bool = Decodable::decode(&Decoder(from_str(~" false ").unwrap()));
1469+ assert_eq!(v, false);
1470+ }
1471+
14441472 #[test]
14451473 fn test_read_number() {
14461474 assert_eq!(from_str(~" +"),
@@ -1469,6 +1497,30 @@ mod tests {
14691497 assert_eq!(from_str(~" 3 "), Ok(Number(3f)));
14701498 }
14711499
1500+ #[test]
1501+ fn test_decode_numbers() {
1502+ let v: float = Decodable::decode(&Decoder(from_str(~" 3 ").unwrap()));
1503+ assert_eq!(v, 3f);
1504+
1505+ let v: float = Decodable::decode(&Decoder(from_str(~" 3.1 ").unwrap()));
1506+ assert_eq!(v, 3.1f);
1507+
1508+ let v: float = Decodable::decode(&Decoder(from_str(~" -1.2 ").unwrap()));
1509+ assert_eq!(v, -1.2f);
1510+
1511+ let v: float = Decodable::decode(&Decoder(from_str(~" 0.4 ").unwrap()));
1512+ assert_eq!(v, 0.4f);
1513+
1514+ let v: float = Decodable::decode(&Decoder(from_str(~" 0.4e5 ").unwrap()));
1515+ assert_eq!(v, 0.4e5f);
1516+
1517+ let v: float = Decodable::decode(&Decoder(from_str(~" 0.4e15 ").unwrap()));
1518+ assert_eq!(v, 0.4e15f);
1519+
1520+ let v: float = Decodable::decode(&Decoder(from_str(~" 0.4e-01 ").unwrap()));
1521+ assert_eq!(v, 0.4e-01f);
1522+ }
1523+
14721524 #[test]
14731525 fn test_read_str() {
14741526 assert_eq!(from_str(~"\" " ) ,
@@ -1486,12 +1538,38 @@ mod tests {
14861538 assert_eq!( from_str( ~"\" \\ r\" ") , Ok ( String ( ~"\r ") ) ) ;
14871539 assert_eq!( from_str( ~"\" \\ t\" ") , Ok ( String ( ~"\t ") ) ) ;
14881540 assert_eq!( from_str( ~" \"foo\" "), Ok(String(~" foo")));
1541+ assert_eq!(from_str(~"\" \\ u12ab\" " ) , Ok ( String ( ~"\u12ab ") ) ) ;
1542+ assert_eq!( from_str( ~"\" \\ uAB12\" ") , Ok ( String ( ~"\uAB12 ") ) ) ;
14891543 }
14901544
14911545 #[ test]
1492- fn test_unicode_hex_escapes_in_str() {
1493- assert_eq!(from_str(~"\" \\ u12ab\" " ) , Ok ( String ( ~"\u12ab ") ) ) ;
1494- assert_eq!( from_str( ~"\" \\ uAB12\" ") , Ok ( String ( ~"\uAB12 ") ) ) ;
1546+ fn test_decode_str( ) {
1547+ let v: ~str = Decodable :: decode( & Decoder ( from_str( ~"\" \" ") . unwrap( ) ) ) ;
1548+ assert_eq!( v, ~"") ;
1549+
1550+ let v: ~str = Decodable :: decode( & Decoder ( from_str( ~"\" foo\" ") . unwrap( ) ) ) ;
1551+ assert_eq!( v, ~"foo");
1552+
1553+ let v: ~str = Decodable::decode(&Decoder(from_str(~"\" \\ \" \" " ) . unwrap( ) ) ) ;
1554+ assert_eq!( v, ~"\" ") ;
1555+
1556+ let v: ~str = Decodable :: decode( & Decoder ( from_str( ~"\" \\ b\" ") . unwrap( ) ) ) ;
1557+ assert_eq!( v, ~"\x08 ") ;
1558+
1559+ let v: ~str = Decodable :: decode( & Decoder ( from_str( ~"\" \\ n\" ") . unwrap( ) ) ) ;
1560+ assert_eq!( v, ~"\n ") ;
1561+
1562+ let v: ~str = Decodable :: decode( & Decoder ( from_str( ~"\" \\ r\" ") . unwrap( ) ) ) ;
1563+ assert_eq!( v, ~"\r ") ;
1564+
1565+ let v: ~str = Decodable :: decode( & Decoder ( from_str( ~"\" \\ t\" ") . unwrap( ) ) ) ;
1566+ assert_eq!( v, ~"\t ") ;
1567+
1568+ let v: ~str = Decodable :: decode( & Decoder ( from_str( ~"\" \\ u12ab\" ") . unwrap( ) ) ) ;
1569+ assert_eq!( v, ~"\u12ab ") ;
1570+
1571+ let v: ~str = Decodable :: decode( & Decoder ( from_str( ~"\" \\ uAB12\" ") . unwrap( ) ) ) ;
1572+ assert_eq!( v, ~"\uAB12 ") ;
14951573 }
14961574
14971575 #[ test]
@@ -1520,6 +1598,28 @@ mod tests {
15201598 Ok(List(~[Number(2f), List(~[Number(4f), Number(1f)])])));
15211599 }
15221600
1601+ #[test]
1602+ fn test_decode_list() {
1603+ let v: ~[()] = Decodable::decode(&Decoder(from_str(~" [ ] ").unwrap()));
1604+ assert_eq!(v, ~[]);
1605+
1606+ let v: ~[()] = Decodable::decode(&Decoder(from_str(~" [ null] ").unwrap()));
1607+ assert_eq!(v, ~[()]);
1608+
1609+
1610+ let v: ~[bool] = Decodable::decode(&Decoder(from_str(~" [ true ] ").unwrap()));
1611+ assert_eq!(v, ~[true]);
1612+
1613+ let v: ~[bool] = Decodable::decode(&Decoder(from_str(~" [ true ] ").unwrap()));
1614+ assert_eq!(v, ~[true]);
1615+
1616+ let v: ~[int] = Decodable::decode(&Decoder(from_str(~" [ 3 , 1 ] ").unwrap()));
1617+ assert_eq!(v, ~[3, 1]);
1618+
1619+ let v: ~[~[uint]] = Decodable::decode(&Decoder(from_str(~" [ [ 3 ] , [ 1 , 2 ] ] ").unwrap()));
1620+ assert_eq!(v, ~[~[3], ~[1, 2]]);
1621+ }
1622+
15231623 #[test]
15241624 fn test_read_object() {
15251625 assert_eq!(from_str(~" { "),
@@ -1612,35 +1712,47 @@ mod tests {
16121712 }
16131713
16141714 #[test]
1615- fn test_read_none() {
1715+ fn test_decode_struct() {
1716+ let s = ~" {
1717+ \"inner\" : [
1718+ { \"a\" : null, \"b\" : 2 , \"c\" : [ \" abc\" , \"xyz\" ] }
1719+ ]
1720+ } ";
1721+ let v: Outer = Decodable::decode(&Decoder(from_str(s).unwrap()));
1722+ assert_eq!(
1723+ v,
1724+ Outer {
1725+ inner: ~[
1726+ Inner { a: (), b: 2, c: ~[~" abc", ~" xyz"] }
1727+ ]
1728+ }
1729+ );
1730+ }
1731+
1732+ #[test]
1733+ fn test_decode_option() {
16161734 let decoder = Decoder(from_str(~" null").unwrap());
16171735 let value: Option<~str> = Decodable::decode(&decoder);
16181736 assert_eq!(value, None);
1619- }
16201737
1621- #[test]
1622- fn test_read_some() {
16231738 let decoder = Decoder(from_str(~"\" jodhpurs\" " ) . unwrap( ) ) ;
16241739 let value: Option <~str > = Decodable :: decode( & decoder) ;
16251740 assert_eq!( value, Some ( ~"jodhpurs"));
16261741 }
16271742
16281743 #[test]
1629- fn test_read_enum_no_args () {
1744+ fn test_decode_enum () {
16301745 let decoder = Decoder(from_str(~"\" Dog\" " ) . unwrap( ) ) ;
16311746 let value: Animal = Decodable :: decode( & decoder) ;
16321747 assert_eq!( value, Dog ) ;
1633- }
16341748
1635- #[ test]
1636- fn test_read_enum_multiple_args( ) {
16371749 let decoder = Decoder ( from_str( ~"[ \" Frog \" , \" Henry \" , 349 ] ").unwrap());
16381750 let value: Animal = Decodable::decode(&decoder);
16391751 assert_eq!(value, Frog(~" Henry ", 349));
16401752 }
16411753
16421754 #[test]
1643- fn test_read_map () {
1755+ fn test_decode_map () {
16441756 let s = ~" { \" a\" : \"Dog \" , \"b\" : [ \" Frog \" , \"Henry \" , 349 ] } ";
16451757 let decoder = Decoder(from_str(s).unwrap());
16461758 let mut map: LinearMap<~str, Animal> = Decodable::decode(&decoder);
0 commit comments