Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CClipboard の単体テストをさらに追加する #1843

Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Windows API の呼び出しを伴うテストを削除する。
  • Loading branch information
kengoide committed May 8, 2022
commit eed2fec5a555a486f33d05f9eacb2bb2a9b1604c
120 changes: 0 additions & 120 deletions tests/unittests/test-cclipboard.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,126 +49,6 @@ using ::testing::_;
using ::testing::Invoke;
using ::testing::Return;

/*!
* HWND型のスマートポインタを実現するためのdeleterクラス
*/
struct window_closer
{
void operator()(HWND hWnd) const
{
::DestroyWindow(hWnd);
}
};

//! HWND型のスマートポインタ
using windowHolder = std::unique_ptr<std::remove_pointer<HWND>::type, window_closer>;


/*!
* @brief SetHtmlTextのテスト
*/
TEST(CClipboard, DISABLED_SetHtmlText)
{
constexpr const wchar_t inputData[] = L"test 109";
constexpr const char expected[] =
"Version:0.9\r\n"
"StartHTML:00000097\r\n"
"EndHTML:00000178\r\n"
"StartFragment:00000134\r\n"
"EndFragment:00000142\r\n"
"<html><body>\r\n"
"<!--StartFragment -->\r\n"
"test 109\r\n"
"<!--EndFragment-->\r\n"
"</body></html>\r\n";

const UINT uHtmlFormat = ::RegisterClipboardFormat(L"HTML Format");

auto hInstance = ::GetModuleHandleW(nullptr);
if (HWND hWnd = ::CreateWindowExW(0, WC_STATICW, L"test", 0, 1, 1, 1, 1, nullptr, nullptr, hInstance, nullptr); hWnd) {
// HWNDをスマートポインタに入れる
windowHolder holder(hWnd);

// クリップボード操作クラスでSetHtmlTextする
CClipboard cClipBoard(hWnd);

// 操作は失敗しないはず。
ASSERT_TRUE(cClipBoard.SetHtmlText(inputData));

// 操作に成功するとHTML形式のデータを利用できるはず。
ASSERT_TRUE(::IsClipboardFormatAvailable(uHtmlFormat));

// クリップボード操作クラスが対応してないので生APIを呼んで確認する。

// グローバルメモリをロックできた場合のみ中身を取得しに行く
if (HGLOBAL hClipData = ::GetClipboardData(uHtmlFormat); hClipData != nullptr) {
// データをstd::stringにコピーする
const size_t cchData = ::GlobalSize(hClipData);
const char* pData = (char*)::GlobalLock(hClipData);
std::string strClipData(pData, cchData);

// 使い終わったらロック解除する
::GlobalUnlock(hClipData);

ASSERT_STREQ(expected, strClipData.c_str());
}
else {
FAIL();
}
}
}

class CClipboardTestFixture : public testing::Test {
protected:
void SetUp() override {
hInstance = ::GetModuleHandle(nullptr);
hWnd = ::CreateWindowExW(0, WC_STATICW, L"test", 0, 1, 1, 1, 1, nullptr, nullptr, hInstance, nullptr);
if (!hWnd) FAIL();
}
void TearDown() override {
if (hWnd)
::DestroyWindow(hWnd);
}

HINSTANCE hInstance = nullptr;
HWND hWnd = nullptr;
};

TEST_F(CClipboardTestFixture, DISABLED_SetTextAndGetText)
{
const std::wstring_view text = L"てすと";
CClipboard clipboard(hWnd);
CNativeW buffer;
bool column;
bool line;
CEol eol(EEolType::cr_and_lf);

// テストを実行する前にクリップボードの内容を破棄しておく。
clipboard.Empty();

// テキストを設定する(矩形選択フラグなし・行選択フラグなし)
EXPECT_TRUE(clipboard.SetText(text.data(), text.length(), false, false, -1));
EXPECT_TRUE(CClipboard::HasValidData());
// Unicode文字列を取得する
EXPECT_TRUE(clipboard.GetText(&buffer, &column, &line, eol, CF_UNICODETEXT));
EXPECT_STREQ(buffer.GetStringPtr(), text.data());
EXPECT_FALSE(column);
EXPECT_FALSE(line);

clipboard.Empty();

// テキストを設定する(矩形選択あり・行選択あり)
EXPECT_TRUE(clipboard.SetText(text.data(), text.length(), true, true, -1));
EXPECT_TRUE(CClipboard::HasValidData());
// サクラエディタ独自形式データを取得する
EXPECT_TRUE(clipboard.GetText(&buffer, &column, nullptr, eol, CClipboard::GetSakuraFormat()));
EXPECT_STREQ(buffer.GetStringPtr(), text.data());
EXPECT_TRUE(column);
EXPECT_TRUE(clipboard.GetText(&buffer, nullptr, &line, eol, CClipboard::GetSakuraFormat()));
EXPECT_STREQ(buffer.GetStringPtr(), text.data());
EXPECT_TRUE(line);
}

// グローバルメモリに書き込まれた特定の Unicode 文字列にマッチする述語関数
MATCHER_P(WideStringInGlobalMemory, expected_string, "") {
const wchar_t* s = (const wchar_t*)::GlobalLock(arg);
Expand Down