Skip to content

Commit ea0a028

Browse files
isooskevmoo
authored andcommitted
Detect native extensions. Fixes dart-lang#34. (dart-lang#35)
1 parent 9210926 commit ea0a028

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

lib/src/platform.dart

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ abstract class KnownPlatforms {
1212
static const String flutter = 'flutter';
1313
static const String mirrors = 'mirrors';
1414

15+
/// Native extensions (Dart VM with C/C++ code).
16+
static const String native = 'native';
17+
1518
static const String angular = 'angular';
1619
}
1720

@@ -45,23 +48,27 @@ class Platform extends Object with _$PlatformSerializerMixin {
4548

4649
bool get hasConflict =>
4750
(!worksAnywhere) ||
48-
(uses.contains(KnownPlatforms.flutter) && !worksInFlutter);
51+
(uses.contains(KnownPlatforms.flutter) && !worksInFlutter) ||
52+
(uses.contains(KnownPlatforms.native) && !worksInConsole);
4953

5054
bool get worksEverywhere =>
5155
worksInBrowser && worksInConsole && worksInFlutter;
5256

5357
bool get worksAnywhere => worksInBrowser || worksInConsole || worksInFlutter;
5458

5559
bool get worksInBrowser =>
56-
_hasNoUseOf([KnownPlatforms.flutter]) &&
60+
_hasNoUseOf([KnownPlatforms.flutter, KnownPlatforms.native]) &&
5761
(uses.contains(KnownPlatforms.browser) ||
5862
_hasNoUseOf([KnownPlatforms.console]));
5963

6064
bool get worksInConsole =>
6165
_hasNoUseOf([KnownPlatforms.browser, KnownPlatforms.flutter]);
6266

63-
bool get worksInFlutter =>
64-
_hasNoUseOf([KnownPlatforms.browser, KnownPlatforms.mirrors]);
67+
bool get worksInFlutter => _hasNoUseOf([
68+
KnownPlatforms.browser,
69+
KnownPlatforms.mirrors,
70+
KnownPlatforms.native,
71+
]);
6572

6673
bool _hasNoUseOf(Iterable<String> platforms) =>
6774
!platforms.any((p) => uses.contains(p));
@@ -104,6 +111,10 @@ Platform classifyPlatform(Iterable<String> dependencies) {
104111
uses.add(KnownPlatforms.mirrors);
105112
}
106113

114+
if (libs.any((String lib) => lib.startsWith('dart-ext:'))) {
115+
uses.add(KnownPlatforms.native);
116+
}
117+
107118
// packages
108119
if (libs.any((p) => p.startsWith('package:angular2/'))) {
109120
uses.add(KnownPlatforms.angular);

test/platform_test.dart

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,17 @@ void main() {
8383
expect(p.worksInFlutter, isFalse);
8484
});
8585

86+
test('detect native', () {
87+
Platform p = classifyPlatform(['dart:io', 'dart-ext:some-extension']);
88+
expect(p.hasConflict, isFalse);
89+
expect(p.worksAnywhere, isTrue);
90+
expect(p.worksEverywhere, isFalse);
91+
expect(p.worksInBrowser, isFalse);
92+
expect(p.worksInConsole, isTrue);
93+
expect(p.worksInFlutter, isFalse);
94+
expect(p.uses, [KnownPlatforms.console, KnownPlatforms.native]);
95+
});
96+
8697
test('detect angular', () {
8798
Platform p =
8899
classifyPlatform(['dart:html', 'package:angular2/angular2.dart']);
@@ -116,6 +127,17 @@ void main() {
116127
expect(p.worksInConsole, isFalse);
117128
expect(p.worksInFlutter, isFalse);
118129
});
130+
131+
test('native + dart:ui', () {
132+
Platform p = classifyPlatform(['dart:ui', 'dart-ext:some-extension']);
133+
expect(p.hasConflict, isTrue);
134+
expect(p.worksAnywhere, isFalse);
135+
expect(p.worksEverywhere, isFalse);
136+
expect(p.worksInBrowser, isFalse);
137+
expect(p.worksInConsole, isFalse);
138+
expect(p.worksInFlutter, isFalse);
139+
expect(p.uses, [KnownPlatforms.flutter, KnownPlatforms.native]);
140+
});
119141
});
120142

121143
group('PlatformSummary', () {

0 commit comments

Comments
 (0)