Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions .github/workflows/cross-browser-testing-android.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: 'BrowserStack Android Mobile Test'
on: [push, pull_request, workflow_dispatch]

jobs:
browserstack-android-test:
name: 'BrowserStack Android Mobile Test'
runs-on: ubuntu-latest
steps:
- name: 'BrowserStack Env Setup'
uses: browserstack/github-actions/setup-env@master
with:
username: ${{ secrets.BROWSERSTACK_USERNAME }}
access-key: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}

- name: 'BrowserStack Local Tunnel Setup'
uses: browserstack/github-actions/setup-local@master
with:
local-testing: start
local-identifier: random

- name: 'Checkout the repository'
uses: actions/checkout@v3

- name: 'Run NPM CI'
run: npm ci

- name: Run Build IIFE
run: npm run build:iife

- name: 'Run NPM build test bundle'
run: npm run build:test-bundle

- name: 'Run Browserstack Android Mobile Tests'
run: npm run test:browserstack-android

- name: 'BrowserStackLocal Stop'
uses: browserstack/github-actions/setup-local@master
with:
local-testing: stop
39 changes: 39 additions & 0 deletions .github/workflows/cross-browser-testing-iOS.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: 'BrowserStack iOS Mobile Test'
on: [push, pull_request, workflow_dispatch]

jobs:
browserstack-iOS-test:
name: 'BrowserStack iOS Mobile Test'
runs-on: ubuntu-latest
steps:
- name: 'BrowserStack Env Setup'
uses: browserstack/github-actions/setup-env@master
with:
username: ${{ secrets.BROWSERSTACK_USERNAME }}
access-key: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}

- name: 'BrowserStack Local Tunnel Setup'
uses: browserstack/github-actions/setup-local@master
with:
local-testing: start
local-identifier: random

- name: 'Checkout the repository'
uses: actions/checkout@v3

- name: 'Run NPM CI'
run: npm ci

- name: Run Build IIFE
run: npm run build:iife

- name: 'Run NPM build test bundle'
run: npm run build:test-bundle

- name: 'Run Browserstack iOS Mobile Tests'
run: npm run test:browserstack-iOS

- name: 'BrowserStackLocal Stop'
uses: browserstack/github-actions/setup-local@master
with:
local-testing: stop
4 changes: 4 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@
"test": "npm run build && npm run build:test-bundle && cross-env DEBUG=false karma start test/karma.config.js",
"test:browserstack": "karma start test/cross-browser-testing/browserstack.karma.config.js",
"test:browserstack:debug": "cross-env DEBUG=true karma start test/cross-browser-testing/browserstack.karma.config.js",
"test:browserstack-android": "karma start test/cross-browser-testing/browserstack.karma.android.config.js",
"test:browserstack-android:debug": "cross-env DEBUG=true karma start test/cross-browser-testing/browserstack.karma.android.config.js",
"test:browserstack-iOS": "karma start test/cross-browser-testing/browserstack.karma.iOS.config.js",
"test:browserstack-iOS:debug": "cross-env DEBUG=true karma start test/cross-browser-testing/browserstack.karma.iOS.config.js",
"test:debug": "cross-env DEBUG=true karma start test/karma.config.js",
"test:stub": "cross-env TESTTYPE=stub ENVIRONMENT=prod rollup --config rollup.test.config.js && karma start test/stub/karma.stub.config.js",
"test:integrations": "npm run test:requirejs && npm run test:integrations:cjs && npm run test:integrations:module",
Expand Down
147 changes: 147 additions & 0 deletions test/cross-browser-testing/browserstack.karma.android.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
const { DEBUG } = process.env;

const files = [
'../lib/geomock.js',
'../../dist/mparticle.js',
'../test-bundle.js',
];

let captureConsole = false;
let browserConsoleLogOptions = {};

if (DEBUG === 'true') {
browserConsoleLogOptions = {
level: 'log',
format: '%b %T: %m',
terminal: true,
};
captureConsole = true;
} else {
browserConsoleLogOptions = {
terminal: false,
};
}

const customLaunchers = {
// Android 16 - all browsers
bs_android_16_chrome: {
base: 'BrowserStack',
device: 'Google Pixel 10 Pro',
os: 'android',
os_version: '16.0',
real_mobile: true,
browser: 'chrome'
},
bs_android_16_firefox: {
base: 'BrowserStack',
device: 'Google Pixel 10',
os: 'android',
os_version: '16.0',
real_mobile: true,
browser: 'firefox'
},
bs_android_16_opera: {
base: 'BrowserStack',
device: 'Google Pixel 10 Pro',
os: 'android',
os_version: '16.0',
real_mobile: true,
browser: 'opera'
},
bs_android_16_samsung: {
base: 'BrowserStack',
device: 'Google Pixel 10 Pro XL',
os: 'android',
os_version: '16.0',
real_mobile: true,
browser: 'samsung'
},

// Android 15 - all browsers
bs_android_15_chrome: {
base: 'BrowserStack',
device: 'Samsung Galaxy S25',
os: 'android',
os_version: '15.0',
real_mobile: true,
browser: 'chrome'
},
bs_android_15_firefox: {
base: 'BrowserStack',
device: 'Samsung Galaxy Tab S10 Plus',
os: 'android',
os_version: '15.0',
real_mobile: true,
browser: 'firefox'
},
bs_android_15_opera: {
base: 'BrowserStack',
device: 'Google Pixel 9 Pro',
os: 'android',
os_version: '15.0',
real_mobile: true,
browser: 'opera'
},
bs_android_15_samsung: {
base: 'BrowserStack',
device: 'Samsung Galaxy S25 Ultra',
os: 'android',
os_version: '15.0',
real_mobile: true,
browser: 'samsung'
},

// Android 14 - chrome
bs_android_14_chrome: {
base: 'BrowserStack',
device: 'Samsung Galaxy S24',
os: 'android',
os_version: '14.0',
real_mobile: true,
browser: 'chrome'
},

// Android 13 - chrome
bs_android_13_chrome: {
base: 'BrowserStack',
device: 'Samsung Galaxy S23 Ultra',
os: 'android',
os_version: '13.0',
real_mobile: true,
browser: 'chrome'
},
};

module.exports = function(config) {
config.set({
browserStack: {
username: process.env.BS_USERNAME,
accessKey: process.env.BS_ACCESS_KEY,
local: true,
},
autoWatch: false,
customLaunchers,
browsers: Object.keys(customLaunchers),
frameworks: ['mocha', 'should'],
files,
reporters: ['progress', 'junit'],
colors: true,
singleRun: true,
debug: true,
logLevel: config.LOG_INFO,
browserConsoleLogOptions,
client: {
captureConsole,
mocha: {
timeout: 10000
}
},
junitReporter: {
outputDir: 'reports/',
outputFile: 'test-karma-mobile.xml',
},
browserDisconnectTimeout: 50000,
browserDisconnectTolerance: 5,
concurrency: 5,
});
};
131 changes: 131 additions & 0 deletions test/cross-browser-testing/browserstack.karma.iOS.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
const { DEBUG } = process.env;

const files = [
'../lib/geomock.js',
'../../dist/mparticle.js',
'../test-bundle.js',
];

let captureConsole = false;
let browserConsoleLogOptions = {};

if (DEBUG === 'true') {
browserConsoleLogOptions = {
level: 'log',
format: '%b %T: %m',
terminal: true,
};
captureConsole = true;
} else {
browserConsoleLogOptions = {
terminal: false,
};
}

const customLaunchers = {
// iOS 26 - chrome, firefox, safari
bs_ios_26_safari: {
base: 'BrowserStack',
device: 'iPhone 17 Pro',
os: 'ios',
os_version: '26',
real_mobile: true,
browser: 'safari'
},
bs_ios_26_chrome: {
base: 'BrowserStack',
device: 'iPad Air 5',
os: 'ios',
os_version: '26',
real_mobile: true,
browser: 'chrome'
},
bs_ios_26_firefox: {
base: 'BrowserStack',
device: 'iPhone Air',
os: 'ios',
os_version: '26',
real_mobile: true,
browser: 'firefox'
},

// iOS 18 - chrome, firefox, safari
bs_ios_18_safari: {
base: 'BrowserStack',
device: 'iPhone 16e',
os: 'ios',
os_version: '18',
real_mobile: true,
browser: 'safari'
},
bs_ios_18_chrome: {
base: 'BrowserStack',
device: 'iPad Pro 11 2021',
os: 'ios',
os_version: '18',
real_mobile: true,
browser: 'chrome'
},
bs_ios_18_firefox: {
base: 'BrowserStack',
device: 'iPhone 14',
os: 'ios',
os_version: '18',
real_mobile: true,
browser: 'firefox'
},

// iOS 17 - chrome
bs_ios_17_chrome: {
base: 'BrowserStack',
device: 'iPhone 12',
os: 'ios',
os_version: '17',
real_mobile: true,
browser: 'chrome'
},

// iOS 16 - safari
bs_ios_16_safari: {
base: 'BrowserStack',
device: 'iPad 10th',
os: 'ios',
os_version: '16',
real_mobile: true,
browser: 'safari'
},
};

module.exports = function(config) {
config.set({
browserStack: {
username: process.env.BS_USERNAME,
accessKey: process.env.BS_ACCESS_KEY,
local: true,
},
autoWatch: false,
customLaunchers,
browsers: Object.keys(customLaunchers),
frameworks: ['mocha', 'should'],
files,
reporters: ['progress', 'junit'],
colors: true,
singleRun: true,
debug: true,
logLevel: config.LOG_INFO,
browserConsoleLogOptions,
client: {
captureConsole,
mocha: {
timeout: 10000
}
},
junitReporter: {
outputDir: 'reports/',
outputFile: 'test-karma-mobile.xml',
},
browserDisconnectTimeout: 50000,
browserDisconnectTolerance: 5,
concurrency: 5,
});
};
Loading