summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/about_window_controller_unittest.mm
blob: 64a4f6ded98a64209473e9ada5ef295f6d47f3be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import <Cocoa/Cocoa.h>

#import "base/scoped_nsobject.h"
#import "chrome/browser/cocoa/about_window_controller.h"
#include "chrome/browser/cocoa/browser_test_helper.h"
#include "chrome/browser/cocoa/cocoa_test_helper.h"
#import "chrome/browser/cocoa/keystone_glue.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/platform_test.h"

namespace {

void PostAutoupdateStatusNotification(AutoupdateStatus status,
                                             NSString* version) {
  NSNumber* statusNumber = [NSNumber numberWithInt:status];
  NSMutableDictionary* dictionary =
      [NSMutableDictionary dictionaryWithObjects:&statusNumber
                                         forKeys:&kAutoupdateStatusStatus
                                           count:1];
  if (version) {
    [dictionary setObject:version forKey:kAutoupdateStatusVersion];
  }

  NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
  [center postNotificationName:kAutoupdateStatusNotification
                        object:nil
                      userInfo:dictionary];
}

class AboutWindowControllerTest : public CocoaTest {
 public:
  virtual void SetUp() {
    CocoaTest::SetUp();
    about_window_controller_ =
        [[AboutWindowController alloc] initWithProfile:nil];
    EXPECT_TRUE([about_window_controller_ window]);
  }

  virtual void TearDown() {
    [about_window_controller_ close];
    CocoaTest::TearDown();
  }

  AboutWindowController* about_window_controller_;
};

TEST_F(AboutWindowControllerTest, TestCopyright) {
  NSString* text = [[AboutWindowController legalTextBlock] string];

  // Make sure we have the word "Copyright" in it, which is present in all
  // locales.
  NSRange range = [text rangeOfString:@"Copyright"];
  EXPECT_NE(NSNotFound, range.location);
}

TEST_F(AboutWindowControllerTest, RemovesLinkAnchors) {
  NSString* text = [[AboutWindowController legalTextBlock] string];

  // Make sure that we removed the "BEGIN_LINK" and "END_LINK" anchors.
  NSRange range = [text rangeOfString:@"BEGIN_LINK"];
  EXPECT_EQ(NSNotFound, range.location);

  range = [text rangeOfString:@"END_LINK"];
  EXPECT_EQ(NSNotFound, range.location);
}

TEST_F(AboutWindowControllerTest, AwakeNibSetsString) {
  NSAttributedString* legal_text = [AboutWindowController legalTextBlock];
  NSAttributedString* text_storage =
      [[about_window_controller_ legalText] textStorage];

  EXPECT_TRUE([legal_text isEqualToAttributedString:text_storage]);
}

TEST_F(AboutWindowControllerTest, TestButton) {
  NSButton* button = [about_window_controller_ updateButton];
  ASSERT_TRUE(button);

  // Not enabled until we know if updates are available.
  ASSERT_FALSE([button isEnabled]);
  PostAutoupdateStatusNotification(kAutoupdateAvailable, nil);
  ASSERT_TRUE([button isEnabled]);

  // Make sure the button is hooked up
  ASSERT_EQ([button target], about_window_controller_);
  ASSERT_EQ([button action], @selector(updateNow:));
}

// Doesn't confirm correctness, but does confirm something happens.
TEST_F(AboutWindowControllerTest, TestCallbacks) {
  NSString *lastText = [[about_window_controller_ updateText]
                        stringValue];
  PostAutoupdateStatusNotification(kAutoupdateCurrent, @"foo");
  ASSERT_FALSE([lastText isEqual:[[about_window_controller_ updateText]
                                  stringValue]]);

  lastText = [[about_window_controller_ updateText] stringValue];
  PostAutoupdateStatusNotification(kAutoupdateCurrent, @"foo");
  ASSERT_TRUE([lastText isEqual:[[about_window_controller_ updateText]
                                 stringValue]]);

  lastText = [[about_window_controller_ updateText] stringValue];
  PostAutoupdateStatusNotification(kAutoupdateCurrent, @"bar");
  ASSERT_FALSE([lastText isEqual:[[about_window_controller_ updateText]
                                  stringValue]]);

  lastText = [[about_window_controller_ updateText] stringValue];
  PostAutoupdateStatusNotification(kAutoupdateAvailable, nil);
  ASSERT_FALSE([lastText isEqual:[[about_window_controller_ updateText]
                                  stringValue]]);

  lastText = [[about_window_controller_ updateText] stringValue];
  PostAutoupdateStatusNotification(kAutoupdateCheckFailed, nil);
  ASSERT_FALSE([lastText isEqual:[[about_window_controller_ updateText]
                                  stringValue]]);

#if 0
  // TODO(mark): The kAutoupdateInstalled portion of the test is disabled
  // because it leaks restart dialogs.  If the About box is revised to use
  // a button within the box to advise a restart instead of popping dialogs,
  // these tests should be enabled.

  lastText = [[about_window_controller_ updateText] stringValue];
  PostAutoupdateStatusNotification(kAutoupdateInstalled, @"ver");
  ASSERT_FALSE([lastText isEqual:[[about_window_controller_ updateText]
                                  stringValue]]);

  lastText = [[about_window_controller_ updateText] stringValue];
  PostAutoupdateStatusNotification(kAutoupdateInstalled, nil);
  ASSERT_FALSE([lastText isEqual:[[about_window_controller_ updateText]
                                  stringValue]]);
#endif

  lastText = [[about_window_controller_ updateText] stringValue];
  PostAutoupdateStatusNotification(kAutoupdateInstallFailed, nil);
  ASSERT_FALSE([lastText isEqual:[[about_window_controller_
                                  updateText] stringValue]]);
}

}  // namespace