Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(481)

Side by Side Diff: chrome/browser/chrome_browser_application_mac_unittest.mm

Issue 2543813003: [Mac] Modify the ObjC exception preprocessor to make some exceptions fatal. (Closed)
Patch Set: Address comments Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import "chrome/browser/chrome_browser_application_mac.h"
6
7 #import <Cocoa/Cocoa.h>
8 #include <stddef.h>
9
10 #include <memory>
11
12 #include "base/metrics/histogram_macros.h"
13 #include "base/metrics/histogram_samples.h"
14 #include "base/metrics/statistics_recorder.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16
17 using base::HistogramBase;
18 using base::HistogramSamples;
19 using base::StatisticsRecorder;
20
21 namespace chrome_browser_application_mac {
22
23 // Generate an NSException with the given name.
24 NSException* ExceptionNamed(NSString* name) {
25 return [NSException exceptionWithName:name
26 reason:@"No reason given"
27 userInfo:nil];
28 }
29
30 // Helper to keep binning expectations readible.
31 size_t BinForExceptionNamed(NSString* name) {
32 return BinForException(ExceptionNamed(name));
33 }
34
35 TEST(ChromeApplicationMacTest, ExceptionBinning) {
36 // These exceptions must be in this order.
37 EXPECT_EQ(BinForExceptionNamed(NSGenericException), 0U);
38 EXPECT_EQ(BinForExceptionNamed(NSRangeException), 1U);
39 EXPECT_EQ(BinForExceptionNamed(NSInvalidArgumentException), 2U);
40 EXPECT_EQ(BinForExceptionNamed(NSMallocException), 3U);
41
42 // Random other exceptions map to |kUnknownNSException|.
43 EXPECT_EQ(BinForExceptionNamed(@"CustomName"), kUnknownNSException);
44 EXPECT_EQ(BinForExceptionNamed(@"Custom Name"), kUnknownNSException);
45 EXPECT_EQ(BinForExceptionNamed(@""), kUnknownNSException);
46 EXPECT_EQ(BinForException(nil), kUnknownNSException);
47 }
48
49 TEST(ChromeApplicationMacTest, RecordException) {
50 // Start up a histogram recorder.
51 // TODO(rtenneti): Leaks StatisticsRecorder and will update suppressions.
52 base::StatisticsRecorder::Initialize();
53
54 StatisticsRecorder::Histograms histograms;
55 StatisticsRecorder::GetSnapshot("OSX.NSException", &histograms);
56 EXPECT_EQ(0U, histograms.size());
57
58 // Record some known exceptions.
59 RecordExceptionWithUma(ExceptionNamed(NSGenericException));
60 RecordExceptionWithUma(ExceptionNamed(NSGenericException));
61 RecordExceptionWithUma(ExceptionNamed(NSGenericException));
62 RecordExceptionWithUma(ExceptionNamed(NSGenericException));
63 RecordExceptionWithUma(ExceptionNamed(NSRangeException));
64 RecordExceptionWithUma(ExceptionNamed(NSInvalidArgumentException));
65 RecordExceptionWithUma(ExceptionNamed(NSInvalidArgumentException));
66 RecordExceptionWithUma(ExceptionNamed(NSInvalidArgumentException));
67 RecordExceptionWithUma(ExceptionNamed(NSMallocException));
68 RecordExceptionWithUma(ExceptionNamed(NSMallocException));
69
70 // Record some unknown exceptions.
71 RecordExceptionWithUma(ExceptionNamed(@"CustomName"));
72 RecordExceptionWithUma(ExceptionNamed(@"Custom Name"));
73 RecordExceptionWithUma(ExceptionNamed(@""));
74 RecordExceptionWithUma(nil);
75
76 // We should have exactly the right number of exceptions.
77 StatisticsRecorder::GetSnapshot("OSX.NSException", &histograms);
78 EXPECT_EQ(1U, histograms.size());
79 EXPECT_EQ(HistogramBase::kUmaTargetedHistogramFlag, histograms[0]->flags());
80
81 std::unique_ptr<HistogramSamples> samples(histograms[0]->SnapshotSamples());
82 EXPECT_EQ(4, samples->GetCount(0));
83 EXPECT_EQ(1, samples->GetCount(1));
84 EXPECT_EQ(3, samples->GetCount(2));
85 EXPECT_EQ(2, samples->GetCount(3));
86
87 // The unknown exceptions should end up in the overflow bucket.
88 EXPECT_TRUE(histograms[0]->HasConstructionArguments(1,
89 kUnknownNSException,
90 kUnknownNSException + 1));
91 EXPECT_EQ(4, samples->GetCount(kUnknownNSException));
92 }
93
94 } // chrome_browser_application_mac
OLDNEW
« no previous file with comments | « chrome/browser/chrome_browser_application_mac.mm ('k') | chrome/browser/mac/exception_processor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698