1
0
mirror of https://github.com/twbs/bootstrap.git synced 2025-08-13 17:14:04 +02:00

Add Lambdatest support

This commit is contained in:
Mukesh Rana
2023-03-23 13:07:04 +02:00
committed by XhmikosR
parent f54befa74b
commit 41d6ad9bc3
6 changed files with 1792 additions and 72 deletions

1
.gitignore vendored
View File

@@ -41,3 +41,4 @@ Thumbs.db
/dist-sass/
/js/coverage/
/node_modules/
.lambdatest

View File

@@ -3,75 +3,149 @@
'use strict'
const browsers = {
safariMac: {
base: 'BrowserStack',
os: 'OS X',
os_version: 'Catalina',
browser: 'Safari',
browser_version: 'latest'
lambdaTest: {
safariMac: {
browserName: 'Safari',
browserVersion: 'latest',
"LT:Options": {
"platformName": "MacOS Monterey"
}
},
chromeMac: {
browserName: 'Chrome',
browserVersion: 'latest',
"LT:Options": {
"platformName": "MacOS Monterey"
}
},
firefoxMac: {
browserName: 'Firefox',
browserVersion: 'latest',
"LT:Options": {
"platformName": "MacOS Monterey"
}
},
chromeWin10: {
browserName: 'Chrome',
browserVersion: '60',
"LT:Options": {
"platformName": "Windows 10"
}
},
firefoxWin10: {
browserName: 'Firefox',
browserVersion: '60',
"LT:Options": {
"platformName": "Windows 10"
}
},
chromeWin10Latest: {
browserName: 'Chrome',
browserVersion: 'latest',
"LT:Options": {
"platformName": "Windows 10"
}
},
firefoxWin10Latest: {
browserName: 'Firefox',
browserVersion: 'latest',
"LT:Options": {
"platformName": "Windows 10"
}
},
iphone7: {
platformName: 'ios',
platformVersion: '12',
browserName: 'Safari',
deviceName: 'iPhone 7',
isRealMobile: true
},
iphone12: {
platformName: 'ios',
platformVersion: '16',
browserName: 'Safari',
deviceName: 'iPhone 12',
isRealMobile: true
},
pixel2: {
platformName: 'android',
platformVersion: '12',
browserName: 'Chrome',
deviceName: 'Google Pixel 6',
isRealMobile: true
}
},
chromeMac: {
base: 'BrowserStack',
os: 'OS X',
os_version: 'Catalina',
browser: 'Chrome',
browser_version: 'latest'
},
firefoxMac: {
base: 'BrowserStack',
os: 'OS X',
os_version: 'Catalina',
browser: 'Firefox',
browser_version: 'latest'
},
chromeWin10: {
base: 'BrowserStack',
os: 'Windows',
os_version: '10',
browser: 'Chrome',
browser_version: '60'
},
firefoxWin10: {
base: 'BrowserStack',
os: 'Windows',
os_version: '10',
browser: 'Firefox',
browser_version: '60'
},
chromeWin10Latest: {
base: 'BrowserStack',
os: 'Windows',
os_version: '10',
browser: 'Chrome',
browser_version: 'latest'
},
firefoxWin10Latest: {
base: 'BrowserStack',
os: 'Windows',
os_version: '10',
browser: 'Firefox',
browser_version: 'latest'
},
iphone7: {
base: 'BrowserStack',
os: 'ios',
os_version: '12.0',
device: 'iPhone 7',
real_mobile: true
},
iphone12: {
base: 'BrowserStack',
os: 'ios',
os_version: '14.0',
device: 'iPhone 12',
real_mobile: true
},
pixel2: {
base: 'BrowserStack',
os: 'android',
os_version: '8.0',
device: 'Google Pixel 2',
real_mobile: true
browserStack: {
safariMac: {
base: 'BrowserStack',
os: 'OS X',
os_version: 'Catalina',
browser: 'Safari',
browser_version: 'latest'
},
chromeMac: {
base: 'BrowserStack',
os: 'OS X',
os_version: 'Catalina',
browser: 'Chrome',
browser_version: 'latest'
},
firefoxMac: {
base: 'BrowserStack',
os: 'OS X',
os_version: 'Catalina',
browser: 'Firefox',
browser_version: 'latest'
},
chromeWin10: {
base: 'BrowserStack',
os: 'Windows',
os_version: '10',
browser: 'Chrome',
browser_version: '60'
},
firefoxWin10: {
base: 'BrowserStack',
os: 'Windows',
os_version: '10',
browser: 'Firefox',
browser_version: '60'
},
chromeWin10Latest: {
base: 'BrowserStack',
os: 'Windows',
os_version: '10',
browser: 'Chrome',
browser_version: 'latest'
},
firefoxWin10Latest: {
base: 'BrowserStack',
os: 'Windows',
os_version: '10',
browser: 'Firefox',
browser_version: 'latest'
},
iphone7: {
base: 'BrowserStack',
os: 'ios',
os_version: '12.0',
device: 'iPhone 7',
real_mobile: true
},
iphone12: {
base: 'BrowserStack',
os: 'ios',
os_version: '14.0',
device: 'iPhone 12',
real_mobile: true
},
pixel2: {
base: 'BrowserStack',
os: 'android',
os_version: '8.0',
device: 'Google Pixel 2',
real_mobile: true
}
}
}

View File

@@ -9,10 +9,21 @@ const replace = require('@rollup/plugin-replace')
const { browsers } = require('./browsers.js')
const ENV = process.env
const LAMBDATEST = Boolean(ENV.LAMBDATEST)
const BROWSERSTACK = Boolean(ENV.BROWSERSTACK)
const DEBUG = Boolean(ENV.DEBUG)
const JQUERY_TEST = Boolean(ENV.JQUERY)
const webdriverConfig = {
hostname: 'hub.lambdatest.com',
port: 80
}
const webdriverConfigMobile = {
hostname: 'mobile-hub.lambdatest.com',
port: 80
}
const frameworks = [
'jasmine'
]
@@ -54,6 +65,10 @@ const config = {
colors: true,
autoWatch: false,
singleRun: true,
captureTimeout: 90000,
browserDisconnectTolerance: 3,
browserDisconnectTimeout: 90000,
browserNoActivityTimeout: 90000,
concurrency: Number.POSITIVE_INFINITY,
client: {
clearContext: false
@@ -98,7 +113,36 @@ const config = {
}
}
if (BROWSERSTACK) {
if (LAMBDATEST) {
config.hostname = 'localhost.lambdatest.com',
Object.keys(browsers['lambdaTest']).map(key => {
browsers['lambdaTest'][key].base = 'WebDriver'
browsers['lambdaTest'][key].build = `bootstrap-${ENV.GITHUB_SHA ? `${ENV.GITHUB_SHA.slice(0, 7)}-` : ''}${new Date().toISOString()}`
browsers['lambdaTest'][key].project = 'Bootstrap'
if (browsers['lambdaTest'][key].isRealMobile) {
browsers['lambdaTest'][key].config = webdriverConfigMobile
browsers['lambdaTest'][key].user = ENV.LT_USERNAME
browsers['lambdaTest'][key].accessKey = ENV.LT_ACCESS_KEY
browsers['lambdaTest'][key].tunnel = true
browsers['lambdaTest'][key].tunnelName = process.env.LT_TUNNEL_NAME || 'jasmine'
browsers['lambdaTest'][key].pseudoActivityInterval = 15000 // 5000 ms heartbeat
}
else {
browsers['lambdaTest'][key].config = webdriverConfig
browsers['lambdaTest'][key]["LT:Options"].username = ENV.LT_USERNAME
browsers['lambdaTest'][key]["LT:Options"].accessKey = ENV.LT_ACCESS_KEY
browsers['lambdaTest'][key]["LT:Options"].tunnel = true
browsers['lambdaTest'][key]["LT:Options"].tunnelName = process.env.LT_TUNNEL_NAME || 'jasmine'
browsers['lambdaTest'][key]["LT:Options"].plugin = 'bootstrap-karma'
browsers['lambdaTest'][key]["LT:Options"].pseudoActivityInterval = 15000 // 5000 ms heartbeat
}
browsers['lambdaTest'][key].retryLimit = 2
})
plugins.push('karma-webdriver-launcher', 'karma-jasmine', 'karma-jasmine-html-reporter')
config.customLaunchers = browsers['lambdaTest']
config.browsers = Object.keys(browsers['lambdaTest'])
reporters.push('kjhtml')
} else if (BROWSERSTACK) {
config.hostname = ip.address()
config.browserStack = {
username: ENV.BROWSER_STACK_USERNAME,
@@ -108,8 +152,8 @@ if (BROWSERSTACK) {
retryLimit: 2
}
plugins.push('karma-browserstack-launcher', 'karma-jasmine-html-reporter')
config.customLaunchers = browsers
config.browsers = Object.keys(browsers)
config.customLaunchers = browsers['browserStack']
config.browsers = Object.keys(browsers['browserStack'])
reporters.push('BrowserStack', 'kjhtml')
} else if (JQUERY_TEST) {
frameworks.push('detectBrowsers')
@@ -126,6 +170,21 @@ if (BROWSERSTACK) {
watched: false
}
]
} else if (JQUERY_TEST) {
frameworks.push('detectBrowsers')
plugins.push(
'karma-chrome-launcher',
'karma-firefox-launcher',
'karma-detect-browsers'
)
config.detectBrowsers = detectBrowsers
config.files = [
'node_modules/jquery/dist/jquery.slim.min.js',
{
pattern: 'js/tests/unit/jquery.spec.js',
watched: false
}
]
} else {
frameworks.push('detectBrowsers')
plugins.push(
@@ -162,7 +221,6 @@ if (BROWSERSTACK) {
config.frameworks = frameworks
config.plugins = plugins
config.reporters = reporters
module.exports = karmaConfig => {
config.logLevel = karmaConfig.LOG_ERROR
karmaConfig.set(config)

18
js/tests/lt-local.js Normal file
View File

@@ -0,0 +1,18 @@
const lambdaTunnel = require("@lambdatest/node-tunnel");
const tunnelInstance = new lambdaTunnel();
const tunnelArguments = {
user: process.env.LT_USERNAME,
key: process.env.LT_ACCESS_KEY,
tunnelName: process.env.LT_TUNNEL_NAME || 'jasmine',
logFile: "local.log"
};
if (process.env.LAMBDATEST == 'true') {
(async () => {
try {
await tunnelInstance.start(tunnelArguments)
} catch (err) {
console.log(err.message)
}
})()
}

1565
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -72,6 +72,8 @@
"js-test-integration-bundle": "rollup --config js/tests/integration/rollup.bundle.js",
"js-test-integration-modularity": "rollup --config js/tests/integration/rollup.bundle-modularity.js",
"js-test-cloud": "cross-env BROWSERSTACK=true npm run js-test-karma",
"js-test-ltcloud": "cross-env LAMBDATEST=true npm-run-all js-test-ltTunnel js-test-karma ",
"js-test-ltTunnel": "node js/tests/lt-local",
"js-test-jquery": "cross-env JQUERY=true npm run js-test-karma",
"lint": "npm-run-all --aggregate-output --continue-on-error --parallel js-lint css-lint lockfile-lint",
"docs": "npm-run-all docs-build docs-lint",
@@ -107,6 +109,7 @@
"@babel/core": "^7.24.0",
"@babel/preset-env": "^7.24.0",
"@popperjs/core": "^2.11.8",
"@lambdatest/node-tunnel": "^3.0.12",
"@rollup/plugin-babel": "^6.0.4",
"@rollup/plugin-commonjs": "^25.0.7",
"@rollup/plugin-node-resolve": "^15.2.3",
@@ -137,6 +140,7 @@
"karma-jasmine": "^5.1.0",
"karma-jasmine-html-reporter": "^2.1.0",
"karma-rollup-preprocessor": "7.0.7",
"karma-webdriver-launcher": "^1.0.8",
"lockfile-lint": "^4.13.2",
"nodemon": "^3.1.0",
"npm-run-all2": "^6.1.2",