Skip to content

Commit 46d2be1

Browse files
committed
added rather elaborate test framework
1 parent c05954a commit 46d2be1

File tree

1 file changed

+126
-17
lines changed

1 file changed

+126
-17
lines changed

src/libsyntax/ext/auto_encode.rs

Lines changed: 126 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1155,39 +1155,148 @@ fn mk_enum_deser_body(
11551155
#[cfg(test)]
11561156
mod test {
11571157
use std::serialize::Encodable;
1158+
use std::serialize::Encoder;
11581159
use core::dvec::*;
11591160
use util::testing::*;
11601161
use core::io;
11611162
use core::str;
1163+
use core::option::Option;
1164+
use core::option::Some;
1165+
use core::option::None;
11621166
use std;
11631167
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+
11641268
#[auto_decode]
11651269
#[auto_encode]
11661270
struct Node {id: uint}
11671271
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
11721277
}
1173-
1278+
/*
11741279
#[test] fn encode_test () {
1175-
check_equal (to_json_str(Node{id:34}
1280+
check_equal (to_call_log(Node{id:34}
11761281
as Encodable::<std::json::Encoder>),
1177-
~"{\"id\":34}");
1282+
~[CallToEnum (~"Node"),
1283+
CallToEnumVariant]);
11781284
}
1179-
1285+
*/
11801286
#[auto_encode]
1181-
enum written {
1182-
Book(int),
1287+
enum Written {
1288+
Book(uint,uint),
11831289
Magazine(~str)
11841290
}
11851291
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+
}
11931302
}

0 commit comments

Comments
 (0)