Fix bazel test -c opt ...:all Move all side-effectful operations outside of EMBOSS_CHECK and related macros. Add EMBOSS_CHECK_ABORTS and EMBOSS_DCHECK_ABORTS macros, so that tests can enable/disable EXPECT_DEATH.
diff --git a/compiler/back_end/cpp/testcode/auto_array_size_test.cc b/compiler/back_end/cpp/testcode/auto_array_size_test.cc index b220649..8e03d40 100644 --- a/compiler/back_end/cpp/testcode/auto_array_size_test.cc +++ b/compiler/back_end/cpp/testcode/auto_array_size_test.cc
@@ -205,7 +205,9 @@ EXPECT_EQ(0x30U, view.four_byte_array()[2].Read()); EXPECT_EQ(0x40U, view.four_byte_array()[3].Read()); EXPECT_EQ(4U, view.four_byte_array().SizeInBytes()); +#if EMBOSS_CHECK_ABORTS EXPECT_DEATH(view.four_byte_array()[4].Read(), ""); +#endif // EMBOSS_CHECK_ABORTS EXPECT_EQ(0x11U, view.four_struct_array()[0].a().Read()); EXPECT_EQ(0x12U, view.four_struct_array()[0].b().Read()); EXPECT_EQ(0x21U, view.four_struct_array()[1].a().Read()); @@ -215,7 +217,9 @@ EXPECT_EQ(0x41U, view.four_struct_array()[3].a().Read()); EXPECT_EQ(0x42U, view.four_struct_array()[3].b().Read()); EXPECT_EQ(8U, view.four_struct_array().SizeInBytes()); +#if EMBOSS_CHECK_ABORTS EXPECT_DEATH(view.four_struct_array()[4].a().Read(), ""); +#endif // EMBOSS_CHECK_ABORTS EXPECT_EQ(0x50U, view.dynamic_byte_array()[0].Read()); EXPECT_EQ(0x60U, view.dynamic_byte_array()[1].Read()); EXPECT_EQ(0x70U, view.dynamic_byte_array()[2].Read()); @@ -236,14 +240,18 @@ auto writer = MakeAutoSizeView(&buffer); writer.array_size().Write(0); EXPECT_EQ(13U, writer.SizeInBytes()); +#if EMBOSS_CHECK_ABORTS EXPECT_DEATH(writer.dynamic_byte_array()[0].Read(), ""); +#endif // EMBOSS_CHECK_ABORTS writer.array_size().Write(3); EXPECT_EQ(22U, writer.SizeInBytes()); writer.four_byte_array()[0].Write(0x10); writer.four_byte_array()[1].Write(0x20); writer.four_byte_array()[2].Write(0x30); writer.four_byte_array()[3].Write(0x40); +#if EMBOSS_CHECK_ABORTS EXPECT_DEATH(writer.four_byte_array()[4].Write(0), ""); +#endif // EMBOSS_CHECK_ABORTS writer.four_struct_array()[0].a().Write(0x11); writer.four_struct_array()[0].b().Write(0x12); writer.four_struct_array()[1].a().Write(0x21);
diff --git a/compiler/back_end/cpp/testcode/bcd_test.cc b/compiler/back_end/cpp/testcode/bcd_test.cc index da51e8e..fa3cc13 100644 --- a/compiler/back_end/cpp/testcode/bcd_test.cc +++ b/compiler/back_end/cpp/testcode/bcd_test.cc
@@ -95,9 +95,11 @@ EXPECT_EQ(::std::vector</**/ ::std::uint8_t>(kBcd, kBcd + sizeof kBcd), ::std::vector</**/ ::std::uint8_t>(buffer, buffer + sizeof buffer)); +#if EMBOSS_CHECK_ABORTS EXPECT_DEATH(writer.one_byte().Write(100), ""); EXPECT_DEATH(writer.three_byte().Write(1445566), ""); EXPECT_DEATH(writer.ten_bit().Write(400), ""); +#endif // EMBOSS_CHECK_ABORTS } TEST(BcdSizesView, OkIsTrueForGoodBcd) { @@ -146,6 +148,7 @@ view.twelve_bit().UncheckedRead(); } +#if EMBOSS_CHECK_ABORTS TEST(BcdSizesView, ReadingInvalidBcdCrashes) { auto view = BcdSizesView(kBadBcd, sizeof kBadBcd); EXPECT_DEATH(view.one_byte().Read(), ""); @@ -161,6 +164,7 @@ EXPECT_DEATH(view.ten_bit().Read(), ""); EXPECT_DEATH(view.twelve_bit().Read(), ""); } +#endif // EMBOSS_CHECK_ABORTS TEST(BcdSizesView, OkIsFalseForBadBcd) { auto view = BcdSizesView(kBadBcd, sizeof kBadBcd); @@ -270,30 +274,40 @@ auto y = BcdSizesView(&buf_y); EXPECT_TRUE(x.UncheckedEquals(x)); - EXPECT_DEATH(x.Equals(x), ""); EXPECT_TRUE(y.UncheckedEquals(y)); +#if EMBOSS_CHECK_ABORTS + EXPECT_DEATH(x.Equals(x), ""); EXPECT_DEATH(y.Equals(y), ""); +#endif // EMBOSS_CHECK_ABORTS EXPECT_TRUE(x.UncheckedEquals(y)); - EXPECT_DEATH(x.Equals(y), ""); EXPECT_TRUE(y.UncheckedEquals(x)); +#if EMBOSS_CHECK_ABORTS + EXPECT_DEATH(x.Equals(y), ""); EXPECT_DEATH(y.Equals(x), ""); +#endif // EMBOSS_CHECK_ABORTS EXPECT_TRUE(x_const.UncheckedEquals(y)); - EXPECT_DEATH(x_const.Equals(y), ""); EXPECT_TRUE(y.UncheckedEquals(x_const)); +#if EMBOSS_CHECK_ABORTS + EXPECT_DEATH(x_const.Equals(y), ""); EXPECT_DEATH(y.Equals(x_const), ""); +#endif // EMBOSS_CHECK_ABORTS ++buf_y[1]; EXPECT_FALSE(x.UncheckedEquals(y)); - EXPECT_DEATH(x.Equals(y), ""); EXPECT_FALSE(y.UncheckedEquals(x)); +#if EMBOSS_CHECK_ABORTS + EXPECT_DEATH(x.Equals(y), ""); EXPECT_DEATH(y.Equals(x), ""); +#endif // EMBOSS_CHECK_ABORTS EXPECT_FALSE(x_const.UncheckedEquals(y)); - EXPECT_DEATH(x_const.Equals(y), ""); EXPECT_FALSE(y.UncheckedEquals(x_const)); +#if EMBOSS_CHECK_ABORTS + EXPECT_DEATH(x_const.Equals(y), ""); EXPECT_DEATH(y.Equals(x_const), ""); +#endif // EMBOSS_CHECK_ABORTS } } // namespace
diff --git a/compiler/back_end/cpp/testcode/bits_test.cc b/compiler/back_end/cpp/testcode/bits_test.cc index 28e6397..d7591ea 100644 --- a/compiler/back_end/cpp/testcode/bits_test.cc +++ b/compiler/back_end/cpp/testcode/bits_test.cc
@@ -65,7 +65,9 @@ struct_of_bits.four_byte().low_nibble().Write(115); EXPECT_EQ(0xff, data[3]); // Out-of-[range] write. +#if EMBOSS_CHECK_ABORTS EXPECT_DEATH(struct_of_bits.four_byte().low_nibble().Write(100), ""); +#endif // EMBOSS_CHECK_ABORTS } TEST(Bits, StructOfBitsFromText) {
diff --git a/compiler/back_end/cpp/testcode/condition_test.cc b/compiler/back_end/cpp/testcode/condition_test.cc index 2615dc3..029abae 100644 --- a/compiler/back_end/cpp/testcode/condition_test.cc +++ b/compiler/back_end/cpp/testcode/condition_test.cc
@@ -61,6 +61,7 @@ EXPECT_FALSE(writer.xc().Ok()); } +#if EMBOSS_CHECK_ABORTS TEST(Conditional, BasicConditionFalseReadCrashes) { ::std::uint8_t buffer[2] = {1, 2}; auto writer = BasicConditionalWriter(buffer, sizeof buffer); @@ -72,6 +73,7 @@ auto writer = BasicConditionalWriter(buffer, sizeof buffer); EXPECT_DEATH(writer.xc().Write(3), ""); } +#endif // EMBOSS_CHECK_ABORTS TEST(Conditional, BasicConditionTrueSizeIncludesConditionalField) { ::std::uint8_t buffer[2] = {0, 2}; @@ -150,7 +152,9 @@ TEST(Conditional, NegativeConditionFalseReadCrashes) { ::std::uint8_t buffer1[2] = {0, 2}; auto writer1 = NegativeConditionalWriter(buffer1, sizeof buffer1); +#if EMBOSS_CHECK_ABORTS EXPECT_DEATH(writer1.xc().Read(), ""); +#endif // EMBOSS_CHECK_ABORTS ::std::uint8_t buffer2[2] = {0, 0}; auto writer2 = BasicConditionalWriter(buffer2, sizeof buffer2); @@ -163,7 +167,9 @@ TEST(Conditional, NegativeConditionFalseWriteCrashes) { ::std::uint8_t buffer1[2] = {0, 2}; auto writer1 = NegativeConditionalWriter(buffer1, sizeof buffer1); +#if EMBOSS_CHECK_ABORTS EXPECT_DEATH(writer1.xc().Write(3), ""); +#endif // EMBOSS_CHECK_ABORTS ::std::uint8_t buffer2[2] = {0, 2}; auto writer2 = NegativeConditionalWriter(buffer2, sizeof buffer2);
diff --git a/compiler/back_end/cpp/testcode/dynamic_size_test.cc b/compiler/back_end/cpp/testcode/dynamic_size_test.cc index 7147212..a1d5ebf 100644 --- a/compiler/back_end/cpp/testcode/dynamic_size_test.cc +++ b/compiler/back_end/cpp/testcode/dynamic_size_test.cc
@@ -50,7 +50,9 @@ EXPECT_EQ(5U, view.message()[4].Read()); EXPECT_EQ(6U, view.message()[5].Read()); EXPECT_EQ(6U, view.message().SizeInBytes()); +#if EMBOSS_CHECK_ABORTS EXPECT_DEATH(view.message()[6].Read(), ""); +#endif // EMBOSS_CHECK_ABORTS EXPECT_EQ(0x0a090807U, view.crc32().Read()); } @@ -58,7 +60,9 @@ TEST(MessageView, PaddingFieldWorks) { auto view = MessageView(&kMessage); EXPECT_EQ(0U, view.padding().SizeInBytes()); +#if EMBOSS_CHECK_ABORTS EXPECT_DEATH(view.padding()[0].Read(), ""); +#endif // EMBOSS_CHECK_ABORTS } static constexpr ::std::array</**/ ::std::uint8_t, 16> kPaddedMessage = {{ @@ -80,13 +84,17 @@ EXPECT_EQ(3U, view.padding()[2].Read()); EXPECT_EQ(4U, view.padding()[3].Read()); EXPECT_EQ(4U, view.padding().SizeInBytes()); +#if EMBOSS_CHECK_ABORTS EXPECT_DEATH(view.padding()[4].Read(), ""); +#endif // EMBOSS_CHECK_ABORTS EXPECT_EQ(5U, view.message()[0].Read()); EXPECT_EQ(6U, view.message()[1].Read()); EXPECT_EQ(7U, view.message()[2].Read()); EXPECT_EQ(8U, view.message()[3].Read()); EXPECT_EQ(4U, view.message().SizeInBytes()); +#if EMBOSS_CHECK_ABORTS EXPECT_DEATH(view.message()[4].Read(), ""); +#endif // EMBOSS_CHECK_ABORTS EXPECT_EQ(0x0c0b0a09U, view.crc32().Read()); } @@ -103,8 +111,10 @@ writer.message()[i].Write(i + 1); } EXPECT_EQ(12U, writer.SizeInBytes()); +#if EMBOSS_CHECK_ABORTS EXPECT_DEATH(writer.message()[writer.message_length().Read()].Read(), ""); EXPECT_DEATH(writer.padding()[0].Read(), ""); +#endif // EMBOSS_CHECK_ABORTS writer.crc32().Write(0x0a090807); EXPECT_EQ( ::std::vector</**/ ::std::uint8_t>(kMessage.begin(), kMessage.end()),
diff --git a/compiler/back_end/cpp/testcode/enum_test.cc b/compiler/back_end/cpp/testcode/enum_test.cc index 7b5ca4d..4f9f1e4 100644 --- a/compiler/back_end/cpp/testcode/enum_test.cc +++ b/compiler/back_end/cpp/testcode/enum_test.cc
@@ -126,7 +126,9 @@ kManifestEntry, kManifestEntry + sizeof kManifestEntry), ::std::vector</**/ ::std::uint8_t>(buffer, buffer + sizeof buffer)); +#if EMBOSS_CHECK_ABORTS EXPECT_DEATH(writer.kind().Write(Kind::LARGE_VALUE), ""); +#endif // EMBOSS_CHECK_ABORTS writer.kind().Write(static_cast<Kind>(0xff)); EXPECT_EQ(static_cast<Kind>(0xff), writer.kind().Read()); EXPECT_EQ(0xff, buffer[0]);
diff --git a/compiler/back_end/cpp/testcode/requires_test.cc b/compiler/back_end/cpp/testcode/requires_test.cc index 66fbe7f..661fe6a 100644 --- a/compiler/back_end/cpp/testcode/requires_test.cc +++ b/compiler/back_end/cpp/testcode/requires_test.cc
@@ -118,7 +118,9 @@ EXPECT_TRUE(view.must_be_false().CouldWriteValue(false)); EXPECT_TRUE(view.alias_of_a_must_be_true().CouldWriteValue(true)); EXPECT_FALSE(view.alias_of_a_must_be_true().CouldWriteValue(false)); +#if EMBOSS_CHECK_ABORTS EXPECT_DEATH(view.alias_of_a_must_be_true().Write(false), ""); +#endif // EMBOSS_CHECK_ABORTS } TEST(RequiresEnums, Ok) {
diff --git a/compiler/back_end/cpp/testcode/virtual_field_test.cc b/compiler/back_end/cpp/testcode/virtual_field_test.cc index 1c5de41..fbedf6a 100644 --- a/compiler/back_end/cpp/testcode/virtual_field_test.cc +++ b/compiler/back_end/cpp/testcode/virtual_field_test.cc
@@ -90,12 +90,14 @@ EXPECT_EQ(-250, view.product().Read()); } +#if EMBOSS_CHECK_ABORTS TEST(Computed, ReadFailsWhenUnderlyingFieldIsNotOk) { ::std::array<char, 0> values = {}; const auto view = MakeStructureWithComputedValuesView(&values); EXPECT_DEATH(view.value().Read(), ""); EXPECT_DEATH(view.doubled().Read(), ""); } +#endif // EMBOSS_CHECK_ABORTS // Check the return types of nonstatic Read methods. static_assert( @@ -189,7 +191,9 @@ EXPECT_EQ(6, view.x_plus_one().UncheckedRead()); view.x().Write(0x80000000U); EXPECT_FALSE(view.has_two_x().Value()); +#if EMBOSS_CHECK_ABORTS EXPECT_DEATH(view.two_x().Read(), ""); +#endif // EMBOSS_CHECK_ABORTS EXPECT_TRUE(view.has_x_plus_one().Value()); EXPECT_EQ(0x80000001U, view.x_plus_one().Read()); } @@ -199,7 +203,9 @@ const auto view = MakeStructureWithConditionalValueView(&values[0], 1); EXPECT_FALSE(view.Ok()); EXPECT_FALSE(view.x().Ok()); +#if EMBOSS_CHECK_ABORTS EXPECT_DEATH(view.two_x().Read(), ""); +#endif // EMBOSS_CHECK_ABORTS EXPECT_EQ(0, view.two_x().UncheckedRead()); }