error_console_unittest.cc revision 558790d6acca3451cf3a6b497803a5f07d0bec58
1558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
2558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// found in the LICENSE file.
4558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
5558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/extensions/error_console/error_console.h"
6558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
7558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "base/memory/scoped_ptr.h"
8558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "base/strings/string16.h"
9558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "base/strings/utf_string_conversions.h"
10558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/extensions/error_console/extension_error.h"
11558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/test/base/testing_profile.h"
12558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "extensions/common/id_util.h"
13558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "testing/gtest/include/gtest/gtest.h"
14558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
15558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochusing base::string16;
16558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochusing base::UTF8ToUTF16;
17558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
18558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochnamespace extensions {
19558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
20558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochnamespace {
21558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
22558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochscoped_ptr<ExtensionError> CreateNewManifestError(bool from_incognito) {
23558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  return scoped_ptr<ExtensionError>(
24558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      new ManifestParsingError(from_incognito,
25558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                               UTF8ToUTF16("source"),
26558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                               UTF8ToUTF16("message"),
27558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                               0u /* line number */ ));
28558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
29558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
30558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}  // namespace
31558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
32558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochclass ErrorConsoleUnitTest : public testing::Test {
33558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch public:
34558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  ErrorConsoleUnitTest() :
35558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      profile_(new TestingProfile),
36558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch      error_console_(ErrorConsole::Get(profile_.get())) {
37558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  }
38558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  virtual ~ErrorConsoleUnitTest() { }
39558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
40558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch protected:
41558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  scoped_ptr<TestingProfile> profile_;
42558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  ErrorConsole* error_console_;
43558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch};
44558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
45558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// Test adding errors, and removing them by reference, by incognito status,
46558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// and in bulk.
47558790d6acca3451cf3a6b497803a5f07d0bec58Ben MurdochTEST_F(ErrorConsoleUnitTest, AddAndRemoveErrors) {
48558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  ASSERT_EQ(0u, error_console_->errors().size());
49558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
50558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  const size_t kNumTotalErrors = 6;
51558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  const size_t kNumNonIncognitoErrors = 3;
52558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // Populate with both incognito and non-incognito errors (evenly distributed).
53558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  for (size_t i = 0; i < kNumTotalErrors; ++i)
54558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    error_console_->ReportError(CreateNewManifestError(i % 2 == 0));
55558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
56558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  ASSERT_EQ(kNumTotalErrors, error_console_->errors().size());
57558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
58558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // Remove the incognito errors; three errors should remain, and all should
59558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // be from non-incognito contexts.
60558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  error_console_->RemoveIncognitoErrors();
61558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  ASSERT_EQ(kNumNonIncognitoErrors, error_console_->errors().size());
62558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  for (size_t i = 0; i < error_console_->errors().size(); ++i)
63558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    ASSERT_FALSE(error_console_->errors()[i]->from_incognito());
64558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
65558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // Remove an error by address.
66558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  error_console_->RemoveError(error_console_->errors()[1]);
67558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  ASSERT_EQ(kNumNonIncognitoErrors - 1, error_console_->errors().size());
68558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
69558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  // Remove all remaining errors.
70558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  error_console_->RemoveAllErrors();
71558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  ASSERT_EQ(0u, error_console_->errors().size());
72558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}
73558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
74558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}  // namespace extensions
75