TEST(json_proto, from_object) {
  Employee emp;
  emp.set_id(234000);
  emp.set_name("Tom");
  emp.set_age(14);
  emp.set_gender("male");

  emp.add_role("role1");
  emp.add_role("role2");
  emp.add_role("role3");

  emp.mutable_dept()->set_id(19990);
  emp.mutable_dept()->set_name("12345");

  Education* edu = emp.add_edu();
  edu->set_when("2000-2004");
  edu->set_school("ncut");

  string toJson = ProtobufJson::toJsonString(&emp);

  Employee emp1;
  ResultCode status = (ResultCode)ProtobufJson::parseJsonFromString(&emp1, toJson);
  if (status != RC_SUCCESS) {
    DVLOG(2) << "Parse json error. Caused by " << getErrorDescription(status);
    return;
  }

  ASSERT_EQ(emp1.id(), emp.id());
  ASSERT_EQ(emp1.name(), emp.name());
  ASSERT_EQ(emp1.age(), emp.age());
  ASSERT_EQ(emp1.gender(), emp.gender());

  ASSERT_EQ(emp1.role(0), emp.role(0));
  ASSERT_EQ(emp1.role(1), emp.role(1));
  ASSERT_EQ(emp1.role(2), emp.role(2));

  ASSERT_EQ(emp1.dept().id(), emp.dept().id());
  ASSERT_EQ(emp1.dept().name(), emp.dept().name());

  ASSERT_EQ(emp1.edu(0).when(), emp.edu(0).when());
  ASSERT_EQ(emp1.edu(0).school(), emp.edu(0).school());
}