@@ -1173,6 +1173,22 @@ mod tests {
1173
1173
Frog(~str, int)
1174
1174
}
1175
1175
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
+
1176
1192
fn mk_object(items: &[(~str, Json)]) -> Json {
1177
1193
let mut d = ~LinearMap::new();
1178
1194
@@ -1441,6 +1457,18 @@ mod tests {
1441
1457
assert_eq!(from_str(~" false "), Ok(Boolean(false)));
1442
1458
}
1443
1459
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
+
1444
1472
#[test]
1445
1473
fn test_read_number() {
1446
1474
assert_eq!(from_str(~" +"),
@@ -1469,6 +1497,30 @@ mod tests {
1469
1497
assert_eq!(from_str(~" 3 "), Ok(Number(3f)));
1470
1498
}
1471
1499
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
+
1472
1524
#[test]
1473
1525
fn test_read_str() {
1474
1526
assert_eq!(from_str(~"\" " ) ,
@@ -1486,12 +1538,38 @@ mod tests {
1486
1538
assert_eq!( from_str( ~"\" \\ r\" ") , Ok ( String ( ~"\r ") ) ) ;
1487
1539
assert_eq!( from_str( ~"\" \\ t\" ") , Ok ( String ( ~"\t ") ) ) ;
1488
1540
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 ") ) ) ;
1489
1543
}
1490
1544
1491
1545
#[ 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 ") ;
1495
1573
}
1496
1574
1497
1575
#[ test]
@@ -1520,6 +1598,28 @@ mod tests {
1520
1598
Ok(List(~[Number(2f), List(~[Number(4f), Number(1f)])])));
1521
1599
}
1522
1600
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
+
1523
1623
#[test]
1524
1624
fn test_read_object() {
1525
1625
assert_eq!(from_str(~" { "),
@@ -1612,35 +1712,47 @@ mod tests {
1612
1712
}
1613
1713
1614
1714
#[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() {
1616
1734
let decoder = Decoder(from_str(~" null").unwrap());
1617
1735
let value: Option<~str> = Decodable::decode(&decoder);
1618
1736
assert_eq!(value, None);
1619
- }
1620
1737
1621
- #[test]
1622
- fn test_read_some() {
1623
1738
let decoder = Decoder(from_str(~"\" jodhpurs\" " ) . unwrap( ) ) ;
1624
1739
let value: Option <~str > = Decodable :: decode( & decoder) ;
1625
1740
assert_eq!( value, Some ( ~"jodhpurs"));
1626
1741
}
1627
1742
1628
1743
#[test]
1629
- fn test_read_enum_no_args () {
1744
+ fn test_decode_enum () {
1630
1745
let decoder = Decoder(from_str(~"\" Dog\" " ) . unwrap( ) ) ;
1631
1746
let value: Animal = Decodable :: decode( & decoder) ;
1632
1747
assert_eq!( value, Dog ) ;
1633
- }
1634
1748
1635
- #[ test]
1636
- fn test_read_enum_multiple_args( ) {
1637
1749
let decoder = Decoder ( from_str( ~"[ \" Frog \" , \" Henry \" , 349 ] ").unwrap());
1638
1750
let value: Animal = Decodable::decode(&decoder);
1639
1751
assert_eq!(value, Frog(~" Henry ", 349));
1640
1752
}
1641
1753
1642
1754
#[test]
1643
- fn test_read_map () {
1755
+ fn test_decode_map () {
1644
1756
let s = ~" { \" a\" : \"Dog \" , \"b\" : [ \" Frog \" , \"Henry \" , 349 ] } ";
1645
1757
let decoder = Decoder(from_str(s).unwrap());
1646
1758
let mut map: LinearMap<~str, Animal> = Decodable::decode(&decoder);
0 commit comments