blob: 14ed74e9f6ef29b57b4a01b6d835d983f431a4d7 [file]
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
// for details. 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:jnigen/src/writers/files_writer.dart';
import 'package:jnigen/src/util/name_utils.dart';
import 'package:test/test.dart';
class ResolverTest {
ResolverTest(this.binaryName, this.expectedImport, this.expectedName);
String binaryName;
String expectedImport;
String expectedName;
}
void main() {
final resolver = PackagePathResolver(
{
'org.apache.pdfbox': 'package:pdfbox/pdfbox.dart',
'android.os.Process': 'package:android/os.dart',
},
'a.b',
{
'a.b.C',
'a.b.c.D',
'a.b.c.d.E',
'a.X',
'e.f.G',
'e.F',
'a.g.Y',
'a.m.n.P'
});
final tests = [
// Absolute imports resolved using import map
ResolverTest(
'android.os.Process', 'package:android/os.dart', 'os_.Process'),
ResolverTest('org.apache.pdfbox.pdmodel.PDDocument',
'package:pdfbox/pdfbox.dart', 'pdmodel_.PDDocument'),
// Relative imports
// inner package
ResolverTest('a.b.c.D', 'b/c.dart', 'c_.D'),
// inner package, deeper
ResolverTest('a.b.c.d.E', 'b/c/d.dart', 'd_.E'),
// parent package
ResolverTest('a.X', '../a.dart', 'a_.X'),
// unrelated package in same translation unit
ResolverTest('e.f.G', '../e/f.dart', 'f_.G'),
ResolverTest('e.F', '../e.dart', 'e_.F'),
// neighbour package
ResolverTest('a.g.Y', 'g.dart', 'g_.Y'),
// inner package of a neighbour package
ResolverTest('a.m.n.P', 'm/n.dart', 'n_.P'),
];
for (var testCase in tests) {
final binaryName = testCase.binaryName;
final packageName = cutFromLast(binaryName, '.')[0];
test(
'getImport $binaryName',
() => expect(resolver.getImport(packageName, binaryName),
equals(testCase.expectedImport)));
test(
'resolve $binaryName',
() => expect(
resolver.resolve(binaryName), equals(testCase.expectedName)));
}
test('resolve in same package',
() => expect(resolver.resolve('a.b.C'), equals('C')));
}