From c9a2473fe43ae376b1943df59c6cdbcf40930499 Mon Sep 17 00:00:00 2001
From: xuty <xty50337@hotmail.com>
Date: Wed, 5 Jan 2022 00:14:12 +0800
Subject: [PATCH] Add more tests

---
 lib/src/utils.dart   |  7 ++++++-
 test/minio_test.dart |  4 ++++
 test/utils_test.dart | 10 ++++++++++
 3 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/lib/src/utils.dart b/lib/src/utils.dart
index 0d43fe4..9ab28e9 100644
--- a/lib/src/utils.dart
+++ b/lib/src/utils.dart
@@ -94,6 +94,8 @@ class MinChunkSize extends StreamTransformerBase<Uint8List, Uint8List> {
 
   final int size;
 
+  var _yielded = false;
+
   @override
   Stream<Uint8List> bind(Stream<Uint8List> stream) async* {
     var buffer = BytesBuilder(copy: false);
@@ -106,9 +108,12 @@ class MinChunkSize extends StreamTransformerBase<Uint8List, Uint8List> {
       }
 
       yield buffer.takeBytes();
+      _yielded = true;
     }
 
-    yield buffer.takeBytes();
+    if (buffer.isNotEmpty || !_yielded) {
+      yield buffer.takeBytes();
+    }
   }
 }
 
diff --git a/test/minio_test.dart b/test/minio_test.dart
index 7b970c2..2104e21 100644
--- a/test/minio_test.dart
+++ b/test/minio_test.dart
@@ -684,21 +684,25 @@ void testListObjects() {
     final minio = getMinioClient();
     final bucketName = uniqueName();
     final objectName = uniqueName();
+    final objectNameUtf8 = uniqueName() + '鏂囦欢銉曘偂銈ゃ儷銆傘劥銋併劥';
     final data = Uint8List.fromList([1, 2, 3, 4, 5]);
 
     setUpAll(() async {
       await minio.makeBucket(bucketName);
       await minio.putObject(bucketName, objectName, Stream.value(data));
+      await minio.putObject(bucketName, objectNameUtf8, Stream.value(data));
     });
 
     tearDownAll(() async {
       await minio.removeObject(bucketName, objectName);
+      await minio.removeObject(bucketName, objectNameUtf8);
       await minio.removeBucket(bucketName);
     });
 
     test('succeeds', () async {
       final result = await minio.listAllObjects(bucketName);
       expect(result.objects.map((e) => e.key).contains(objectName), isTrue);
+      expect(result.objects.map((e) => e.key).contains(objectNameUtf8), isTrue);
     });
 
     test('fails on invalid bucket', () {
diff --git a/test/utils_test.dart b/test/utils_test.dart
index 03b4bad..7a31100 100644
--- a/test/utils_test.dart
+++ b/test/utils_test.dart
@@ -80,4 +80,14 @@ void testBlockStream() {
       ]),
     );
   });
+
+  test('MinChunkSize with empty stream', () async {
+    final stream = Stream<Uint8List>.empty().transform(MinChunkSize(5));
+    expect(await stream.toList(), equals([Uint8List.fromList([])]));
+  });
+
+  test('MinChunkSize with zero length stream', () async {
+    final stream = Stream.value(Uint8List(0)).transform(MinChunkSize(5));
+    expect(await stream.toList(), equals([Uint8List.fromList([])]));
+  });
 }
-- 
GitLab