twonly-app-dependencies/hashlib/test/md2_test.dart
2025-12-07 16:10:41 +01:00

88 lines
2.5 KiB
Dart

// Copyright (c) 2023, Sudipto Chandra
// All rights reserved. Check LICENSE file for details.
import 'dart:async';
import 'package:hashlib/hashlib.dart';
import 'package:test/test.dart';
final tests = {
"": "8350e5a3e24c153df2275c9f80692773",
"a": "32ec01ec4a6dac72c0ab96fb34c0b5d1",
"abc": "da853b0d3f88d99b30283a69e6ded6bb",
"message digest": "ab4f496bfb2a530b219ff33031fe06b0",
"abcdefghijklmnopqrstuvwxyz": "4e8ddff3650292ab5a4108c3aa47940b",
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789":
"da33def2a42df13975352846c30338cd",
"12345678901234567890123456789012345678901234567890123456789012345678901234567890":
"d5976f79d83d3a0dc9806c3c66f3efd8",
};
void main() {
group('MD2 test', () {
test('with an empty string', () {
expect(md2sum(""), tests[""]);
});
test('with a single letter', () {
expect(md2sum("a"), tests["a"]);
});
test('with a few letters', () {
expect(md2sum("abc"), tests["abc"]);
});
test('with a short string', () {
expect(md2sum("message digest"), tests["message digest"]);
});
test('with special case', () {
var key =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
expect(md2sum(key), tests[key]);
});
test('with longest string', () {
var last = tests.entries.last;
expect(md2sum(last.key), last.value);
});
test('with all known cases', () {
tests.forEach((key, value) {
expect(md2sum(key), value);
});
});
test('with stream', () async {
final last = tests.entries.last;
final input = last.key.codeUnits;
final stream = Stream.fromIterable([
input.take(7).toList(),
input.skip(7).take(10).toList(),
input.skip(17).take(15).toList(),
input.skip(32).toList(),
]);
final result = await md2.bind(stream).first;
expect(result.hex(), last.value, reason: "'${last.key}'");
});
test('sink test', () {
final last = tests.entries.last;
final input = last.key.codeUnits;
final output = last.value;
final sink = md2.createSink();
expect(sink.closed, isFalse);
for (int i = 0; i < input.length; i += 12) {
sink.add(input.skip(i).take(12).toList());
}
expect(sink.digest().hex(), equals(output));
expect(sink.closed, isTrue);
expect(sink.digest().hex(), equals(output));
sink.reset();
sink.add(input);
sink.close();
expect(sink.closed, isTrue);
expect(sink.digest().hex(), equals(output));
});
});
}