| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 import 'dart:async'; | 5 import 'dart:async'; |
| 6 import 'dart:io'; | 6 import 'dart:io'; |
| 7 import 'dart:typed_data'; | 7 import 'dart:typed_data'; |
| 8 | 8 |
| 9 import "package:async_helper/async_helper.dart"; | 9 import "package:async_helper/async_helper.dart"; |
| 10 import "package:expect/expect.dart"; | 10 import "package:expect/expect.dart"; |
| 11 | 11 |
| 12 void testZLibDeflateEmpty() { | 12 void testZLibDeflateEmpty() { |
| 13 asyncStart(); | 13 asyncStart(); |
| 14 var controller = new StreamController(sync: true); | 14 var controller = new StreamController(sync: true); |
| 15 controller.stream.transform(new ZLibEncoder(gzip: false, level: 6)) | 15 controller.stream.transform(new ZLibEncoder(gzip: false, level: 6)).fold([], |
| 16 .fold([], (buffer, data) { | 16 (buffer, data) { |
| 17 buffer.addAll(data); | 17 buffer.addAll(data); |
| 18 return buffer; | 18 return buffer; |
| 19 }) | 19 }).then((data) { |
| 20 .then((data) { | 20 Expect.listEquals([120, 156, 3, 0, 0, 0, 0, 1], data); |
| 21 Expect.listEquals([120, 156, 3, 0, 0, 0, 0, 1], data); | 21 asyncEnd(); |
| 22 asyncEnd(); | 22 }); |
| 23 }); | |
| 24 controller.close(); | 23 controller.close(); |
| 25 } | 24 } |
| 26 | 25 |
| 27 void testZLibDeflateEmptyGzip() { | 26 void testZLibDeflateEmptyGzip() { |
| 28 asyncStart(); | 27 asyncStart(); |
| 29 var controller = new StreamController(sync: true); | 28 var controller = new StreamController(sync: true); |
| 30 controller.stream.transform(new ZLibEncoder(gzip: true, level: 6)) | 29 controller.stream.transform(new ZLibEncoder(gzip: true, level: 6)).fold([], |
| 31 .fold([], (buffer, data) { | 30 (buffer, data) { |
| 32 buffer.addAll(data); | 31 buffer.addAll(data); |
| 33 return buffer; | 32 return buffer; |
| 34 }) | 33 }).then((data) { |
| 35 .then((data) { | 34 Expect.isTrue(data.length > 0); |
| 36 Expect.isTrue(data.length > 0); | 35 Expect.listEquals([], new ZLibDecoder().convert(data)); |
| 37 Expect.listEquals([], new ZLibDecoder().convert(data)); | 36 asyncEnd(); |
| 38 asyncEnd(); | 37 }); |
| 39 }); | |
| 40 controller.close(); | 38 controller.close(); |
| 41 } | 39 } |
| 42 | 40 |
| 43 void testZLibDeflate(List<int> data) { | 41 void testZLibDeflate(List<int> data) { |
| 44 asyncStart(); | 42 asyncStart(); |
| 45 var controller = new StreamController(sync: true); | 43 var controller = new StreamController(sync: true); |
| 46 controller.stream.transform(new ZLibEncoder(gzip: false, level: 6)) | 44 controller.stream.transform(new ZLibEncoder(gzip: false, level: 6)).fold([], |
| 47 .fold([], (buffer, data) { | 45 (buffer, data) { |
| 48 buffer.addAll(data); | 46 buffer.addAll(data); |
| 49 return buffer; | 47 return buffer; |
| 50 }) | 48 }).then((data) { |
| 51 .then((data) { | 49 Expect.listEquals([ |
| 52 Expect.listEquals( | 50 120, |
| 53 [120, 156, 99, 96, 100, 98, 102, 97, 101, 99, 231, 224, 4, 0, 0, | 51 156, |
| 54 175, 0, 46], | 52 99, |
| 55 data); | 53 96, |
| 56 asyncEnd(); | 54 100, |
| 57 }); | 55 98, |
| 56 102, |
| 57 97, |
| 58 101, |
| 59 99, |
| 60 231, |
| 61 224, |
| 62 4, |
| 63 0, |
| 64 0, |
| 65 175, |
| 66 0, |
| 67 46 |
| 68 ], data); |
| 69 asyncEnd(); |
| 70 }); |
| 58 controller.add(data); | 71 controller.add(data); |
| 59 controller.close(); | 72 controller.close(); |
| 60 } | 73 } |
| 61 | 74 |
| 62 void testZLibDeflateGZip(List<int> data) { | 75 void testZLibDeflateGZip(List<int> data) { |
| 63 asyncStart(); | 76 asyncStart(); |
| 64 var controller = new StreamController(sync: true); | 77 var controller = new StreamController(sync: true); |
| 65 controller.stream.transform(new ZLibEncoder(gzip: true)) | 78 controller.stream.transform(new ZLibEncoder(gzip: true)).fold([], |
| 66 .fold([], (buffer, data) { | 79 (buffer, data) { |
| 67 buffer.addAll(data); | 80 buffer.addAll(data); |
| 68 return buffer; | 81 return buffer; |
| 69 }) | 82 }).then((data) { |
| 70 .then((data) { | 83 Expect.equals(30, data.length); |
| 71 Expect.equals(30, data.length); | 84 Expect.listEquals( |
| 72 Expect.listEquals([99, 96, 100, 98, 102, 97, 101, 99, 231, 224, 4, 0, | 85 [ |
| 73 70, 215, 108, 69, 10, 0, 0, 0], | 86 99, |
| 74 // Skip header, as it can change. | 87 96, |
| 75 data.sublist(10)); | 88 100, |
| 76 asyncEnd(); | 89 98, |
| 77 }); | 90 102, |
| 91 97, |
| 92 101, |
| 93 99, |
| 94 231, |
| 95 224, |
| 96 4, |
| 97 0, |
| 98 70, |
| 99 215, |
| 100 108, |
| 101 69, |
| 102 10, |
| 103 0, |
| 104 0, |
| 105 0 |
| 106 ], |
| 107 // Skip header, as it can change. |
| 108 data.sublist(10)); |
| 109 asyncEnd(); |
| 110 }); |
| 78 controller.add(data); | 111 controller.add(data); |
| 79 controller.close(); | 112 controller.close(); |
| 80 } | 113 } |
| 81 | 114 |
| 82 void testZLibDeflateRaw(List<int> data) { | 115 void testZLibDeflateRaw(List<int> data) { |
| 83 asyncStart(); | 116 asyncStart(); |
| 84 var controller = new StreamController(sync: true); | 117 var controller = new StreamController(sync: true); |
| 85 controller.stream.transform(new ZLibEncoder(raw: true, level: 6)) | 118 controller.stream.transform(new ZLibEncoder(raw: true, level: 6)).fold([], |
| 86 .fold([], (buffer, data) { | 119 (buffer, data) { |
| 87 buffer.addAll(data); | 120 buffer.addAll(data); |
| 88 return buffer; | 121 return buffer; |
| 89 }) | 122 }).then((data) { |
| 90 .then((data) { | 123 Expect |
| 91 Expect.listEquals([99, 96, 100, 98, 102, 97, 101, 99, 231, 224, 4, 0], | 124 .listEquals([99, 96, 100, 98, 102, 97, 101, 99, 231, 224, 4, 0], data); |
| 92 data); | 125 asyncEnd(); |
| 93 asyncEnd(); | 126 }); |
| 94 }); | |
| 95 controller.add(data); | 127 controller.add(data); |
| 96 controller.close(); | 128 controller.close(); |
| 97 } | 129 } |
| 98 | 130 |
| 99 void testZLibDeflateInvalidLevel() { | 131 void testZLibDeflateInvalidLevel() { |
| 100 test2(gzip, level) { | 132 test2(gzip, level) { |
| 101 [true, false].forEach((gzip) { | 133 [true, false].forEach((gzip) { |
| 102 [-2, -20, 10, 42, null, "9"].forEach((level) { | 134 [-2, -20, 10, 42, null, "9"].forEach((level) { |
| 103 Expect.throws( | 135 Expect.throws(() => new ZLibEncoder(gzip: gzip, level: level), |
| 104 () => new ZLibEncoder(gzip: gzip, level: level), | 136 (e) => e is ArgumentError, "'level' must be in range -1..9"); |
| 105 (e) => e is ArgumentError, | |
| 106 "'level' must be in range -1..9" | |
| 107 ); | |
| 108 }); | 137 }); |
| 109 }); | 138 }); |
| 110 }; | 139 } |
| 140 |
| 141 ; |
| 111 } | 142 } |
| 112 | 143 |
| 113 void testZLibInflate(List<int> data) { | 144 void testZLibInflate(List<int> data) { |
| 114 [true, false].forEach((gzip) { | 145 [true, false].forEach((gzip) { |
| 115 [ZLibOption.STRATEGY_FILTERED, ZLibOption.STRATEGY_HUFFMAN_ONLY, | 146 [ |
| 116 ZLibOption.STRATEGY_RLE, ZLibOption.STRATEGY_FIXED, | 147 ZLibOption.STRATEGY_FILTERED, |
| 117 ZLibOption.STRATEGY_DEFAULT].forEach((strategy) { | 148 ZLibOption.STRATEGY_HUFFMAN_ONLY, |
| 149 ZLibOption.STRATEGY_RLE, |
| 150 ZLibOption.STRATEGY_FIXED, |
| 151 ZLibOption.STRATEGY_DEFAULT |
| 152 ].forEach((strategy) { |
| 118 [3, 6, 9].forEach((level) { | 153 [3, 6, 9].forEach((level) { |
| 119 asyncStart(); | 154 asyncStart(); |
| 120 var controller = new StreamController(sync: true); | 155 var controller = new StreamController(sync: true); |
| 121 controller.stream | 156 controller.stream |
| 122 .transform(new ZLibEncoder(gzip: gzip, level: level, | 157 .transform( |
| 123 strategy: strategy)) | 158 new ZLibEncoder(gzip: gzip, level: level, strategy: strategy)) |
| 124 .transform(new ZLibDecoder()) | 159 .transform(new ZLibDecoder()) |
| 125 .fold([], (buffer, data) { | 160 .fold([], (buffer, data) { |
| 126 buffer.addAll(data); | 161 buffer.addAll(data); |
| 127 return buffer; | 162 return buffer; |
| 128 }) | 163 }).then((inflated) { |
| 129 .then((inflated) { | 164 Expect.listEquals(data, inflated); |
| 130 Expect.listEquals(data, inflated); | 165 asyncEnd(); |
| 131 asyncEnd(); | 166 }); |
| 132 }); | |
| 133 controller.add(data); | 167 controller.add(data); |
| 134 controller.close(); | 168 controller.close(); |
| 135 }); | 169 }); |
| 136 }); | 170 }); |
| 137 }); | 171 }); |
| 138 } | 172 } |
| 139 | 173 |
| 140 void testZLibInflateRaw(List<int> data) { | 174 void testZLibInflateRaw(List<int> data) { |
| 141 [3, 6, 9].forEach((level) { | 175 [3, 6, 9].forEach((level) { |
| 142 asyncStart(); | 176 asyncStart(); |
| 143 var controller = new StreamController(sync: true); | 177 var controller = new StreamController(sync: true); |
| 144 controller.stream | 178 controller.stream |
| 145 .transform(new ZLibEncoder(raw: true, level: level)) | 179 .transform(new ZLibEncoder(raw: true, level: level)) |
| 146 .transform(new ZLibDecoder(raw: true)) | 180 .transform(new ZLibDecoder(raw: true)) |
| 147 .fold([], (buffer, data) { | 181 .fold([], (buffer, data) { |
| 148 buffer.addAll(data); | 182 buffer.addAll(data); |
| 149 return buffer; | 183 return buffer; |
| 150 }) | 184 }).then((inflated) { |
| 151 .then((inflated) { | 185 Expect.listEquals(data, inflated); |
| 152 Expect.listEquals(data, inflated); | 186 asyncEnd(); |
| 153 asyncEnd(); | 187 }); |
| 154 }); | |
| 155 controller.add(data); | 188 controller.add(data); |
| 156 controller.close(); | 189 controller.close(); |
| 157 }); | 190 }); |
| 158 } | 191 } |
| 159 | 192 |
| 160 void testZLibInflateSync(List<int> data) { | 193 void testZLibInflateSync(List<int> data) { |
| 161 [true, false].forEach((gzip) { | 194 [true, false].forEach((gzip) { |
| 162 [3, 6, 9].forEach((level) { | 195 [3, 6, 9].forEach((level) { |
| 163 var encoded = new ZLibEncoder(gzip: gzip, level: level).convert(data); | 196 var encoded = new ZLibEncoder(gzip: gzip, level: level).convert(data); |
| 164 var decoded = new ZLibDecoder().convert(encoded); | 197 var decoded = new ZLibDecoder().convert(encoded); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 179 var data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; | 212 var data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; |
| 180 | 213 |
| 181 [true, false].forEach((gzip) { | 214 [true, false].forEach((gzip) { |
| 182 [3, 6, 9].forEach((level) { | 215 [3, 6, 9].forEach((level) { |
| 183 asyncStart(); | 216 asyncStart(); |
| 184 var controller = new StreamController(sync: true); | 217 var controller = new StreamController(sync: true); |
| 185 controller.stream | 218 controller.stream |
| 186 .transform(new ZLibEncoder(gzip: gzip, level: level, windowBits: 8)) | 219 .transform(new ZLibEncoder(gzip: gzip, level: level, windowBits: 8)) |
| 187 .transform(new ZLibDecoder(windowBits: 10)) | 220 .transform(new ZLibDecoder(windowBits: 10)) |
| 188 .fold([], (buffer, data) { | 221 .fold([], (buffer, data) { |
| 189 buffer.addAll(data); | 222 buffer.addAll(data); |
| 190 return buffer; | 223 return buffer; |
| 191 }) | 224 }).then((inflated) { |
| 192 .then((inflated) { | 225 Expect.listEquals(data, inflated); |
| 193 Expect.listEquals(data, inflated); | 226 asyncEnd(); |
| 194 asyncEnd(); | 227 }); |
| 195 }); | |
| 196 controller.add(data); | 228 controller.add(data); |
| 197 controller.close(); | 229 controller.close(); |
| 198 }); | 230 }); |
| 199 }); | 231 }); |
| 200 } | 232 } |
| 201 | 233 |
| 202 void testZlibWithDictionary() { | 234 void testZlibWithDictionary() { |
| 203 var dict = [102, 111, 111, 98, 97, 114]; | 235 var dict = [102, 111, 111, 98, 97, 114]; |
| 204 var data = [98, 97, 114, 102, 111, 111]; | 236 var data = [98, 97, 114, 102, 111, 111]; |
| 205 | 237 |
| 206 [3, 6, 9].forEach((level) { | 238 [3, 6, 9].forEach((level) { |
| 207 var encoded = new ZLibEncoder(level: level, dictionary: dict) | 239 var encoded = new ZLibEncoder(level: level, dictionary: dict).convert(data); |
| 208 .convert(data); | |
| 209 var decoded = new ZLibDecoder(dictionary: dict).convert(encoded); | 240 var decoded = new ZLibDecoder(dictionary: dict).convert(encoded); |
| 210 Expect.listEquals(data, decoded); | 241 Expect.listEquals(data, decoded); |
| 211 }); | 242 }); |
| 212 } | 243 } |
| 213 | 244 |
| 214 var generateListTypes = [ | 245 var generateListTypes = [ |
| 215 (list) => list, | 246 (list) => list, |
| 216 (list) => new Uint8List.fromList(list), | 247 (list) => new Uint8List.fromList(list), |
| 217 (list) => new Int8List.fromList(list), | 248 (list) => new Int8List.fromList(list), |
| 218 (list) => new Uint16List.fromList(list), | 249 (list) => new Uint16List.fromList(list), |
| 219 (list) => new Int16List.fromList(list), | 250 (list) => new Int16List.fromList(list), |
| 220 (list) => new Uint32List.fromList(list), | 251 (list) => new Uint32List.fromList(list), |
| 221 (list) => new Int32List.fromList(list), | 252 (list) => new Int32List.fromList(list), |
| 222 ]; | 253 ]; |
| 223 | 254 |
| 224 var generateViewTypes = [ | 255 var generateViewTypes = [ |
| 225 (list) => new Uint8List.view((new Uint8List.fromList(list)).buffer, 1, 8), | 256 (list) => new Uint8List.view((new Uint8List.fromList(list)).buffer, 1, 8), |
| 226 (list) => new Int8List.view((new Int8List.fromList(list)).buffer, 1, 8), | 257 (list) => new Int8List.view((new Int8List.fromList(list)).buffer, 1, 8), |
| 227 (list) => new Uint16List.view((new Uint16List.fromList(list)).buffer, 2, 6), | 258 (list) => new Uint16List.view((new Uint16List.fromList(list)).buffer, 2, 6), |
| 228 (list) => new Int16List.view((new Int16List.fromList(list)).buffer, 2, 6), | 259 (list) => new Int16List.view((new Int16List.fromList(list)).buffer, 2, 6), |
| 229 (list) => new Uint32List.view((new Uint32List.fromList(list)).buffer, 4, 4), | 260 (list) => new Uint32List.view((new Uint32List.fromList(list)).buffer, 4, 4), |
| 230 (list) => new Int32List.view((new Int32List.fromList(list)).buffer, 4, 4), | 261 (list) => new Int32List.view((new Int32List.fromList(list)).buffer, 4, 4), |
| 231 ]; | 262 ]; |
| 232 | 263 |
| 233 | |
| 234 void main() { | 264 void main() { |
| 235 asyncStart(); | 265 asyncStart(); |
| 236 testZLibDeflateEmpty(); | 266 testZLibDeflateEmpty(); |
| 237 testZLibDeflateEmptyGzip(); | 267 testZLibDeflateEmptyGzip(); |
| 238 testZLibDeflateInvalidLevel(); | 268 testZLibDeflateInvalidLevel(); |
| 239 generateListTypes.forEach((f) { | 269 generateListTypes.forEach((f) { |
| 240 var data = f([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); | 270 var data = f([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); |
| 241 testZLibDeflate(data); | 271 testZLibDeflate(data); |
| 242 testZLibDeflateGZip(data); | 272 testZLibDeflateGZip(data); |
| 243 testZLibDeflateRaw(data); | 273 testZLibDeflateRaw(data); |
| 244 testZLibInflate(data); | 274 testZLibInflate(data); |
| 245 testZLibInflateSync(data); | 275 testZLibInflateSync(data); |
| 246 testZLibInflateRaw(data); | 276 testZLibInflateRaw(data); |
| 247 }); | 277 }); |
| 248 generateViewTypes.forEach((f) { | 278 generateViewTypes.forEach((f) { |
| 249 var data = f([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); | 279 var data = f([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); |
| 250 testZLibInflate(data); | 280 testZLibInflate(data); |
| 251 testZLibInflateSync(data); | 281 testZLibInflateSync(data); |
| 252 testZLibInflateRaw(data); | 282 testZLibInflateRaw(data); |
| 253 }); | 283 }); |
| 254 testZlibInflateThrowsWithSmallerWindow(); | 284 testZlibInflateThrowsWithSmallerWindow(); |
| 255 testZlibInflateWithLargerWindow(); | 285 testZlibInflateWithLargerWindow(); |
| 256 testZlibWithDictionary(); | 286 testZlibWithDictionary(); |
| 257 asyncEnd(); | 287 asyncEnd(); |
| 258 } | 288 } |
| OLD | NEW |