Skip to content

Commit 19f42a3

Browse files
committed
Address suggestions from review.
Summary: - Build test scenarios using `template`, `initialization` and `subject` - Use TypeScript in tests. - Remove test server, use local file paths.
1 parent 09f6107 commit 19f42a3

File tree

96 files changed

+1666
-1648
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+1666
-1648
lines changed

packages/browser/test/e2e/.eslintrc

Lines changed: 0 additions & 19 deletions
This file was deleted.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
module.exports = {
2+
ecmaFeatures: {
3+
'1modules': true,
4+
spread: true,
5+
restParams: true,
6+
},
7+
env: {
8+
browser: true,
9+
node: true,
10+
es6: true,
11+
},
12+
rules: {
13+
'no-unused-vars': 2,
14+
'no-undef': 2,
15+
},
16+
parserOptions: {
17+
sourceType: 'module',
18+
},
19+
extends: ['../../.eslintrc.js'],
20+
};

packages/browser/test/e2e/package.json

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,9 @@
1414
},
1515
"scripts": {
1616
"postinstall": "playwright install --with-deps",
17-
"pretest": "yarn install && webpack",
18-
"test": "playwright test ./test --browser=all",
19-
"posttest": "rimraf dist",
20-
"dev": "webpack-dev-server"
17+
"pretest": "yarn install",
18+
"test": "playwright test ./test --browser='all'",
19+
"posttest": "rimraf dist"
2120
},
2221
"dependencies": {
2322
"@babel/core": "^7.15.5",
@@ -26,6 +25,9 @@
2625
"@sentry/browser": "file:../..",
2726
"babel-loader": "^8.2.2",
2827
"express": "^4.17.1",
28+
"html-webpack-plugin": "^5.5.0",
29+
"ts-loader": "^9.2.6",
30+
"ts-node": "^10.4.0",
2931
"webpack": "^5.52.0",
3032
"webpack-cli": "^4.8.0"
3133
},
@@ -37,5 +39,8 @@
3739
"@sentry/tracing": "file:../../../tracing",
3840
"@sentry/types": "file:../../../types",
3941
"@sentry/utils": "file:../../../utils"
42+
},
43+
"devDependencies": {
44+
"handlebars-loader": "^1.7.1"
4045
}
4146
}

packages/browser/test/e2e/playwright.config.js

Lines changed: 0 additions & 13 deletions
This file was deleted.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { PlaywrightTestConfig } from '@playwright/test';
2+
3+
const config: PlaywrightTestConfig = {
4+
retries: 2,
5+
timeout: 12000,
6+
workers: 3,
7+
};
8+
export default config;
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"rules": {
3+
"no-unused-vars": 0,
4+
"no-undef": 0
5+
}
6+
}

packages/browser/test/e2e/src/index.js renamed to packages/browser/test/e2e/scenarios/initializations/default.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
const Sentry = require('@sentry/browser');
2-
const { normalize } = require('@sentry/utils');
1+
import * as Sentry from '@sentry/browser';
2+
import { normalize } from '@sentry/utils';
3+
34
window.Sentry = Sentry;
5+
window.events = [];
46

57
Sentry.init({
68
dsn: 'https://[email protected]/1337',
@@ -18,3 +20,10 @@ Sentry.init({
1820
return breadcrumb;
1921
},
2022
});
23+
24+
const scope = Sentry.getCurrentHub().getScope();
25+
26+
scope.addEventProcessor(function(event) {
27+
window.events.push(event);
28+
return event;
29+
});
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
const clickHandler = function() {};
2+
3+
// mousemove event shouldnt clobber subsequent "breadcrumbed" events (see #724)
4+
document.querySelector('.a').addEventListener('mousemove', clickHandler);
5+
6+
document.querySelector('.a').addEventListener('click', clickHandler);
7+
document.querySelector('.b').addEventListener('click', clickHandler);
8+
document.querySelector('.c').addEventListener('click', clickHandler);
9+
10+
// click <input/>
11+
const click = new MouseEvent('click');
12+
const input = document.querySelector('.a'); // leaf node
13+
input.dispatchEvent(click);
14+
15+
Sentry.captureMessage('test');
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// add an event listener to the input. we want to make sure that
2+
// our breadcrumbs still work even if the page has an event listener
3+
// on an element that cancels event bubbling
4+
const input = document.getElementsByTagName('input')[0];
5+
const clickHandler = function(evt) {
6+
evt.stopPropagation(); // don't bubble
7+
};
8+
input.addEventListener('click', clickHandler);
9+
10+
// click <input/>
11+
const click = new MouseEvent('click');
12+
input.dispatchEvent(click);
13+
14+
Sentry.captureMessage('test');
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// click <input/>
2+
const click = new MouseEvent('click');
3+
4+
const input = document.getElementsByTagName('input')[0];
5+
6+
// TODO: This next line wasn't required for the old tests.
7+
input.addEventListener('click');
8+
input.dispatchEvent(click);
9+
10+
Sentry.captureMessage('test');
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
window.handleEventCalled = false;
2+
3+
const input = document.getElementsByTagName('input')[0];
4+
input.addEventListener('click', {
5+
handleEvent: function() {
6+
window.handleEventCalled = true;
7+
},
8+
});
9+
input.dispatchEvent(new MouseEvent('click'));
10+
11+
Sentry.captureMessage('test');
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// click <input/>
2+
const click = new MouseEvent('click');
3+
function kaboom() {
4+
throw new Error('lol');
5+
}
6+
Object.defineProperty(click, 'target', { get: kaboom });
7+
8+
const input = document.querySelector('.a'); // leaf node
9+
input.addEventListener('click');
10+
input.dispatchEvent(click);
11+
12+
Sentry.captureMessage('test');
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// keypress <input/> twice
2+
const keypress1 = new KeyboardEvent('keypress');
3+
const keypress2 = new KeyboardEvent('keypress');
4+
5+
const div = document.querySelector('[contenteditable]');
6+
div.addEventListener('keypress');
7+
8+
div.dispatchEvent(keypress1);
9+
div.dispatchEvent(keypress2);
10+
11+
Sentry.captureMessage('test');
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const input = document.getElementsByTagName('input')[0];
2+
input.addEventListener('build', function(evt) {
3+
evt.stopPropagation();
4+
});
5+
6+
const customEvent = new CustomEvent('build', { detail: 1 });
7+
input.dispatchEvent(customEvent);
8+
9+
Sentry.captureMessage('test');
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const input = document.getElementsByTagName('input')[0];
2+
input.addEventListener('build', undefined);
3+
4+
const customEvent = new CustomEvent('build', { detail: 1 });
5+
input.dispatchEvent(customEvent);
6+
7+
Sentry.captureMessage('test');
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
const input = document.getElementsByTagName('input')[0];
2+
const clickHandler = function() {};
3+
input.addEventListener('click', clickHandler);
4+
const click = new MouseEvent('click');
5+
input.dispatchEvent(click);
6+
Sentry.captureMessage('test');
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
const input = document.getElementsByTagName('input')[0];
2+
input.addEventListener('click', undefined);
3+
input.addEventListener('keypress', undefined);
4+
5+
const click = new MouseEvent('click');
6+
input.dispatchEvent(click);
7+
8+
const keypress = new KeyboardEvent('keypress');
9+
input.dispatchEvent(keypress);
10+
11+
Sentry.captureMessage('test');
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
fetch(123).then(
2+
function() {
3+
Sentry.captureMessage('test');
4+
},
5+
function() {
6+
Sentry.captureMessage('test');
7+
},
8+
);
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
fetch('/base/subjects/example.json', {
2+
method: 'GET',
3+
}).then(
4+
function() {
5+
Sentry.captureMessage('test');
6+
},
7+
function() {
8+
Sentry.captureMessage('test');
9+
},
10+
);
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
fetch(new Request('/base/subjects/example.json')).then(
2+
function() {
3+
Sentry.captureMessage('test');
4+
},
5+
function() {
6+
Sentry.captureMessage('test');
7+
},
8+
);
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// keypress <input/>
2+
const keypress = new KeyboardEvent('keypress');
3+
const input = document.getElementsByTagName('input')[0];
4+
input.addEventListener('keypress');
5+
input.dispatchEvent(keypress);
6+
7+
undefined(); // throw exception
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// 1st keypress <input/>
2+
const keypress1 = new KeyboardEvent('keypress');
3+
// click <input/>
4+
const click = new MouseEvent('click');
5+
// 2nd keypress
6+
const keypress2 = new KeyboardEvent('keypress');
7+
8+
const input = document.getElementsByTagName('input')[0];
9+
input.addEventListener('keypress');
10+
input.addEventListener('click');
11+
12+
input.dispatchEvent(keypress1);
13+
input.dispatchEvent(click);
14+
input.dispatchEvent(keypress2);
15+
16+
Sentry.captureMessage('test');
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// keypress <input/> twice
2+
const keypress1 = new KeyboardEvent('keypress');
3+
const keypress2 = new KeyboardEvent('keypress');
4+
5+
const input = document.getElementsByTagName('input')[0];
6+
input.addEventListener('keypress');
7+
8+
input.dispatchEvent(keypress1);
9+
input.dispatchEvent(keypress2);
10+
11+
Sentry.captureMessage('test');
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
const input = document.getElementsByTagName('input')[0];
2+
3+
const clickHandler = function() {};
4+
input.addEventListener('click', clickHandler);
5+
const keypressHandler = function() {};
6+
input.addEventListener('keypress', keypressHandler);
7+
8+
input.dispatchEvent(new MouseEvent('click'));
9+
input.dispatchEvent(new KeyboardEvent('keypress'));
10+
11+
Sentry.captureMessage('test');
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
const input = document.querySelector('#foo-form input');
2+
const div = document.querySelector('#foo-form div');
3+
4+
const clickHandler = function() {};
5+
input.addEventListener('click', clickHandler);
6+
div.addEventListener('click', clickHandler);
7+
8+
input.dispatchEvent(new MouseEvent('click'));
9+
div.dispatchEvent(new MouseEvent('click'));
10+
11+
Sentry.captureMessage('test');
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
const input = document.getElementsByTagName('input')[0];
2+
3+
const clickHandler = function() {};
4+
input.addEventListener('click', clickHandler);
5+
const keypressHandler = function() {};
6+
input.addEventListener('keypress', keypressHandler);
7+
8+
input.dispatchEvent(new MouseEvent('click'));
9+
input.dispatchEvent(new MouseEvent('click'));
10+
input.dispatchEvent(new MouseEvent('click'));
11+
input.dispatchEvent(new KeyboardEvent('keypress'));
12+
input.dispatchEvent(new KeyboardEvent('keypress'));
13+
input.dispatchEvent(new KeyboardEvent('keypress'));
14+
15+
Sentry.captureMessage('test');
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
history.pushState({}, '', '/foo');
2+
history.pushState({}, '', '/bar?a=1#fragment');
3+
history.pushState({}, '', {}); // pushState calls toString on non-string args
4+
history.pushState({}, '', null); // does nothing / no-op
5+
// can't call history.back() because it will change url of parent document
6+
// (e.g. document running mocha) ... instead just "emulate" a back button
7+
// press by calling replaceState
8+
history.replaceState({}, '', '/bar?a=1#fragment');
9+
Sentry.captureMessage('test');
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
const input = document.getElementsByTagName('input')[0];
2+
3+
const clickHandler = function() {};
4+
const otherClickHandler = function() {};
5+
input.addEventListener('click', clickHandler);
6+
input.addEventListener('click', otherClickHandler);
7+
input.removeEventListener('click', clickHandler);
8+
input.removeEventListener('click', otherClickHandler);
9+
10+
const keypressHandler = function() {};
11+
const otherKeypressHandler = function() {};
12+
input.addEventListener('keypress', keypressHandler);
13+
input.addEventListener('keypress', otherKeypressHandler);
14+
input.removeEventListener('keypress', keypressHandler);
15+
input.removeEventListener('keypress', otherKeypressHandler);
16+
17+
input.dispatchEvent(new MouseEvent('click'));
18+
input.dispatchEvent(new KeyboardEvent('keypress'));
19+
20+
Sentry.captureMessage('test');
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { waitForXHR } from '../../../utils/browserHelpers.ts';
2+
3+
const xhr = new XMLHttpRequest();
4+
xhr.open('POST', '/base/subjects/example.json');
5+
xhr.send('{"foo":"bar"}');
6+
7+
waitForXHR(xhr, function() {
8+
Sentry.captureMessage('test');
9+
});
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { waitForXHR } from '../../../utils/browserHelpers.ts';
2+
3+
const xhr = new XMLHttpRequest();
4+
xhr.open('GET', '/base/subjects/example.json');
5+
xhr.onreadystatechange = function() {};
6+
xhr.send();
7+
8+
waitForXHR(xhr, function() {
9+
Sentry.captureMessage('test');
10+
});

0 commit comments

Comments
 (0)