1288
1357
EXPECT_TRUE(controller.called_);
1360
// ===================================================================
1362
class OneofTest : public testing::Test {
1364
virtual void SetUp() {
1367
void ExpectEnumCasesWork(const unittest::TestOneof2 &message) {
1368
switch (message.foo_case()) {
1369
case unittest::TestOneof2::kFooInt:
1370
EXPECT_TRUE(message.has_foo_int());
1372
case unittest::TestOneof2::kFooString:
1373
EXPECT_TRUE(message.has_foo_string());
1375
case unittest::TestOneof2::kFooBytes:
1376
EXPECT_TRUE(message.has_foo_bytes());
1378
case unittest::TestOneof2::kFooEnum:
1379
EXPECT_TRUE(message.has_foo_enum());
1381
case unittest::TestOneof2::kFooMessage:
1382
EXPECT_TRUE(message.has_foo_message());
1384
case unittest::TestOneof2::kFoogroup:
1385
EXPECT_TRUE(message.has_foogroup());
1387
case unittest::TestOneof2::FOO_NOT_SET:
1393
TEST_F(OneofTest, SettingOneFieldClearsOthers) {
1394
unittest::TestOneof2 message;
1396
message.set_foo_int(123);
1397
EXPECT_TRUE(message.has_foo_int());
1398
TestUtil::ExpectAtMostOneFieldSetInOneof(message);
1400
message.set_foo_string("foo");
1401
EXPECT_TRUE(message.has_foo_string());
1402
TestUtil::ExpectAtMostOneFieldSetInOneof(message);
1405
message.set_foo_bytes("qux");
1406
EXPECT_TRUE(message.has_foo_bytes());
1407
TestUtil::ExpectAtMostOneFieldSetInOneof(message);
1409
message.set_foo_enum(unittest::TestOneof2::FOO);
1410
EXPECT_TRUE(message.has_foo_enum());
1411
TestUtil::ExpectAtMostOneFieldSetInOneof(message);
1413
message.mutable_foo_message()->set_qux_int(234);
1414
EXPECT_TRUE(message.has_foo_message());
1415
TestUtil::ExpectAtMostOneFieldSetInOneof(message);
1417
message.mutable_foogroup()->set_a(345);
1418
EXPECT_TRUE(message.has_foogroup());
1419
TestUtil::ExpectAtMostOneFieldSetInOneof(message);
1422
// we repeat this because we didn't test if this properly clears other fields
1423
// at the beginning.
1424
message.set_foo_int(123);
1425
EXPECT_TRUE(message.has_foo_int());
1426
TestUtil::ExpectAtMostOneFieldSetInOneof(message);
1429
TEST_F(OneofTest, EnumCases) {
1430
unittest::TestOneof2 message;
1432
message.set_foo_int(123);
1433
ExpectEnumCasesWork(message);
1434
message.set_foo_string("foo");
1435
ExpectEnumCasesWork(message);
1436
message.set_foo_bytes("qux");
1437
ExpectEnumCasesWork(message);
1438
message.set_foo_enum(unittest::TestOneof2::FOO);
1439
ExpectEnumCasesWork(message);
1440
message.mutable_foo_message()->set_qux_int(234);
1441
ExpectEnumCasesWork(message);
1442
message.mutable_foogroup()->set_a(345);
1443
ExpectEnumCasesWork(message);
1446
TEST_F(OneofTest, PrimitiveType) {
1447
unittest::TestOneof2 message;
1448
// Unset field returns default value
1449
EXPECT_EQ(message.foo_int(), 0);
1451
message.set_foo_int(123);
1452
EXPECT_TRUE(message.has_foo_int());
1453
EXPECT_EQ(message.foo_int(), 123);
1454
message.clear_foo_int();
1455
EXPECT_FALSE(message.has_foo_int());
1458
TEST_F(OneofTest, EnumType) {
1459
unittest::TestOneof2 message;
1460
// Unset field returns default value
1461
EXPECT_EQ(message.foo_enum(), 1);
1463
message.set_foo_enum(unittest::TestOneof2::FOO);
1464
EXPECT_TRUE(message.has_foo_enum());
1465
EXPECT_EQ(message.foo_enum(), unittest::TestOneof2::FOO);
1466
message.clear_foo_enum();
1467
EXPECT_FALSE(message.has_foo_enum());
1470
TEST_F(OneofTest, SetString) {
1471
// Check that setting a string field in various ways works
1472
unittest::TestOneof2 message;
1474
// Unset field returns default value
1475
EXPECT_EQ(message.foo_string(), "");
1477
message.set_foo_string("foo");
1478
EXPECT_TRUE(message.has_foo_string());
1479
EXPECT_EQ(message.foo_string(), "foo");
1480
message.clear_foo_string();
1481
EXPECT_FALSE(message.has_foo_string());
1483
message.set_foo_string(string("bar"));
1484
EXPECT_TRUE(message.has_foo_string());
1485
EXPECT_EQ(message.foo_string(), "bar");
1486
message.clear_foo_string();
1487
EXPECT_FALSE(message.has_foo_string());
1490
message.set_foo_string("qux", 3);
1491
EXPECT_TRUE(message.has_foo_string());
1492
EXPECT_EQ(message.foo_string(), "qux");
1493
message.clear_foo_string();
1494
EXPECT_FALSE(message.has_foo_string());
1496
message.mutable_foo_string()->assign("quux");
1497
EXPECT_TRUE(message.has_foo_string());
1498
EXPECT_EQ(message.foo_string(), "quux");
1499
message.clear_foo_string();
1500
EXPECT_FALSE(message.has_foo_string());
1502
message.set_foo_string("corge");
1503
EXPECT_TRUE(message.has_foo_string());
1504
EXPECT_EQ(message.foo_string(), "corge");
1505
message.clear_foo_string();
1506
EXPECT_FALSE(message.has_foo_string());
1509
TEST_F(OneofTest, ReleaseString) {
1510
// Check that release_foo() starts out NULL, and gives us a value
1511
// that we can delete after it's been set.
1512
unittest::TestOneof2 message;
1514
EXPECT_EQ(NULL, message.release_foo_string());
1515
EXPECT_FALSE(message.has_foo_string());
1517
message.set_foo_string("blah");
1518
EXPECT_TRUE(message.has_foo_string());
1519
scoped_ptr<string> str(message.release_foo_string());
1520
EXPECT_FALSE(message.has_foo_string());
1521
ASSERT_TRUE(str != NULL);
1522
EXPECT_EQ("blah", *str);
1524
EXPECT_EQ(NULL, message.release_foo_string());
1525
EXPECT_FALSE(message.has_foo_string());
1528
TEST_F(OneofTest, SetAllocatedString) {
1529
// Check that set_allocated_foo() works for strings.
1530
unittest::TestOneof2 message;
1532
EXPECT_FALSE(message.has_foo_string());
1533
const string kHello("hello");
1534
message.set_foo_string(kHello);
1535
EXPECT_TRUE(message.has_foo_string());
1537
message.set_allocated_foo_string(NULL);
1538
EXPECT_FALSE(message.has_foo_string());
1539
EXPECT_EQ("", message.foo_string());
1541
message.set_allocated_foo_string(new string(kHello));
1542
EXPECT_TRUE(message.has_foo_string());
1543
EXPECT_EQ(kHello, message.foo_string());
1547
TEST_F(OneofTest, SetMessage) {
1548
// Check that setting a message field works
1549
unittest::TestOneof2 message;
1551
// Unset field returns default instance
1552
EXPECT_EQ(&message.foo_message(),
1553
&unittest::TestOneof2_NestedMessage::default_instance());
1554
EXPECT_EQ(message.foo_message().qux_int(), 0);
1556
message.mutable_foo_message()->set_qux_int(234);
1557
EXPECT_TRUE(message.has_foo_message());
1558
EXPECT_EQ(message.foo_message().qux_int(), 234);
1559
message.clear_foo_message();
1560
EXPECT_FALSE(message.has_foo_message());
1563
TEST_F(OneofTest, ReleaseMessage) {
1564
// Check that release_foo() starts out NULL, and gives us a value
1565
// that we can delete after it's been set.
1566
unittest::TestOneof2 message;
1568
EXPECT_EQ(NULL, message.release_foo_message());
1569
EXPECT_FALSE(message.has_foo_message());
1571
message.mutable_foo_message()->set_qux_int(1);
1572
EXPECT_TRUE(message.has_foo_message());
1573
scoped_ptr<unittest::TestOneof2_NestedMessage> mes(
1574
message.release_foo_message());
1575
EXPECT_FALSE(message.has_foo_message());
1576
ASSERT_TRUE(mes != NULL);
1577
EXPECT_EQ(1, mes->qux_int());
1579
EXPECT_EQ(NULL, message.release_foo_message());
1580
EXPECT_FALSE(message.has_foo_message());
1583
TEST_F(OneofTest, SetAllocatedMessage) {
1584
// Check that set_allocated_foo() works for messages.
1585
unittest::TestOneof2 message;
1587
EXPECT_FALSE(message.has_foo_message());
1589
message.mutable_foo_message()->set_qux_int(1);
1590
EXPECT_TRUE(message.has_foo_message());
1592
message.set_allocated_foo_message(NULL);
1593
EXPECT_FALSE(message.has_foo_message());
1594
EXPECT_EQ(&message.foo_message(),
1595
&unittest::TestOneof2_NestedMessage::default_instance());
1597
message.mutable_foo_message()->set_qux_int(1);
1598
unittest::TestOneof2_NestedMessage* mes = message.release_foo_message();
1599
ASSERT_TRUE(mes != NULL);
1600
EXPECT_FALSE(message.has_foo_message());
1602
message.set_allocated_foo_message(mes);
1603
EXPECT_TRUE(message.has_foo_message());
1604
EXPECT_EQ(1, message.foo_message().qux_int());
1608
TEST_F(OneofTest, Clear) {
1609
unittest::TestOneof2 message;
1611
message.set_foo_int(1);
1612
EXPECT_TRUE(message.has_foo_int());
1613
message.clear_foo_int();
1614
EXPECT_FALSE(message.has_foo_int());
1617
TEST_F(OneofTest, Defaults) {
1618
unittest::TestOneof2 message;
1620
EXPECT_FALSE(message.has_foo_int());
1621
EXPECT_EQ(message.foo_int(), 0);
1623
EXPECT_FALSE(message.has_foo_string());
1624
EXPECT_EQ(message.foo_string(), "");
1627
EXPECT_FALSE(message.has_foo_bytes());
1628
EXPECT_EQ(message.foo_bytes(), "");
1630
EXPECT_FALSE(message.has_foo_enum());
1631
EXPECT_EQ(message.foo_enum(), 1);
1633
EXPECT_FALSE(message.has_foo_message());
1634
EXPECT_EQ(message.foo_message().qux_int(), 0);
1636
EXPECT_FALSE(message.has_foogroup());
1637
EXPECT_EQ(message.foogroup().a(), 0);
1640
EXPECT_FALSE(message.has_bar_int());
1641
EXPECT_EQ(message.bar_int(), 5);
1643
EXPECT_FALSE(message.has_bar_string());
1644
EXPECT_EQ(message.bar_string(), "STRING");
1647
EXPECT_FALSE(message.has_bar_bytes());
1648
EXPECT_EQ(message.bar_bytes(), "BYTES");
1650
EXPECT_FALSE(message.has_bar_enum());
1651
EXPECT_EQ(message.bar_enum(), 2);
1654
TEST_F(OneofTest, SwapWithEmpty) {
1655
unittest::TestOneof2 message1, message2;
1656
message1.set_foo_string("FOO");
1657
EXPECT_TRUE(message1.has_foo_string());
1658
message1.Swap(&message2);
1659
EXPECT_FALSE(message1.has_foo_string());
1660
EXPECT_TRUE(message2.has_foo_string());
1661
EXPECT_EQ(message2.foo_string(), "FOO");
1664
TEST_F(OneofTest, SwapWithSelf) {
1665
unittest::TestOneof2 message;
1666
message.set_foo_string("FOO");
1667
EXPECT_TRUE(message.has_foo_string());
1668
message.Swap(&message);
1669
EXPECT_TRUE(message.has_foo_string());
1670
EXPECT_EQ(message.foo_string(), "FOO");
1673
TEST_F(OneofTest, SwapBothHasFields) {
1674
unittest::TestOneof2 message1, message2;
1676
message1.set_foo_string("FOO");
1677
EXPECT_TRUE(message1.has_foo_string());
1678
message2.mutable_foo_message()->set_qux_int(1);
1679
EXPECT_TRUE(message2.has_foo_message());
1681
message1.Swap(&message2);
1682
EXPECT_FALSE(message1.has_foo_string());
1683
EXPECT_FALSE(message2.has_foo_message());
1684
EXPECT_TRUE(message1.has_foo_message());
1685
EXPECT_EQ(message1.foo_message().qux_int(), 1);
1686
EXPECT_TRUE(message2.has_foo_string());
1687
EXPECT_EQ(message2.foo_string(), "FOO");
1690
TEST_F(OneofTest, CopyContructor) {
1691
unittest::TestOneof2 message1;
1692
message1.set_foo_bytes("FOO");
1694
unittest::TestOneof2 message2(message1);
1695
EXPECT_TRUE(message2.has_foo_bytes());
1696
EXPECT_EQ(message2.foo_bytes(), "FOO");
1699
TEST_F(OneofTest, CopyFrom) {
1700
unittest::TestOneof2 message1, message2;
1701
message1.set_foo_enum(unittest::TestOneof2::BAR);
1702
EXPECT_TRUE(message1.has_foo_enum());
1704
message2.CopyFrom(message1);
1705
EXPECT_TRUE(message2.has_foo_enum());
1706
EXPECT_EQ(message2.foo_enum(), unittest::TestOneof2::BAR);
1708
// Copying from self should be a no-op.
1709
message2.CopyFrom(message2);
1710
EXPECT_TRUE(message2.has_foo_enum());
1711
EXPECT_EQ(message2.foo_enum(), unittest::TestOneof2::BAR);
1714
TEST_F(OneofTest, CopyAssignmentOperator) {
1715
unittest::TestOneof2 message1;
1716
message1.mutable_foo_message()->set_qux_int(123);
1717
EXPECT_TRUE(message1.has_foo_message());
1719
unittest::TestOneof2 message2;
1720
message2 = message1;
1721
EXPECT_EQ(message2.foo_message().qux_int(), 123);
1723
// Make sure that self-assignment does something sane.
1724
message2 = message2;
1725
EXPECT_EQ(message2.foo_message().qux_int(), 123);
1728
TEST_F(OneofTest, UpcastCopyFrom) {
1729
// Test the CopyFrom method that takes in the generic const Message&
1731
unittest::TestOneof2 message1, message2;
1732
message1.mutable_foogroup()->set_a(123);
1733
EXPECT_TRUE(message1.has_foogroup());
1735
const Message* source = implicit_cast<const Message*>(&message1);
1736
message2.CopyFrom(*source);
1738
EXPECT_TRUE(message2.has_foogroup());
1739
EXPECT_EQ(message2.foogroup().a(), 123);
1742
// Test the generated SerializeWithCachedSizesToArray(),
1743
// This indirectly tests MergePartialFromCodedStream()
1744
// We have to test each field type separately because we cannot set them at the
1746
TEST_F(OneofTest, SerializationToArray) {
1749
unittest::TestOneof2 message1, message2;
1751
message1.set_foo_int(123);
1752
int size = message1.ByteSize();
1754
uint8* start = reinterpret_cast<uint8*>(string_as_array(&data));
1755
uint8* end = message1.SerializeWithCachedSizesToArray(start);
1756
EXPECT_EQ(size, end - start);
1757
EXPECT_TRUE(message2.ParseFromString(data));
1758
EXPECT_EQ(message2.foo_int(), 123);
1763
unittest::TestOneof2 message1, message2;
1765
message1.set_foo_string("foo");
1766
int size = message1.ByteSize();
1768
uint8* start = reinterpret_cast<uint8*>(string_as_array(&data));
1769
uint8* end = message1.SerializeWithCachedSizesToArray(start);
1770
EXPECT_EQ(size, end - start);
1771
EXPECT_TRUE(message2.ParseFromString(data));
1772
EXPECT_EQ(message2.foo_string(), "foo");
1778
unittest::TestOneof2 message1, message2;
1780
message1.set_foo_bytes("qux");
1781
int size = message1.ByteSize();
1783
uint8* start = reinterpret_cast<uint8*>(string_as_array(&data));
1784
uint8* end = message1.SerializeWithCachedSizesToArray(start);
1785
EXPECT_EQ(size, end - start);
1786
EXPECT_TRUE(message2.ParseFromString(data));
1787
EXPECT_EQ(message2.foo_bytes(), "qux");
1792
unittest::TestOneof2 message1, message2;
1794
message1.set_foo_enum(unittest::TestOneof2::FOO);
1795
int size = message1.ByteSize();
1797
uint8* start = reinterpret_cast<uint8*>(string_as_array(&data));
1798
uint8* end = message1.SerializeWithCachedSizesToArray(start);
1799
EXPECT_EQ(size, end - start);
1800
EXPECT_TRUE(message2.ParseFromString(data));
1801
EXPECT_EQ(message2.foo_enum(), unittest::TestOneof2::FOO);
1806
unittest::TestOneof2 message1, message2;
1808
message1.mutable_foo_message()->set_qux_int(234);
1809
int size = message1.ByteSize();
1811
uint8* start = reinterpret_cast<uint8*>(string_as_array(&data));
1812
uint8* end = message1.SerializeWithCachedSizesToArray(start);
1813
EXPECT_EQ(size, end - start);
1814
EXPECT_TRUE(message2.ParseFromString(data));
1815
EXPECT_EQ(message2.foo_message().qux_int(), 234);
1820
unittest::TestOneof2 message1, message2;
1822
message1.mutable_foogroup()->set_a(345);
1823
int size = message1.ByteSize();
1825
uint8* start = reinterpret_cast<uint8*>(string_as_array(&data));
1826
uint8* end = message1.SerializeWithCachedSizesToArray(start);
1827
EXPECT_EQ(size, end - start);
1828
EXPECT_TRUE(message2.ParseFromString(data));
1829
EXPECT_EQ(message2.foogroup().a(), 345);
1834
// Test the generated SerializeWithCachedSizes() by forcing the buffer to write
1835
// one byte at a time.
1836
// This indirectly tests MergePartialFromCodedStream()
1837
// We have to test each field type separately because we cannot set them at the
1839
TEST_F(OneofTest, SerializationToStream) {
1842
unittest::TestOneof2 message1, message2;
1844
message1.set_foo_int(123);
1845
int size = message1.ByteSize();
1849
// Allow the output stream to buffer only one byte at a time.
1850
io::ArrayOutputStream array_stream(string_as_array(&data), size, 1);
1851
io::CodedOutputStream output_stream(&array_stream);
1852
message1.SerializeWithCachedSizes(&output_stream);
1853
EXPECT_FALSE(output_stream.HadError());
1854
EXPECT_EQ(size, output_stream.ByteCount());
1857
EXPECT_TRUE(message2.ParseFromString(data));
1858
EXPECT_EQ(message2.foo_int(), 123);
1863
unittest::TestOneof2 message1, message2;
1865
message1.set_foo_string("foo");
1866
int size = message1.ByteSize();
1870
// Allow the output stream to buffer only one byte at a time.
1871
io::ArrayOutputStream array_stream(string_as_array(&data), size, 1);
1872
io::CodedOutputStream output_stream(&array_stream);
1873
message1.SerializeWithCachedSizes(&output_stream);
1874
EXPECT_FALSE(output_stream.HadError());
1875
EXPECT_EQ(size, output_stream.ByteCount());
1878
EXPECT_TRUE(message2.ParseFromString(data));
1879
EXPECT_EQ(message2.foo_string(), "foo");
1885
unittest::TestOneof2 message1, message2;
1887
message1.set_foo_bytes("qux");
1888
int size = message1.ByteSize();
1892
// Allow the output stream to buffer only one byte at a time.
1893
io::ArrayOutputStream array_stream(string_as_array(&data), size, 1);
1894
io::CodedOutputStream output_stream(&array_stream);
1895
message1.SerializeWithCachedSizes(&output_stream);
1896
EXPECT_FALSE(output_stream.HadError());
1897
EXPECT_EQ(size, output_stream.ByteCount());
1900
EXPECT_TRUE(message2.ParseFromString(data));
1901
EXPECT_EQ(message2.foo_bytes(), "qux");
1906
unittest::TestOneof2 message1, message2;
1908
message1.set_foo_enum(unittest::TestOneof2::FOO);
1909
int size = message1.ByteSize();
1913
// Allow the output stream to buffer only one byte at a time.
1914
io::ArrayOutputStream array_stream(string_as_array(&data), size, 1);
1915
io::CodedOutputStream output_stream(&array_stream);
1916
message1.SerializeWithCachedSizes(&output_stream);
1917
EXPECT_FALSE(output_stream.HadError());
1918
EXPECT_EQ(size, output_stream.ByteCount());
1921
EXPECT_TRUE(message2.ParseFromString(data));
1922
EXPECT_EQ(message2.foo_enum(), unittest::TestOneof2::FOO);
1927
unittest::TestOneof2 message1, message2;
1929
message1.mutable_foo_message()->set_qux_int(234);
1930
int size = message1.ByteSize();
1934
// Allow the output stream to buffer only one byte at a time.
1935
io::ArrayOutputStream array_stream(string_as_array(&data), size, 1);
1936
io::CodedOutputStream output_stream(&array_stream);
1937
message1.SerializeWithCachedSizes(&output_stream);
1938
EXPECT_FALSE(output_stream.HadError());
1939
EXPECT_EQ(size, output_stream.ByteCount());
1942
EXPECT_TRUE(message2.ParseFromString(data));
1943
EXPECT_EQ(message2.foo_message().qux_int(), 234);
1948
unittest::TestOneof2 message1, message2;
1950
message1.mutable_foogroup()->set_a(345);
1951
int size = message1.ByteSize();
1955
// Allow the output stream to buffer only one byte at a time.
1956
io::ArrayOutputStream array_stream(string_as_array(&data), size, 1);
1957
io::CodedOutputStream output_stream(&array_stream);
1958
message1.SerializeWithCachedSizes(&output_stream);
1959
EXPECT_FALSE(output_stream.HadError());
1960
EXPECT_EQ(size, output_stream.ByteCount());
1963
EXPECT_TRUE(message2.ParseFromString(data));
1964
EXPECT_EQ(message2.foogroup().a(), 345);
1969
TEST_F(OneofTest, MergeFrom) {
1970
unittest::TestOneof2 message1, message2;
1972
message1.set_foo_int(123);
1973
message2.MergeFrom(message1);
1974
TestUtil::ExpectAtMostOneFieldSetInOneof(message2);
1975
EXPECT_TRUE(message2.has_foo_int());
1976
EXPECT_EQ(message2.foo_int(), 123);
1978
message1.set_foo_string("foo");
1979
message2.MergeFrom(message1);
1980
TestUtil::ExpectAtMostOneFieldSetInOneof(message2);
1981
EXPECT_TRUE(message2.has_foo_string());
1982
EXPECT_EQ(message2.foo_string(), "foo");
1985
message1.set_foo_bytes("qux");
1986
message2.MergeFrom(message1);
1987
TestUtil::ExpectAtMostOneFieldSetInOneof(message2);
1988
EXPECT_TRUE(message2.has_foo_bytes());
1989
EXPECT_EQ(message2.foo_bytes(), "qux");
1991
message1.set_foo_enum(unittest::TestOneof2::FOO);
1992
message2.MergeFrom(message1);
1993
TestUtil::ExpectAtMostOneFieldSetInOneof(message2);
1994
EXPECT_TRUE(message2.has_foo_enum());
1995
EXPECT_EQ(message2.foo_enum(), unittest::TestOneof2::FOO);
1997
message1.mutable_foo_message()->set_qux_int(234);
1998
message2.MergeFrom(message1);
1999
TestUtil::ExpectAtMostOneFieldSetInOneof(message2);
2000
EXPECT_TRUE(message2.has_foo_message());
2001
EXPECT_EQ(message2.foo_message().qux_int(), 234);
2003
message1.mutable_foogroup()->set_a(345);
2004
message2.MergeFrom(message1);
2005
TestUtil::ExpectAtMostOneFieldSetInOneof(message2);
2006
EXPECT_TRUE(message2.has_foogroup());
2007
EXPECT_EQ(message2.foogroup().a(), 345);
1291
2011
} // namespace cpp_unittest
1292
2012
} // namespace cpp
1293
2013
} // namespace compiler