From 8c29623e18406b4661033e5af004d9be2d2d6af9 Mon Sep 17 00:00:00 2001 From: berryplus Date: Fri, 25 Oct 2019 05:45:38 +0900 Subject: [PATCH] =?UTF-8?q?MYDEVMODE=E3=83=86=E3=82=B9=E3=83=88=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unittests/test-mydevmode.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) 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 等価比較演算子が一般保護違反を犯さないことを保証する非機能要件テスト *