diff --git a/tests/unittests/test-mydevmode.cpp b/tests/unittests/test-mydevmode.cpp index 4ff70975d6..97d31834cc 100644 --- a/tests/unittests/test-mydevmode.cpp +++ b/tests/unittests/test-mydevmode.cpp @@ -258,6 +258,35 @@ TEST(MYDEVMODETest, operatorNotEqual) EXPECT_EQ(myDevMode, value); } +/*! + * @brief 否定の等価演算子のテスト + * 文字列メンバの末尾(通常はNUL文字)が異なるパターンを検出できるかチェックする + */ +TEST(MYDEVMODETest, operatorNotEqualAntiLazyCode) +{ + // デフォルトで初期化 + MYDEVMODE value, other; + + // スタック変数のアドレスをchar*にキャストしてデータを書き替える + char* buf1 = reinterpret_cast(&value); + ::memset(buf1, 'a', sizeof(MYDEVMODE)); + char* buf2 = reinterpret_cast(&other); + ::memset(buf2, 'a', sizeof(MYDEVMODE)); + + // まったく同じなので等価になる + EXPECT_TRUE(value == other); + EXPECT_FALSE(value != other); + EXPECT_EQ(other, value); + + // 文字列メンバをNUL終端する + value.m_szPrinterDriverName[_countof(value.m_szPrinterDriverName) - 1] = 0; + + // NUL終端された文字列 != NUL終端されてない文字列、となるはず。 + EXPECT_FALSE(value == other); + EXPECT_TRUE(value != other); + EXPECT_NE(other, value); +} + /*! * @brief 等価比較演算子が一般保護違反を犯さないことを保証する非機能要件テスト *