blob: 0c157567b5f2d88101c0324a51e1c0ea3f6fa80d [file] [log] [blame]
// Copyright (c) 2023, 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 'dart:io';
import 'package:jni/jni.dart';
import 'package:test/test.dart';
import 'test_util/test_util.dart';
void main() {
// Don't forget to initialize JNI.
if (!Platform.isAndroid) {
spawnJvm();
}
run(testRunner: test);
}
void run({required TestRunnerCallback testRunner}) {
JMap<JString, JString> testDataMap(Arena arena) {
return {
"1".toJString()..releasedBy(arena): "One".toJString()..releasedBy(arena),
"2".toJString()..releasedBy(arena): "Two".toJString()..releasedBy(arena),
"3".toJString()..releasedBy(arena): "Three".toJString()
..releasedBy(arena),
}.toJMap(JString.type, JString.type)
..releasedBy(arena);
}
testRunner('length', () {
using((arena) {
final map = testDataMap(arena);
expect(map.length, 3);
});
});
testRunner('[]', () {
using((arena) {
final map = testDataMap(arena);
// ignore: collection_methods_unrelated_type
expect(map[1], null);
expect(
map["1".toJString()..releasedBy(arena)]
?.toDartString(releaseOriginal: true),
"One",
);
expect(
map["4".toJString()..releasedBy(arena)],
null,
);
});
});
testRunner('[]=', () {
using((arena) {
final map = testDataMap(arena);
map["0".toJString()..releasedBy(arena)] = "Zero".toJString()
..releasedBy(arena);
expect(
map["0".toJString()..releasedBy(arena)]
?.toDartString(releaseOriginal: true),
"Zero",
);
expect(map.length, 4);
map["1".toJString()..releasedBy(arena)] = "one!".toJString()
..releasedBy(arena);
expect(
map["1".toJString()..releasedBy(arena)]
?.toDartString(releaseOriginal: true),
"one!",
);
expect(map.length, 4);
});
});
testRunner('addAll', () {
using((arena) {
final map = testDataMap(arena);
final toAdd = {
"0".toJString()..releasedBy(arena): "Zero".toJString()
..releasedBy(arena),
"1".toJString()..releasedBy(arena): "one!".toJString()
..releasedBy(arena),
}.toJMap(JString.type, JString.type);
map.addAll(toAdd);
expect(map.length, 4);
expect(
map["0".toJString()..releasedBy(arena)]
?.toDartString(releaseOriginal: true),
"Zero",
);
expect(
map["1".toJString()..releasedBy(arena)]
?.toDartString(releaseOriginal: true),
"one!",
);
map.addAll({
"4".toJString()..releasedBy(arena): "Four".toJString()
..releasedBy(arena)
});
expect(map.length, 5);
});
});
testRunner('clear, isEmpty, isNotEmpty', () {
using((arena) {
final map = testDataMap(arena);
expect(map.isEmpty, false);
expect(map.isNotEmpty, true);
map.clear();
expect(map.isEmpty, true);
expect(map.isNotEmpty, false);
});
});
testRunner('containsKey', () {
using((arena) {
final map = testDataMap(arena);
// ignore: iterable_contains_unrelated_type
expect(map.containsKey(1), false);
expect(map.containsKey("1".toJString()..releasedBy(arena)), true);
expect(map.containsKey("4".toJString()..releasedBy(arena)), false);
});
});
testRunner('containsValue', () {
using((arena) {
final map = testDataMap(arena);
// ignore: iterable_contains_unrelated_type
expect(map.containsValue(1), false);
expect(map.containsValue("One".toJString()..releasedBy(arena)), true);
expect(map.containsValue("Four".toJString()..releasedBy(arena)), false);
});
});
testRunner('keys', () {
using((arena) {
final map = testDataMap(arena);
final keys = map.keys;
expect(
keys
.map((element) => element.toDartString(releaseOriginal: true))
.toSet(),
{"1", "2", "3"},
);
});
});
testRunner('remove', () {
using((arena) {
final map = testDataMap(arena);
// ignore: collection_methods_unrelated_type
expect(map.remove(1), null);
expect(map.remove("4".toJString()..releasedBy(arena)), null);
expect(map.length, 3);
expect(
map
.remove("3".toJString()..releasedBy(arena))
?.toDartString(releaseOriginal: true),
"Three",
);
expect(map.length, 2);
});
});
testRunner('type hashCode, ==', () {
using((arena) {
final a = testDataMap(arena);
final b = testDataMap(arena);
expect(a.$type, b.$type);
expect(a.$type, b.$type);
expect(a.$type.hashCode, b.$type.hashCode);
final c = JMap.hash(JObject.type, JObject.type)..releasedBy(arena);
expect(a.$type, isNot(c.$type));
expect(a.$type.hashCode, isNot(c.$type.hashCode));
});
});
}