chromium/ui/gfx/win/crash_id_helper_unittest.cc

// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ui/gfx/win/crash_id_helper.h"

#include "testing/gtest/include/gtest/gtest.h"

namespace gfx {

class CrashIdHelperTest : public testing::Test {
 public:
  CrashIdHelperTest() = default;

  CrashIdHelperTest(const CrashIdHelperTest&) = delete;
  CrashIdHelperTest& operator=(const CrashIdHelperTest&) = delete;

  ~CrashIdHelperTest() override = default;

  std::string CurrentCrashId() {
    return CrashIdHelper::Get()->CurrentCrashId();
  }
};

// This test verifies CurrentCrashId(). Ideally this would verify at
// crash_reporter::CrashKeyString, but that class isn't particularly test
// friendly (and the implementation varies depending upon compile time flags).
TEST_F(CrashIdHelperTest, Basic) {
  CrashIdHelper::RegisterMainThread(base::PlatformThread::CurrentId());

  const std::string id1 = "id";
  {
    auto scoper = CrashIdHelper::Get()->OnWillProcessMessages(id1);
    EXPECT_EQ(id1, CurrentCrashId());
  }

  // No assertions for empty as CurrentCrashId() DCHECKs there is at least
  // one id.

  const std::string id2 = "id2";
  {
    auto scoper = CrashIdHelper::Get()->OnWillProcessMessages(id2);
    EXPECT_EQ(id2, CurrentCrashId());

    {
      auto scoper2 = CrashIdHelper::Get()->OnWillProcessMessages(id1);
      EXPECT_EQ("id2>id", CurrentCrashId());
    }
    EXPECT_EQ("(N) id2", CurrentCrashId());
  }
  CrashIdHelper::RegisterMainThread(base::kInvalidThreadId);
}

}  // namespace gfx