Skip to content

Commit 5b7d608

Browse files
committed
std: add more json decoder tests.
1 parent f364cf5 commit 5b7d608

File tree

1 file changed

+124
-12
lines changed

1 file changed

+124
-12
lines changed

src/libstd/json.rs

+124-12
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)