88 lines
2.5 KiB
Dart
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));
|
|
});
|
|
});
|
|
}
|