about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorErick Tryzelaar <erick.tryzelaar@gmail.com>2013-03-26 17:42:01 -0700
committerErick Tryzelaar <erick.tryzelaar@gmail.com>2013-03-27 07:04:14 -0700
commit4e9a63ff917af32bd9ddfee65f5871a5586771e1 (patch)
treee08cf0f8eb9b6e0fc8d4bb58828cd8d264be43a5 /src/libstd
parent4d6dcefcbb8688b69dd80bc7382a2f593c3b08d8 (diff)
downloadrust-4e9a63ff917af32bd9ddfee65f5871a5586771e1.tar.gz
rust-4e9a63ff917af32bd9ddfee65f5871a5586771e1.zip
std: add tests for decoding json enums
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/json.rs15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/libstd/json.rs b/src/libstd/json.rs
index dc9f629d7e2..968c6d9e58b 100644
--- a/src/libstd/json.rs
+++ b/src/libstd/json.rs
@@ -851,7 +851,6 @@ impl<'self> serialize::Decoder for Decoder<'self> {
 
     fn read_enum<T>(&self, name: &str, f: &fn() -> T) -> T {
         debug!("read_enum(%s)", name);
-        if name != ~"option" { fail!(~"only supports the option enum") }
         f()
     }
 
@@ -1721,6 +1720,20 @@ mod tests {
     }
 
     #[test]
+    fn test_read_enum_no_args() {
+        let decoder = Decoder(from_str(~"\"Dog\"").unwrap());
+        let value: Animal = Decodable::decode(&decoder);
+        assert_eq!(value, Dog);
+    }
+
+    #[test]
+    fn test_read_enum_multiple_args() {
+        let decoder = Decoder(from_str(~"[\"Frog\",\"Henry\",349]").unwrap());
+        let value: Animal = Decodable::decode(&decoder);
+        assert_eq!(value, Frog(~"Henry", 349));
+    }
+
+    #[test]
     fn test_multiline_errors() {
         assert_eq!(from_str(~"{\n  \"foo\":\n \"bar\""),
             Err(Error {