| // Copyright (c) 2013, 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:convert'; |
| |
| import 'package:expect/expect.dart'; |
| |
| // Test that the String and ByteConversionSinks make a copy when they need to |
| // adapt. |
| |
| class MyByteSink extends ByteConversionSinkBase { |
| var accumulator = []; |
| add(List<int> bytes) { |
| accumulator.add(bytes); |
| } |
| |
| close() {} |
| } |
| |
| void testBase() { |
| var byteSink = new MyByteSink(); |
| var bytes = [1]; |
| byteSink.addSlice(bytes, 0, 1, false); |
| bytes[0] = 2; |
| byteSink.addSlice(bytes, 0, 1, true); |
| Expect.equals(1, byteSink.accumulator[0][0]); |
| Expect.equals(2, byteSink.accumulator[1][0]); |
| } |
| |
| class MyChunkedSink extends ChunkedConversionSink<List<int>> { |
| var accumulator = []; |
| add(List<int> bytes) { |
| accumulator.add(bytes); |
| } |
| |
| close() {} |
| } |
| |
| void testAdapter() { |
| var chunkedSink = new MyChunkedSink(); |
| var byteSink = new ByteConversionSink.from(chunkedSink); |
| var bytes = [1]; |
| byteSink.addSlice(bytes, 0, 1, false); |
| bytes[0] = 2; |
| byteSink.addSlice(bytes, 0, 1, true); |
| Expect.equals(1, chunkedSink.accumulator[0][0]); |
| Expect.equals(2, chunkedSink.accumulator[1][0]); |
| } |
| |
| void main() { |
| testBase(); |
| testAdapter(); |
| } |