DefinitelyTyped/types/express-useragent/express-useragent-tests.ts
2019-09-24 11:02:39 -07:00

106 lines
3.4 KiB
TypeScript

import express = require('express');
import useragent = require('express-useragent');
function serializeDetails(details: useragent.Details): string {
const accessed: { [key: string]: any } = {
browser: details.browser,
geoIp: details.geoIp,
isAmaya: details.isAmaya,
isAndroid: details.isAndroid,
isAndroidTablet: details.isAndroidTablet,
isBada: details.isBada,
isBlackberry: details.isBlackberry,
isBot: details.isBot,
isCaptive: details.isCaptive,
isChrome: details.isChrome,
isChromeOS: details.isChromeOS,
isCurl: details.isCurl,
isDesktop: details.isDesktop,
isEdge: details.isEdge,
isEpiphany: details.isEpiphany,
isFirefox: details.isFirefox,
isFlock: details.isFlock,
isIE: details.isIE,
isIECompatibilityMode: details.isIECompatibilityMode,
isiPad: details.isiPad,
isiPhone: details.isiPhone,
isiPod: details.isiPod,
isKindleFire: details.isKindleFire,
isKonqueror: details.isKonqueror,
isLinux: details.isLinux,
isLinux64: details.isLinux64,
isMac: details.isMac,
isMobile: details.isMobile,
isOmniWeb: details.isOmniWeb,
isOpera: details.isOpera,
isRaspberry: details.isRaspberry,
isSafari: details.isSafari,
isSamsung: details.isSamsung,
isSeaMonkey: details.isSeaMonkey,
isSilk: details.isSilk,
isSmartTV: details.isSmartTV,
isTablet: details.isTablet,
isWebkit: details.isWebkit,
isWindows: details.isWindows,
isWindowsPhone: details.isWindowsPhone,
isWinJs: details.isWinJs,
os: details.os,
platform: details.platform,
silkAccelerated: details.silkAccelerated,
source: details.source,
version: details.version,
};
const keys = Object.keys(accessed);
return keys.map(key => `${key}:${accessed[key]}`).join(',');
}
function testMethods(userAgent: useragent.UserAgent): void {
userAgent.reset();
userAgent.testAndroidTablet();
userAgent.testBot();
userAgent.testCaptiveNetwork();
userAgent.testKindleFire();
userAgent.testMobile();
userAgent.testNginxGeoIP();
userAgent.testSilk();
userAgent.testSmartTV();
userAgent.testTablet();
userAgent.testWebkit();
userAgent.testCompatibilityMode();
const agent = userAgent.Agent;
const defaultAgent = userAgent.DefaultAgent;
serializeDetails(agent);
serializeDetails(defaultAgent);
const version = userAgent.version;
const browser = userAgent.getBrowser('Chrome/76.0.3809.100');
const browserVersion = userAgent.getBrowserVersion('Chrome/76.0.3809.100');
const os = userAgent.getOS('os x');
const platform = userAgent.getPlatform('macintosh');
const parsed = userAgent.parse('browser:chrome');
}
// Server tests
testMethods(useragent);
const app = express();
app.use(useragent.express());
app.get('/', (req, res) => {
const userAgentString = serializeDetails(req.useragent);
res.end(userAgentString);
});
app.get('/parse', (req, res) => {
const source = req.headers['user-agent'];
const ua = useragent.parse(source);
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end(JSON.stringify(ua));
});
// Browser tests
const browserUserAgent = new useragent.UserAgent();
testMethods(browserUserAgent);