@@ -1155,39 +1155,148 @@ fn mk_enum_deser_body(
1155
1155
#[cfg(test)]
1156
1156
mod test {
1157
1157
use std::serialize::Encodable;
1158
+ use std::serialize::Encoder;
1158
1159
use core::dvec::*;
1159
1160
use util::testing::*;
1160
1161
use core::io;
1161
1162
use core::str;
1163
+ use core::option::Option;
1164
+ use core::option::Some;
1165
+ use core::option::None;
1162
1166
use std;
1163
1167
1168
+ // just adding the ones I want to test, for now:
1169
+ #[deriving_eq]
1170
+ pub enum call {
1171
+ CallToEmitEnum(~str),
1172
+ CallToEmitEnumVariant(~str, uint, uint),
1173
+ CallToEmitEnumVariantArg(uint),
1174
+ CallToEmitUint(uint),
1175
+ CallToEmitNil,
1176
+ // all of the ones I was too lazy to handle:
1177
+ CallToOther
1178
+ }
1179
+ // using a mutable field rather than changing the
1180
+ // type of self in every method of every encoder everywhere.
1181
+ pub struct TestEncoder {mut call_log : ~[call]}
1182
+
1183
+ pub impl TestEncoder {
1184
+ // these self's should be &mut self's, as well....
1185
+ fn add_to_log (&self, c : call) {
1186
+ self.call_log.push(copy c);
1187
+ }
1188
+ fn add_unknown_to_log (&self) {
1189
+ self.add_to_log (CallToOther)
1190
+ }
1191
+ }
1192
+
1193
+ pub impl Encoder for TestEncoder {
1194
+ fn emit_nil(&self) { self.add_to_log(CallToEmitNil) }
1195
+
1196
+ fn emit_uint(&self, +v: uint) {self.add_to_log(CallToEmitUint(v)); }
1197
+ fn emit_u64(&self, +_v: u64) { self.add_unknown_to_log(); }
1198
+ fn emit_u32(&self, +_v: u32) { self.add_unknown_to_log(); }
1199
+ fn emit_u16(&self, +_v: u16) { self.add_unknown_to_log(); }
1200
+ fn emit_u8(&self, +_v: u8) { self.add_unknown_to_log(); }
1201
+
1202
+ fn emit_int(&self, +_v: int) { self.add_unknown_to_log(); }
1203
+ fn emit_i64(&self, +_v: i64) { self.add_unknown_to_log(); }
1204
+ fn emit_i32(&self, +_v: i32) { self.add_unknown_to_log(); }
1205
+ fn emit_i16(&self, +_v: i16) { self.add_unknown_to_log(); }
1206
+ fn emit_i8(&self, +_v: i8) { self.add_unknown_to_log(); }
1207
+
1208
+ fn emit_bool(&self, +_v: bool) { self.add_unknown_to_log(); }
1209
+
1210
+ fn emit_f64(&self, +_v: f64) { self.add_unknown_to_log(); }
1211
+ fn emit_f32(&self, +_v: f32) { self.add_unknown_to_log(); }
1212
+ fn emit_float(&self, +_v: float) { self.add_unknown_to_log(); }
1213
+
1214
+ fn emit_char(&self, +_v: char) { self.add_unknown_to_log(); }
1215
+
1216
+ fn emit_borrowed_str(&self, +_v: &str) { self.add_unknown_to_log(); }
1217
+ fn emit_owned_str(&self, +_v: &str) { self.add_unknown_to_log(); }
1218
+ fn emit_managed_str(&self, +_v: &str) { self.add_unknown_to_log(); }
1219
+
1220
+ fn emit_borrowed(&self, f: fn()) { self.add_unknown_to_log(); f() }
1221
+ fn emit_owned(&self, f: fn()) { self.add_unknown_to_log(); f() }
1222
+ fn emit_managed(&self, f: fn()) { self.add_unknown_to_log(); f() }
1223
+
1224
+ fn emit_enum(&self, name: &str, f: fn()) {
1225
+ self.add_to_log(CallToEmitEnum(name.to_str())); f(); }
1226
+
1227
+ fn emit_enum_variant(&self, name: &str, +id: uint, +cnt: uint, f: fn()) {
1228
+ self.add_to_log(CallToEmitEnumVariant (name.to_str(),id,cnt)); f();
1229
+ }
1230
+
1231
+ fn emit_enum_variant_arg(&self, +idx: uint, f: fn()) {
1232
+ self.add_to_log(CallToEmitEnumVariantArg (idx)); f();
1233
+ }
1234
+
1235
+ fn emit_borrowed_vec(&self, +_len: uint, f: fn()) {
1236
+ self.add_unknown_to_log(); f();
1237
+ }
1238
+
1239
+ fn emit_owned_vec(&self, +_len: uint, f: fn()) {
1240
+ self.add_unknown_to_log(); f();
1241
+ }
1242
+ fn emit_managed_vec(&self, +_len: uint, f: fn()) {
1243
+ self.add_unknown_to_log(); f();
1244
+ }
1245
+ fn emit_vec_elt(&self, +_idx: uint, f: fn()) {
1246
+ self.add_unknown_to_log(); f();
1247
+ }
1248
+
1249
+ fn emit_rec(&self, f: fn()) {
1250
+ self.add_unknown_to_log(); f();
1251
+ }
1252
+ fn emit_struct(&self, _name: &str, +_len: uint, f: fn()) {
1253
+ self.add_unknown_to_log(); f();
1254
+ }
1255
+ fn emit_field(&self, _name: &str, +_idx: uint, f: fn()) {
1256
+ self.add_unknown_to_log(); f();
1257
+ }
1258
+
1259
+ fn emit_tup(&self, +_len: uint, f: fn()) {
1260
+ self.add_unknown_to_log(); f();
1261
+ }
1262
+ fn emit_tup_elt(&self, +_idx: uint, f: fn()) {
1263
+ self.add_unknown_to_log(); f();
1264
+ }
1265
+ }
1266
+
1267
+
1164
1268
#[auto_decode]
1165
1269
#[auto_encode]
1166
1270
struct Node {id: uint}
1167
1271
1168
- fn to_json_str (val: Encodable<std::json::Encoder>) -> ~str{
1169
- let bw = @io::BytesWriter {bytes: DVec(), pos: 0};
1170
- val.encode(~std::json::Encoder(bw as io::Writer));
1171
- str::from_bytes(bw.bytes.data)
1272
+
1273
+ fn to_call_log (val: Encodable<TestEncoder>) -> ~[call] {
1274
+ let mut te = TestEncoder {call_log: ~[]};
1275
+ val.encode(&te);
1276
+ te.call_log
1172
1277
}
1173
-
1278
+ /*
1174
1279
#[test] fn encode_test () {
1175
- check_equal (to_json_str (Node{id:34}
1280
+ check_equal (to_call_log (Node{id:34}
1176
1281
as Encodable::<std::json::Encoder>),
1177
- ~" { \" id\" : 34 } ");
1282
+ ~[CallToEnum (~" Node "),
1283
+ CallToEnumVariant]);
1178
1284
}
1179
-
1285
+ */
1180
1286
#[auto_encode]
1181
- enum written {
1182
- Book(int ),
1287
+ enum Written {
1288
+ Book(uint,uint ),
1183
1289
Magazine(~str)
1184
1290
}
1185
1291
1186
- #[test] fn json_enum_encode_test () {
1187
- check_equal (to_json_str(Book(9) as Encodable::<std::json::Encoder>),
1188
- ~" [ \" Book \" , 9 ] ");
1189
- check_equal (to_json_str(Magazine(~" Paris Match ")
1190
- as Encodable::<std::json::Encoder>),
1191
- ~" [ \" Magazine \" , \" Paris Match \" ] ") ;
1192
- }
1292
+ #[test] fn encode_enum_test () {
1293
+ check_equal (to_call_log(Book(34,44)
1294
+ as Encodable::<TestEncoder>),
1295
+ ~[CallToEmitEnum (~" Written "),
1296
+ CallToEmitEnumVariant (~" Book " , 0 , 2 ) ,
1297
+ CallToEmitEnumVariantArg ( 0 ) ,
1298
+ CallToEmitUint ( 34 ) ,
1299
+ CallToEmitEnumVariantArg ( 1 ) ,
1300
+ CallToEmitUint ( 44 ) ] ) ;
1301
+ }
1193
1302
}
0 commit comments