Skip to content

Commit d25b42e

Browse files
Fixed wrong mode detection for Chrome 27 stack when running test in Opera browser
1 parent 5519798 commit d25b42e

File tree

2 files changed

+10
-14
lines changed

2 files changed

+10
-14
lines changed

stacktrace.js

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -72,20 +72,21 @@
7272
return 'safari';
7373
} else if (e.stack && e.number) {
7474
return 'ie';
75-
} else if (typeof e.message === 'string' && typeof window !== 'undefined' && window.opera) {
76-
// e.message.indexOf("Backtrace:") > -1 -> opera
77-
// !e.stacktrace -> opera
75+
} else if (e.stack && e.fileName) {
76+
return 'firefox';
77+
} else if (e.message && e['opera#sourceloc']) {
78+
// e.message.indexOf("Backtrace:") > -1 -> opera9
79+
// 'opera#sourceloc' in e -> opera9, opera10a
80+
// !e.stacktrace -> opera9
7881
if (!e.stacktrace) {
7982
return 'opera9'; // use e.message
8083
}
81-
// 'opera#sourceloc' in e -> opera9, opera10a
8284
if (e.message.indexOf('\n') > -1 && e.message.split('\n').length > e.stacktrace.split('\n').length) {
85+
// e.message may have more stack entries than e.stacktrace
8386
return 'opera9'; // use e.message
8487
}
85-
// e.stacktrace && !e.stack -> opera10a
86-
if (!e.stack) {
87-
return 'opera10a'; // use e.stacktrace
88-
}
88+
return 'opera10a'; // use e.stacktrace
89+
} else if (e.message && e.stack && e.stacktrace) {
8990
// e.stacktrace && e.stack -> opera10b
9091
if (e.stacktrace.indexOf("called from line") < 0) {
9192
return 'opera10b'; // use e.stacktrace, format differs from 'opera10a'
@@ -96,8 +97,6 @@
9697
// Chrome 27 does not have e.arguments as earlier versions,
9798
// but still does not have e.fileName as Firefox
9899
return 'chrome';
99-
} else if (e.stack) {
100-
return 'firefox';
101100
}
102101
return 'other';
103102
},

test/TestStacktrace.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,16 +153,13 @@
153153
});
154154

155155
test("run opera9", function() {
156-
expect(5);
156+
expect(4);
157157
var p = impl();
158158
UnitTest.fn.createModeStubs(p);
159159
p.opera9 = function() {
160160
ok(true, 'called run() for "opera9"');
161161
};
162162
UnitTest.fn.prepareFakeOperaEnvironment();
163-
p.run({
164-
message: 'ignored\n' + 'ignored\n' + 'ignored\n' + 'ignored\n' + 'Line 40 of linked script http://site.com: in function f1\n' + ' discarded()\n' + 'Line 44 of linked script http://site.com\n' + ' f1(1, "abc")\n' + 'ignored\n' + 'ignored'
165-
});
166163
p.run(CapturedExceptions.opera_854);
167164
p.run(CapturedExceptions.opera_902);
168165
p.run(CapturedExceptions.opera_927);

0 commit comments

Comments
 (0)