| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <zircon/assert.h> |
| #include <zircon/types.h> |
| |
| #include <zxtest/zxtest.h> |
| |
| #include "helper.h" |
| |
| // Sanity check that looks for bugs in C macro implementation of ASSERT_*/EXPECT_*. This forces |
| // the text replacement and allows the compiler to find errors. Otherwise is left to the user |
| // to find errors once the macro is first used. Also we validate that the assertions return |
| // and expects don't. |
| // Tests will fail because we are verifying they actually work as intended, though the |
| // pass/fail behavior is decided based on Verify functions. |
| TEST(ZxTestCAssertionTest, Fail) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, |
| "FAIL(...) macro did not abort test execution."); |
| FAIL("Something bad happened"); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertTrueAndFalse) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, "EXPECT/ASSERT_TRUE/FALSE returned on success."); |
| EXPECT_TRUE(true, "EXPECT_TRUE failed."); |
| EXPECT_FALSE(false, "EXPECT_FALSE failed."); |
| ASSERT_TRUE(true, "ASSERT_TRUE failed."); |
| ASSERT_FALSE(false, "ASSERT_FALSE failed."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertTrueAndFalseFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "EXPECT/ASSERT_TRUE/FALSE returned on success."); |
| EXPECT_TRUE(false, "EXPECT_TRUE succeed"); |
| EXPECT_FALSE(true, "EXPECT_FALSE succeed."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertFalseFailureFatal) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, |
| "ASSERT_FALSE failed to abort test execution."); |
| ASSERT_FALSE(true, "ASSERT_FALSE success."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertTrueFailureFatal) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, |
| "ASSERT_TRUE failed to abort test execution."); |
| ASSERT_TRUE(false, "ASSERT_TRUE succeed."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertEQSuccess) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, "ASSERT/EXPECT_EQ aborted test on success."); |
| int a = 1; |
| int b = 2; |
| |
| // Happy cases. |
| EXPECT_EQ(1, 1, "EXPECT_EQ identity failed."); |
| ASSERT_EQ(1, 1, "ASSERT_EQ identity failed."); |
| EXPECT_EQ(a, a, "EXPECT_EQ identity failed."); |
| ASSERT_EQ(b, b, "ASSERT_EQ identity failed."); |
| // No failures |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertEQFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "EXPECT_EQ aborted execution."); |
| int a = 1; |
| int b = 2; |
| |
| EXPECT_EQ(1, 2, "EXPECT_EQ inequality detection succeeded."); |
| EXPECT_EQ(a, b, "EXPECT_EQ inequality detection succeeded."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertEQFailureFatal) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, "ASSERT_EQ did not abort test execution."); |
| ASSERT_EQ(1, 2, "ASSERT_EQ inequality detection succeeded."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertNESuccess) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, "EXPECT_NE aborted test execution."); |
| int a = 1; |
| int b = 2; |
| |
| // Happy cases. |
| EXPECT_NE(1, 2, "EXPECT_NE inequality detection succeeded."); |
| EXPECT_NE(a, b, "EXPECT_NE inequality detection succeeded."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertNEFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "EXPECT_NE aborted test execution."); |
| int a = 1; |
| |
| EXPECT_NE(1, 1, "EXPECT_NE equality detection succeeded."); |
| EXPECT_NE(a, a, "EXPECT_NE equality detection succeeded."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertNEFailureFatal) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, "ASSERT_NE did not abort test execution."); |
| int a = 1; |
| int b = 1; |
| ASSERT_NE(a, b, "ASSERT_NE equality detection succeeded."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertLT) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, "ASSERT_LT did not abort test execution."); |
| int a = 1; |
| int b = 2; |
| |
| // Happy cases. |
| ASSERT_LT(1, 2, "ASSERT_LT failed."); |
| EXPECT_LT(a, b, "EXPECT_LT failed."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertLTFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "ASSERT_LT did not abort test execution."); |
| int a = 1; |
| int b = 2; |
| |
| EXPECT_LT(2, 1, "EXPECT_LT failed."); |
| EXPECT_LT(b, a, "EXPECT_LT failed."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertLTFailureFatal) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, "ASSERT_LT did not abort test execution."); |
| int a = 1; |
| int b = 2; |
| |
| ASSERT_LT(b, a, "EXPECT_LT failed."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertLE) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, |
| "ASSERT/EXPECT_LE aborted test execution on success."); |
| int a = 1; |
| int b = 2; |
| |
| // Happy cases. |
| ASSERT_LE(1, 2, "ASSERT_LE failed."); |
| ASSERT_LE(1, 1, "ASSERT_LE failed."); |
| EXPECT_LE(a, b, "EXPECT_LE failed."); |
| EXPECT_LE(a, a, "EXPECT_LE failed."); |
| // No failures |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertLEFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "EXPECT_LE aborted test execution."); |
| int a = 1; |
| int b = 2; |
| |
| EXPECT_LE(2, 1, "EXPECT_LE failed."); |
| EXPECT_LE(b, a, "EXPECT_LE failed."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertLEFailureFatal) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, "ASSERT_LE did not abort test execution."); |
| int a = 1; |
| int b = 2; |
| |
| ASSERT_LE(b, a, "EXPECT_LE failed."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertGT) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, "EXPECT_GT aborted test execution on success."); |
| int a = 1; |
| int b = 2; |
| |
| EXPECT_GT(2, 1, "EXPECT_GT failed."); |
| EXPECT_GT(b, a, "EXPECT_GT failed."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertGTFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "EXPECT_GT aborted test execution."); |
| int a = 1; |
| int b = 2; |
| |
| EXPECT_GT(a, b, "EXPECT_GT succeeded."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertGTFatalFailure) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, "EXPECT_GT did aborted test execution."); |
| int a = 1; |
| int b = 2; |
| |
| ASSERT_GT(a, b, "ASSERT_GT succeeded."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertGE) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, |
| "ASSERT/EXPECT_GE aborted test execution on success."); |
| int a = 1; |
| int b = 2; |
| |
| ASSERT_GE(2, 1, "ASSERT_GE failed."); |
| ASSERT_GE(1, 1, "ASSERT_GE failed."); |
| EXPECT_GE(b, a, "EXPECT_GE failed."); |
| EXPECT_GE(a, a, "EXPECT_GE failed."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertGEFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, |
| "ASSERT/EXPECT_GE aborted test execution on success."); |
| int a = 1; |
| int b = 2; |
| |
| EXPECT_GE(1, 2, "EXPECT_GE failed."); |
| EXPECT_GE(a, b, "EXPECT_GE failed."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertGEFailureFatal) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, |
| "ASSERT/EXPECT_GE aborted test execution on success."); |
| int a = 1; |
| int b = 2; |
| |
| ASSERT_GE(a, b, "EXPECT_GE failed."); |
| ZX_ASSERT_MSG(LIB_ZXTEST_ABORT_IF_ERROR, "Assert was did not abort test."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertStrEq) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, |
| "ASSERT/EXPECT_STREQ aborted test execution on success."); |
| const char* str1 = "a"; |
| const char* str2 = "a"; |
| |
| EXPECT_STREQ(str1, str2, "ASSERT_STREQ failed to identify equal strings."); |
| EXPECT_STREQ(str1, str1, "ASSERT_STREQ failed to identify equal strings."); |
| ASSERT_STREQ(str1, str2, "ASSERT_STREQ failed to identify equal strings."); |
| ASSERT_STREQ(str1, str1, "ASSERT_STREQ failed to identify equal strings."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertStrNe) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, |
| "ASSERT/EXPECT_STREQ aborted test execution on success."); |
| const char* str1 = "a"; |
| const char* str2 = "b"; |
| |
| EXPECT_STRNE(str1, str2, "EXPECT_STRNE failed to identify different strings."); |
| ASSERT_STRNE(str1, str2, "ASSERT_STRNE failed to identify different strings."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertStrEqFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "EXPECT_STREQ aborted test execution."); |
| const char* str1 = "a"; |
| const char* str2 = "b"; |
| |
| EXPECT_STREQ(str1, str2, "ASSERT_STREQ failed to identify equal strings."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertStrEqFatalFailure) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, |
| "ASSERT/EXPECT_STREQ aborted test execution on success."); |
| const char* str1 = "a"; |
| const char* str2 = "b"; |
| |
| ASSERT_STREQ(str1, str2, "ASSERT_STREQ failed to identify equal strings."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertExpectSubStr) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, |
| "ASSERT/EXPECT_SUBSTR aborted test execution on success."); |
| const char* str = "abc"; |
| const char* target = "bc"; |
| |
| EXPECT_SUBSTR(str, target, "EXPECT_SUBSTR failed to find substring."); |
| ASSERT_SUBSTR(str, target, "ASSERT_SUBSTR failed to find substring."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, ExpectSubStrFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "EXPECT_SUBSTR aborted test execution."); |
| const char* str = "abc"; |
| const char* target = "bcd"; |
| |
| EXPECT_SUBSTR(str, target, "EXPECT_SUBSTR unexpectedly found substring."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertSubStrFatalFailure) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, |
| "ASSERT_SUBSTR aborted test execution on success."); |
| const char* str = "abc"; |
| const char* target = "bcd"; |
| |
| ASSERT_SUBSTR(str, target, "ASSERT_SUBSTR unexpectedly found substring."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertExpectNotSubStr) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, |
| "ASSERT/EXPECT_SUBSTR aborted test execution on success."); |
| const char* str = "abc"; |
| const char* target = "bcd"; |
| |
| EXPECT_NOT_SUBSTR(str, target, "EXPECT_SUBSTR failed to find substring."); |
| ASSERT_NOT_SUBSTR(str, target, "ASSERT_SUBSTR failed to find substring."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, ExpectNotSubStrFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "EXPECT_SUBSTR aborted test execution."); |
| const char* str = "abc"; |
| const char* target = "bc"; |
| |
| EXPECT_NOT_SUBSTR(str, target, "EXPECT_SUBSTR unexpectedly found substring."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertNotSubStrFatalFailure) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, |
| "ASSERT_SUBSTR aborted test execution on success."); |
| const char* str = "abc"; |
| const char* target = "bc"; |
| |
| ASSERT_NOT_SUBSTR(str, target, "ASSERT_SUBSTR unexpectedly found substring."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertNotNull) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, |
| "ASSERT/EXPECT_NOT_NULL aborted test execution on success."); |
| char a; |
| |
| EXPECT_NOT_NULL(&a, "ASSERT_NOT_NULL failed to identify NULL."); |
| ASSERT_NOT_NULL(&a, "ASSERT_NOT_NULL failed to identify NULL."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertNotNullFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "EXPECT_NOT_NULL aborted test execution."); |
| char* a = NULL; |
| |
| EXPECT_NOT_NULL(a, "EXPECT_NOT_NULL identified NULL."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertNotNullFatalFailure) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, |
| "ASSERT_NOT_NULL did not abort test execution."); |
| char* a = NULL; |
| |
| ASSERT_NOT_NULL(a, "ASSERT_NOT_NULL identified NULL."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertNull) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, |
| "ASSERT/EXPECT_NULL aborted test execution on success."); |
| char* a = NULL; |
| |
| ASSERT_NULL(a, "ASSERT_NULL did not identify NULL."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertNullFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "EXPECT_NULL aborted test execution."); |
| char b; |
| char* a = &b; |
| |
| EXPECT_NULL(a, "EXPECT_NOT_NULL identified NULL."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertNullFatalFailure) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, "ASSERT_NULL did not abort test execution."); |
| char b; |
| char* a = &b; |
| |
| ASSERT_NULL(a, "ASSERT_NOT_NULL identified NULL."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertOk) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, |
| "ASSERT/EXPECT_OK aborted test execution on success."); |
| zx_status_t status = ZX_OK; |
| |
| EXPECT_OK(status, "EXPECT_OK failed to identify ZX_OK."); |
| ASSERT_OK(status, "ASSERT_OK failed to identify ZX_OK."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertOkFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "EXPECT_OK aborted test execution."); |
| zx_status_t status = ZX_ERR_BAD_STATE; |
| |
| EXPECT_OK(status, "EXPECT_OK failed to identify error."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertOkFatalFailure) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, "EXPECT_OK aborted test execution."); |
| zx_status_t status = ZX_ERR_BAD_STATE; |
| |
| ASSERT_OK(status, "ASSERT_OK failed to identify error."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertOkWithOverloadedReturnTypeFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "EXPECT_OK aborted test execution."); |
| |
| EXPECT_OK(4, "EXPECT_OK failed to identify error."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertOkWithOverloadedReturnTypeFatalFailure) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, "ASSERT_OK aborted test execution."); |
| |
| ASSERT_OK(4, "ASSERT_OK failed to identify error."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertNotOk) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, |
| "ASSERT/EXPECT_NOT_OK aborted test execution on success."); |
| zx_status_t status = ZX_ERR_BAD_STATE; |
| |
| EXPECT_NOT_OK(status, "EXPECT_NOT_OK failed to identify ZX_NOT_OK."); |
| ASSERT_NOT_OK(status, "ASSERT_NOT_OK failed to identify ZX_NOT_OK."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertNotOkFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "EXPECT_NOT_OK aborted test execution."); |
| zx_status_t status = ZX_OK; |
| |
| EXPECT_NOT_OK(status, "EXPECT_NOT_OK failed to identify error."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertNotOkFatalFailure) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, "ASSERT_NOT_OK aborted test execution."); |
| zx_status_t status = ZX_OK; |
| |
| ASSERT_NOT_OK(status, "ASSERT_NOT_OK failed to identify error."); |
| TEST_CHECKPOINT(); |
| } |
| |
| struct mytype { |
| int a; |
| int b; |
| }; |
| |
| TEST(ZxTestCAssertionTest, AssertBytesEq) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, |
| "ASSERT/EXPECT_BYTES_EQ aborted test execution on success."); |
| struct mytype a, b; |
| a.a = 0; |
| a.b = 1; |
| b.a = 0; |
| b.b = 1; |
| |
| ASSERT_BYTES_EQ(&a, &a, sizeof(struct mytype), "ASSERT_BYTES_EQ identity failed."); |
| EXPECT_BYTES_EQ(&a, &a, sizeof(struct mytype), "EXPECT_BYTES_EQ identity failed."); |
| ASSERT_BYTES_EQ(&a, &b, sizeof(struct mytype), "ASSERT_BYTES_EQ identity failed."); |
| EXPECT_BYTES_EQ(&a, &b, sizeof(struct mytype), "EXPECT_BYTES_EQ identity failed."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertBytesEqFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "EXPECT_OK aborted test execution."); |
| struct mytype a, b; |
| a.a = 0; |
| a.b = 1; |
| b.a = 0; |
| b.b = 2; |
| |
| EXPECT_BYTES_EQ(&a, &b, sizeof(struct mytype), "EXPECT_BYTES_EQ identity failed."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertBytesEqFatalFailure) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, "EXPECT_OK aborted test execution."); |
| struct mytype a, b; |
| a.a = 0; |
| a.b = 1; |
| b.a = 0; |
| b.b = 2; |
| |
| ASSERT_BYTES_EQ(&a, &b, sizeof(struct mytype), "ASSERT_BYTES_EQ identity failed."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertBytesNe) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, |
| "ASSERT/EXPECT_BYTES_NE aborted test execution on success."); |
| struct mytype a, b; |
| a.a = 0; |
| a.b = 1; |
| b.a = 0; |
| b.b = 2; |
| |
| ASSERT_BYTES_NE(&a, &b, sizeof(struct mytype), "ASSERT_BYTES_NE identity failed."); |
| EXPECT_BYTES_NE(&a, &b, sizeof(struct mytype), "EXPECT_BYTES_NE identity failed."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertBytesNeFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "EXPECT_OK aborted test execution."); |
| struct mytype a, b; |
| a.a = 0; |
| a.b = 1; |
| b.a = 0; |
| b.b = 1; |
| |
| EXPECT_BYTES_NE(&a, &b, sizeof(struct mytype), "ASSERT_BYTES_NE identity failed."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertBytesNeFatalFailure) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, "EXPECT_OK aborted test execution."); |
| struct mytype a, b; |
| a.a = 0; |
| a.b = 1; |
| b.a = 0; |
| b.b = 1; |
| |
| ASSERT_BYTES_NE(&a, &b, sizeof(struct mytype), "ASSERT_BYTES_NE identity failed."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertBytesEqArray) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, |
| "ASSERT_BYTES_EQ failed to compare array contents."); |
| int a[] = {1, 2, 3, 4, 5}; |
| int b[] = {1, 2, 3, 4, 5}; |
| |
| ASSERT_BYTES_EQ(a, a, sizeof(int) * 5, "ASSERT_BYTES_EQ identity failed."); |
| ASSERT_BYTES_EQ(a, b, sizeof(int) * 5, "ASSERT_BYTES_EQ identity failed."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertBytesEqArrayFailure) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, |
| "ASSERT_BYTES_EQ did not abort test execution."); |
| int a[] = {1, 2, 3, 4, 5}; |
| int b[] = {1, 2, 3, 4, 6}; |
| |
| ASSERT_BYTES_EQ(a, b, sizeof(int) * 5, "ASSERT_BYTES_EQ identified different arrays."); |
| TEST_CHECKPOINT(); |
| } |
| |
| static int called = 0; |
| static int getter_called = 0; |
| static int* Increase(void) { |
| ++called; |
| return &called; |
| } |
| |
| static int* Get(void) { |
| getter_called++; |
| return &called; |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertSingleCall) { |
| called = 0; |
| getter_called = 0; |
| EXPECT_EQ(*Get(), *Increase()); |
| ZX_ASSERT_MSG(called == 1, "ASSERT_* evaluating multiple times."); |
| ZX_ASSERT_MSG(getter_called == 1, "ASSERT_* evaluating multiple times."); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertBytesSingleCall) { |
| called = 0; |
| getter_called = 0; |
| EXPECT_BYTES_EQ(Get(), Increase(), sizeof(int)); |
| ZX_ASSERT_MSG(called == 1, "ASSERT_BYTES_* evaluating multiple times."); |
| ZX_ASSERT_MSG(getter_called == 1, "ASSERT_* evaluating multiple times."); |
| } |
| |
| static void HelperFnFatal(bool fail) { ASSERT_FALSE(fail, "Expected to fail."); } |
| |
| TEST(ZxTestCAssertionTest, AssertNoFatalFailureWithFatalFailure) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, |
| "Failed to abort test execution on helper fatal failure."); |
| ASSERT_NO_FATAL_FAILURE(HelperFnFatal(true), "HelperFnFatal had a failure. This is expected."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertNoFatalFailureWithPreviousErrorDoesNotRunStatement) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, |
| "Failed to abort test execution on helper fatal failure."); |
| HelperFnFatal(true); |
| ASSERT_NO_FATAL_FAILURE({ TEST_CHECKPOINT(); }, "HelperFnFatal had a failure. This is expected."); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertNoFatalFailureWithoutFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, |
| "Aborted test execution on helper with no failures."); |
| ASSERT_NO_FATAL_FAILURE(HelperFnFatal(false), |
| "HelperFnFatal had a failure. This is not expected."); |
| TEST_CHECKPOINT(); |
| } |
| |
| static void HelperFn(bool fail) { EXPECT_FALSE(fail, "Expected to fail."); } |
| |
| TEST(ZxTestCAssertionTest, AssertNoFatalFailureWithFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "Aborted test execution on helper failure."); |
| ASSERT_NO_FATAL_FAILURE(HelperFn(true), "HelperFn had a failure. This is expected."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertTrueCoerceTypeToBoolFailure) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, "Failed to identify false."); |
| int a = 0; |
| ASSERT_TRUE(a, "0 coerced to false."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertTrueCoerceTypeToBool) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, "Failed to identify true."); |
| int a = 1; |
| ASSERT_TRUE(a, "1 not coerced to true."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertFalseCoerceTypeToBool) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, "Failed to identify false."); |
| int a = 0; |
| ASSERT_FALSE(a, "0 not coerced to false."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertFalseCoerceTypeToBoolFailure) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, "Failed to identify true."); |
| int a = 1; |
| ASSERT_FALSE(a, "1 coerced to true."); |
| TEST_CHECKPOINT(); |
| } |
| |
| static int SomeFn(void) { return 0; } |
| |
| TEST(ZxTestCAssertionTest, FunctionPointerNotNull) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, "Failed to identify false."); |
| int (*some_fn)(void) = &SomeFn; |
| ASSERT_NOT_NULL(some_fn); |
| EXPECT_NOT_NULL(some_fn); |
| ASSERT_EQ(some_fn, &SomeFn); |
| ASSERT_NE(some_fn, NULL); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, FunctionPointerNull) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, "Failed to identify nullptr."); |
| int (*some_fn)(void) = NULL; |
| ASSERT_NULL(some_fn); |
| EXPECT_NULL(some_fn); |
| ASSERT_NE(some_fn, &SomeFn); |
| ASSERT_EQ(some_fn, NULL); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, PromoteLiteralIntegersOnComp) { |
| int32_t a = -1; |
| int64_t b = 2; |
| int16_t c = -1; |
| int64_t d = 1; |
| |
| uint32_t e = 1; |
| uint64_t f = 2; |
| uint64_t g = 3; |
| uint16_t h = 1; |
| |
| // Signed to wider ints. |
| ASSERT_EQ(a, b); |
| ASSERT_GE(b, a); |
| ASSERT_LE(a, b); |
| ASSERT_GT(b, c); |
| ASSERT_LT(b, a); |
| ASSERT_GT(b, d); |
| |
| // Signed comparison with literals. |
| ASSERT_EQ(-1, a); |
| ASSERT_EQ(1, d); |
| ASSERT_LT(c, 3); |
| ASSERT_GT(b, 1); |
| ASSERT_GE(b, 2); |
| |
| // Unsigned to wider ints. |
| ASSERT_EQ(e, h); |
| ASSERT_GE(g, f); |
| ASSERT_LE(f, g); |
| ASSERT_GT(g, e); |
| ASSERT_LT(h, f); |
| |
| // Unsigned comparison with literals. |
| ASSERT_EQ(1, e); |
| ASSERT_LT(f, 4); |
| ASSERT_LE(f, 2); |
| ASSERT_GT(g, 2); |
| ASSERT_GE(g, 3); |
| } |
| |
| TEST(ZxTestCAssertionTest, PrintfLikeDescs) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "Failed to identify true."); |
| int a = 1; |
| EXPECT_FALSE(a, "Message "); |
| EXPECT_FALSE(a, "One %d ", a); |
| EXPECT_FALSE(a, "More than one %d %d.", a, a); |
| EXPECT_FALSE(a, "More than one %d %d %d %d %d.", a, a, a, a, a); |
| EXPECT_FALSE(a, "More than one %d %d %d %d %d %d %d %d %d %d %d %d %d %d.", a, a, a, a, a, a, a, |
| a, a, a, a, a, a, a); |
| TEST_CHECKPOINT(); |
| } |
| |
| static int HasExpects(void) { |
| EXPECT_EQ(1, 2); |
| return 0; |
| } |
| |
| TEST(ZxTestCAssertionTest, NonVoidHelperTestNonFatalFailures) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "Failed to propagate assertion error."); |
| ASSERT_NO_FATAL_FAILURE(HasExpects()); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertNoFailures) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, "Failed to detect non fatal failure"); |
| ASSERT_NO_FAILURES(HasExpects()); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AddFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "Failed to detect non fatal failure"); |
| ADD_FAILURE("Something went wrong."); |
| ASSERT_NO_FATAL_FAILURE(); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AddFatalFailure) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, "Failed to detect fatal failure"); |
| ADD_FATAL_FAILURE("Something went wrong."); |
| ASSERT_NO_FATAL_FAILURE(); |
| TEST_CHECKPOINT(); |
| } |
| |
| static void AssertFail(void) { |
| ASSERT_TRUE(false); |
| return; |
| } |
| |
| TEST(ZxTestCAssertionTest, CurrentTestHasFailuresDetectsNonFatalFailures) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "Failed to detect failure"); |
| EXPECT_TRUE(false); |
| ASSERT_TRUE(CURRENT_TEST_HAS_FAILURES()); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, CurrentTestHasFailuresDetectsFatalFailures) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "Failed to detect failure"); |
| AssertFail(); |
| ASSERT_TRUE(CURRENT_TEST_HAS_FAILURES()); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, CurrentTestHasFatalFailuresIgnoresNonFatalFailures) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "Failed to detect failure"); |
| EXPECT_TRUE(false); |
| ASSERT_FALSE(CURRENT_TEST_HAS_FATAL_FAILURE()); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, CurrentTestHasFatalFailuresDetectsFatalFailures) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "Failed to detect failure"); |
| AssertFail(); |
| ASSERT_TRUE(CURRENT_TEST_HAS_FATAL_FAILURE()); |
| TEST_CHECKPOINT(); |
| } |
| |
| #ifdef __Fuchsia__ |
| static void Crash(void) { ZX_ASSERT(false); } |
| |
| static void Success(void) { ZX_ASSERT(true); } |
| |
| TEST(ZxTestCAssertionTest, AssertDeathWithCrashingStatement) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, "Failed to detect crash"); |
| ASSERT_DEATH(&Crash, "Crash was not raised."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertDeathWithSuccessfulStatement) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, "Failed to detect crash"); |
| ASSERT_DEATH(&Success, "Crash was not raised."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertNoDeathWithSuccessfulStatement) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, "Failed to detect crash"); |
| ASSERT_NO_DEATH(&Success, "Crash was raised."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertNoDeathWithCrashingStatement) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, "Failed to detect crash"); |
| ASSERT_NO_DEATH(&Crash, "Crash was raised."); |
| TEST_CHECKPOINT(); |
| } |
| |
| #endif |
| |
| TEST(ZxTestCAssertionTest, AssertBytesEqVla) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, "Failed to check buffer eq."); |
| volatile int len = 2; |
| char a[len]; |
| const char* b = (const char*)a; |
| |
| memset(a, 0, len); |
| |
| ASSERT_BYTES_EQ(a, b, len); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertStatusSuccess) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, "ASSERT/EXPECT_STATUS aborted test on success."); |
| zx_status_t a = ZX_ERR_BAD_STATE; |
| zx_status_t b = ZX_ERR_BAD_STATE; |
| |
| // Happy cases. |
| EXPECT_STATUS(a, ZX_ERR_BAD_STATE, "EXPECT_STATUS identity failed."); |
| EXPECT_STATUS(ZX_ERR_BAD_STATE, a, "EXPECT_STATUS identity failed."); |
| ASSERT_STATUS(ZX_OK, ZX_OK, "ASSERT_STATUS identity failed."); |
| EXPECT_STATUS(a, a, "EXPECT_STATUS identity failed."); |
| ASSERT_STATUS(b, b, "ASSERT_STATUS identity failed."); |
| ASSERT_STATUS(a, b, "ASSERT_STATUS identity failed."); |
| // No failures |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertStatusFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "EXPECT_STATUS aborted execution."); |
| zx_status_t a = ZX_ERR_INVALID_ARGS; |
| zx_status_t b = ZX_ERR_BAD_STATE; |
| |
| EXPECT_STATUS(ZX_OK, ZX_ERR_INVALID_ARGS, "EXPECT_STATUS inequality detection succeeded."); |
| EXPECT_STATUS(a, b, "EXPECT_STATUS inequality detection succeeded."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertStatusFailureFatal) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, |
| "ASSERT_STATUS did not abort test execution."); |
| ASSERT_STATUS(ZX_OK, ZX_ERR_BAD_STATE, "ASSERT_STATUS inequality detection succeeded."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertNotStatusSuccess) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS, "EXPECT_NOT_STATUS aborted test execution."); |
| zx_status_t a = ZX_ERR_BAD_STATE; |
| zx_status_t b = ZX_ERR_INVALID_ARGS; |
| |
| // Happy cases. |
| EXPECT_NOT_STATUS(ZX_OK, ZX_ERR_BAD_STATE, "EXPECT_NOT_STATUS inequality detection succeeded."); |
| EXPECT_NOT_STATUS(a, b, "EXPECT_NOT_STATUS inequality detection succeeded."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertNotStatusFailure) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, HAS_ERRORS, "EXPECT_NOT_STATUS aborted test execution."); |
| zx_status_t a = ZX_OK; |
| |
| EXPECT_NOT_STATUS(ZX_ERR_BAD_STATE, ZX_ERR_BAD_STATE, |
| "EXPECT_NOT_STATUS equality detection suceeded."); |
| EXPECT_NOT_STATUS(a, a, "EXPECT_NOT_STATUS equality detection suceeded."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertNotStatusFailureFatal) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, |
| "ASSERT_NOT_STATUS did not abort test execution."); |
| zx_status_t a = ZX_OK; |
| zx_status_t b = ZX_OK; |
| |
| ASSERT_NOT_STATUS(a, b, "ASSERT_NOT_STATUS equality detection succeeded."); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionTest, AssertSkip) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, NO_ERRORS, "AssertSkip did not skip"); |
| ZXTEST_SKIP("Test skipped"); |
| FAIL("Skip test did not skip"); |
| TEST_CHECKPOINT(); |
| } |
| TEST(ZxTestCAssertionsTest, AssertNotSkipped) { |
| TEST_EXPECTATION(CHECKPOINT_REACHED, NO_ERRORS | NOT_SKIPPED, |
| "Test should not appear to be skipped."); |
| EXPECT_FALSE(LIB_ZXTEST_IS_SKIPPED); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionsTest, AssertSkipIsSkipped) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, NO_ERRORS | SKIPPED, |
| "Test should appear to be skipped."); |
| ZXTEST_SKIP("Test skipped"); |
| TEST_CHECKPOINT(); |
| } |
| |
| TEST(ZxTestCAssertionsTest, AssertSkipAfterError) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS | SKIPPED, |
| "Test should have an error while also being skipped."); |
| EXPECT_TRUE(false); |
| ZXTEST_SKIP("Test skipped"); |
| TEST_CHECKPOINT(); |
| } |
| |
| void gets_skipped(void) { ZXTEST_SKIP("Skipping test"); } |
| |
| TEST(ZxTestCAssertionsTest, AssertSkipped) { |
| gets_skipped(); |
| ZX_ASSERT_MSG(LIB_ZXTEST_IS_SKIPPED, "Test should have been skipped."); |
| } |
| |
| TEST(ZxTestCAssertionTest, ScopedTrace) { |
| TEST_EXPECTATION(CHECKPOINT_NOT_REACHED, HAS_ERRORS, "Failure should have happened."); |
| SCOPED_TRACE("This is a trace."); |
| FAIL(); |
| } |