Move some Encodable
/Decodable
tests.
Round-trip encoding/decoding of many types is tested in `compiler/rustc_serialize/tests/opaque.rs`. There is also a small amount of encoding/decoding testing in three files in `tests/ui-fulldeps`. There is no obvious reason why these three files are necessary. They were originally added in 2014. Maybe it wasn't possible for a proc macro to run in a unit test back then? This commit just moves the testing from those three files into the unit test.
This commit is contained in:
parent
b4ba2f0bf4
commit
8d359e4385
@ -251,3 +251,42 @@ fn test_tuples() {
|
|||||||
check_round_trip(vec![(1234567isize, 100000000000000u64, 99999999999999i64)]);
|
check_round_trip(vec![(1234567isize, 100000000000000u64, 99999999999999i64)]);
|
||||||
check_round_trip(vec![(String::new(), "some string".to_string())]);
|
check_round_trip(vec![(String::new(), "some string".to_string())]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_unit_like_struct() {
|
||||||
|
#[derive(Encodable, Decodable, PartialEq, Debug)]
|
||||||
|
struct UnitLikeStruct;
|
||||||
|
|
||||||
|
check_round_trip(vec![UnitLikeStruct]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_box() {
|
||||||
|
#[derive(Encodable, Decodable, PartialEq, Debug)]
|
||||||
|
struct A {
|
||||||
|
foo: Box<[bool]>,
|
||||||
|
}
|
||||||
|
|
||||||
|
let obj = A { foo: Box::new([true, false]) };
|
||||||
|
check_round_trip(vec![obj]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_cell() {
|
||||||
|
use std::cell::{Cell, RefCell};
|
||||||
|
|
||||||
|
#[derive(Encodable, Decodable, PartialEq, Debug)]
|
||||||
|
struct A {
|
||||||
|
baz: isize,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Encodable, Decodable, PartialEq, Debug)]
|
||||||
|
struct B {
|
||||||
|
foo: Cell<bool>,
|
||||||
|
bar: RefCell<A>,
|
||||||
|
}
|
||||||
|
|
||||||
|
let obj = B { foo: Cell::new(true), bar: RefCell::new(A { baz: 2 }) };
|
||||||
|
check_round_trip(vec![obj]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
// run-pass
|
|
||||||
|
|
||||||
#![allow(unused_imports)]
|
|
||||||
#![feature(rustc_private)]
|
|
||||||
|
|
||||||
extern crate rustc_macros;
|
|
||||||
extern crate rustc_serialize;
|
|
||||||
|
|
||||||
// Necessary to pull in object code as the rest of the rustc crates are shipped only as rmeta
|
|
||||||
// files.
|
|
||||||
#[allow(unused_extern_crates)]
|
|
||||||
extern crate rustc_driver;
|
|
||||||
|
|
||||||
use rustc_macros::{Decodable, Encodable};
|
|
||||||
use rustc_serialize::opaque::{MemDecoder, MemEncoder};
|
|
||||||
use rustc_serialize::{Decodable, Encodable, Encoder};
|
|
||||||
|
|
||||||
#[derive(Encodable, Decodable)]
|
|
||||||
struct A {
|
|
||||||
foo: Box<[bool]>,
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
let obj = A { foo: Box::new([true, false]) };
|
|
||||||
|
|
||||||
let mut encoder = MemEncoder::new();
|
|
||||||
obj.encode(&mut encoder);
|
|
||||||
let data = encoder.finish();
|
|
||||||
|
|
||||||
let mut decoder = MemDecoder::new(&data, 0);
|
|
||||||
let obj2 = A::decode(&mut decoder);
|
|
||||||
|
|
||||||
assert_eq!(obj.foo, obj2.foo);
|
|
||||||
}
|
|
@ -1,44 +0,0 @@
|
|||||||
// run-pass
|
|
||||||
|
|
||||||
#![allow(unused_imports)]
|
|
||||||
// This briefly tests the capability of `Cell` and `RefCell` to implement the
|
|
||||||
// `Encodable` and `Decodable` traits via `#[derive(Encodable, Decodable)]`
|
|
||||||
#![feature(rustc_private)]
|
|
||||||
|
|
||||||
extern crate rustc_macros;
|
|
||||||
extern crate rustc_serialize;
|
|
||||||
|
|
||||||
// Necessary to pull in object code as the rest of the rustc crates are shipped only as rmeta
|
|
||||||
// files.
|
|
||||||
#[allow(unused_extern_crates)]
|
|
||||||
extern crate rustc_driver;
|
|
||||||
|
|
||||||
use rustc_macros::{Decodable, Encodable};
|
|
||||||
use rustc_serialize::opaque::{MemDecoder, MemEncoder};
|
|
||||||
use rustc_serialize::{Decodable, Encodable, Encoder};
|
|
||||||
use std::cell::{Cell, RefCell};
|
|
||||||
|
|
||||||
#[derive(Encodable, Decodable)]
|
|
||||||
struct A {
|
|
||||||
baz: isize,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Encodable, Decodable)]
|
|
||||||
struct B {
|
|
||||||
foo: Cell<bool>,
|
|
||||||
bar: RefCell<A>,
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
let obj = B { foo: Cell::new(true), bar: RefCell::new(A { baz: 2 }) };
|
|
||||||
|
|
||||||
let mut encoder = MemEncoder::new();
|
|
||||||
obj.encode(&mut encoder);
|
|
||||||
let data = encoder.finish();
|
|
||||||
|
|
||||||
let mut decoder = MemDecoder::new(&data, 0);
|
|
||||||
let obj2 = B::decode(&mut decoder);
|
|
||||||
|
|
||||||
assert_eq!(obj.foo.get(), obj2.foo.get());
|
|
||||||
assert_eq!(obj.bar.borrow().baz, obj2.bar.borrow().baz);
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
// run-pass
|
|
||||||
|
|
||||||
#![allow(unused_mut)]
|
|
||||||
#![allow(unused_imports)]
|
|
||||||
#![feature(rustc_private)]
|
|
||||||
|
|
||||||
extern crate rustc_macros;
|
|
||||||
extern crate rustc_serialize;
|
|
||||||
|
|
||||||
// Necessary to pull in object code as the rest of the rustc crates are shipped only as rmeta
|
|
||||||
// files.
|
|
||||||
#[allow(unused_extern_crates)]
|
|
||||||
extern crate rustc_driver;
|
|
||||||
|
|
||||||
use rustc_macros::{Decodable, Encodable};
|
|
||||||
use rustc_serialize::opaque::{MemDecoder, MemEncoder};
|
|
||||||
use rustc_serialize::{Decodable, Encodable, Encoder};
|
|
||||||
|
|
||||||
#[derive(Encodable, Decodable, PartialEq, Debug)]
|
|
||||||
struct UnitLikeStruct;
|
|
||||||
|
|
||||||
pub fn main() {
|
|
||||||
let obj = UnitLikeStruct;
|
|
||||||
|
|
||||||
let mut encoder = MemEncoder::new();
|
|
||||||
obj.encode(&mut encoder);
|
|
||||||
let data = encoder.finish();
|
|
||||||
|
|
||||||
let mut decoder = MemDecoder::new(&data, 0);
|
|
||||||
let obj2 = UnitLikeStruct::decode(&mut decoder);
|
|
||||||
|
|
||||||
assert_eq!(obj, obj2);
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user