blob: ae291d0cc5bf7aef6e35523566b5f694dbcbcabe [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:test/bootstrap/browser.dart';
import 'package:test/test.dart';
import 'package:ui/src/engine/browser_detection.dart';
void main() {
internalBootstrapBrowserTest(() => testMain);
}
void testMain() {
group('detectBrowserEngineByVendorAgent', () {
test('Should detect Blink', () {
// Chrome Version 89.0.4389.90 (Official Build) (x86_64) / MacOS
final BrowserEngine browserEngine = detectBrowserEngineByVendorAgent(
'Google Inc.',
'mozilla/5.0 (macintosh; intel mac os x 11_2_3) applewebkit/537.36 '
'(khtml, like gecko) chrome/89.0.4389.90 safari/537.36');
expect(browserEngine, BrowserEngine.blink);
});
test('Should detect Firefox', () {
// 85.0.2 (64-bit) / MacOS
final BrowserEngine browserEngine = detectBrowserEngineByVendorAgent(
'',
'mozilla/5.0 (macintosh; intel mac os x 10.16; rv:85.0) '
'gecko/20100101 firefox/85.0');
expect(browserEngine, BrowserEngine.firefox);
});
test('Should detect Safari', () {
final BrowserEngine browserEngine = detectBrowserEngineByVendorAgent(
'Apple Computer, Inc.',
'mozilla/5.0 (macintosh; intel mac os x 10_15_6) applewebkit/605.1.15 '
'(khtml, like gecko) version/14.0.3 safari/605.1.15');
expect(browserEngine, BrowserEngine.webkit);
});
});
group('detectOperatingSystem', () {
void expectOs(
OperatingSystem expectedOs, {
String platform = 'any',
String ua = 'any',
int touchPoints = 0,
}) {
expect(
detectOperatingSystem(
overridePlatform: platform,
overrideUserAgent: ua,
overrideMaxTouchPoints: touchPoints,
),
expectedOs);
}
test('Determine unknown for weird values of platform/ua', () {
expectOs(OperatingSystem.unknown);
});
test('Determine MacOS if platform starts by Mac', () {
expectOs(
OperatingSystem.macOs,
platform: 'MacIntel',
);
expectOs(
OperatingSystem.macOs,
platform: 'MacAnythingElse',
);
});
test('Determine iOS if platform contains iPhone/iPad/iPod', () {
expectOs(
OperatingSystem.iOs,
platform: 'iPhone',
);
expectOs(
OperatingSystem.iOs,
platform: 'iPhone Simulator',
);
expectOs(
OperatingSystem.iOs,
platform: 'iPad',
);
expectOs(
OperatingSystem.iOs,
platform: 'iPad Simulator',
);
expectOs(
OperatingSystem.iOs,
platform: 'iPod',
);
expectOs(
OperatingSystem.iOs,
platform: 'iPod Simulator',
);
});
// See https://github.com/flutter/flutter/issues/81918
test('Tell apart MacOS from iOS requesting a desktop site.', () {
expectOs(
OperatingSystem.macOs,
platform: 'MacARM',
);
expectOs(
OperatingSystem.iOs,
platform: 'MacARM',
touchPoints: 5,
);
});
test('Determine Android if user agent contains Android', () {
expectOs(
OperatingSystem.android,
ua: 'Mozilla/5.0 (Linux; U; Android 2.2) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
);
});
test('Determine Linux if the platform begins with Linux', () {
expectOs(
OperatingSystem.linux,
platform: 'Linux',
);
expectOs(
OperatingSystem.linux,
platform: 'Linux armv8l',
);
expectOs(
OperatingSystem.linux,
platform: 'Linux x86_64',
);
});
test('Determine Windows if the platform begins with Win', () {
expectOs(
OperatingSystem.windows,
platform: 'Windows',
);
expectOs(
OperatingSystem.windows,
platform: 'Win32',
);
expectOs(
OperatingSystem.windows,
platform: 'Win16',
);
expectOs(
OperatingSystem.windows,
platform: 'WinCE',
);
});
});
}