Skip to content

Commit

Permalink
Test for broken reflection
Browse files Browse the repository at this point in the history
Test is ignored because reflection is broken
  • Loading branch information
stepancheg committed Dec 26, 2017
1 parent a4d1850 commit e929979
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 1 deletion.
18 changes: 18 additions & 0 deletions protobuf-test/src/common/v2/test_reflect.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
use super::test_reflect_pb::M;

use protobuf::Message;

#[ignore] // TODO
#[test]
fn test_get_sub_message_via_reflection() {
let mut m = M::new();
m.mut_sub_m().set_n(42);
assert!(m.has_sub_m());

let descriptor = m.descriptor().field_by_name("sub_m");
assert_eq!("sub_m", descriptor.name());

let sub_m = descriptor.get_message(&m);
assert_eq!("SubM", sub_m.descriptor().full_name());
assert_eq!(42, sub_m.descriptor().field_by_name("n").get_i32(sub_m));
}
9 changes: 9 additions & 0 deletions protobuf-test/src/common/v2/test_reflect_pb.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
syntax = "proto2";

message M {
optional SubM sub_m = 1;
}

message SubM {
optional int32 n = 1;
}
20 changes: 19 additions & 1 deletion protobuf/src/reflect/accessor.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use std::hash::Hash;
use std::collections::HashMap;
use std::fmt;

use core::Message;
use core::ProtobufEnum;
Expand Down Expand Up @@ -156,6 +157,23 @@ enum FieldAccessorFunctions<M> {
Map(Box<FieldAccessor2<M, ReflectMap>>),
}

impl<M> fmt::Debug for FieldAccessorFunctions<M> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
&FieldAccessorFunctions::SingularHasGetSet { .. } =>
write!(f, "SingularHasGetSet {{ .. }}"),
&FieldAccessorFunctions::Simple(..) =>
write!(f, "Simple(..)"),
&FieldAccessorFunctions::Optional(..) =>
write!(f, "Optional(..)"),
&FieldAccessorFunctions::Repeated(..) =>
write!(f, "Repeated(..)"),
&FieldAccessorFunctions::Map(..) =>
write!(f, "Map(..)"),
}
}
}


struct FieldAccessorImpl<M> {
name: &'static str,
Expand Down Expand Up @@ -216,7 +234,7 @@ impl<M : Message + 'static> FieldAccessor for FieldAccessorImpl<M> {
FieldAccessorFunctions::SingularHasGetSet {
get_set: SingularGetSet::Message(ref get), ..
} => get.get_message(message_down_cast(m)),
_ => panic!(),
ref fns => panic!("unknown accessor type: {:?}", fns),
}
}

Expand Down

0 comments on commit e929979

Please sign in to comment.