Index: dart/tests/try/poi/source_update.dart |
diff --git a/dart/tests/try/poi/source_update.dart b/dart/tests/try/poi/source_update.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6bd2395276262a3dc661c49242eaf8b98c7e45ab |
--- /dev/null |
+++ b/dart/tests/try/poi/source_update.dart |
@@ -0,0 +1,41 @@ |
+// Copyright (c) 2014, 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. |
+ |
+library trydart.source_update; |
+ |
+/// Returns [updates] expanded to full compilation units/source files. |
+/// |
+/// [updates] is a convenient way to write updates/patches to a single source |
+/// file without repeating common parts. |
+/// |
+/// For example: |
+/// ["head ", ["v1", "v2"], " tail"] |
+/// expands to: |
+/// ["head v1 tail", "head v2 tail"] |
+List<String> expandUpdates(List updates) { |
+ int outputCount = updates.firstWhere((e) => e is Iterable).length; |
+ List<StringBuffer> result = new List<StringBuffer>(outputCount); |
+ for (int i = 0; i < outputCount; i++) { |
+ result[i] = new StringBuffer(); |
+ } |
+ for (var chunk in updates) { |
+ if (chunk is Iterable) { |
+ int segmentCount = 0; |
+ for (var segment in chunk) { |
+ result[segmentCount++].write(segment); |
+ } |
+ if (segmentCount != outputCount) { |
+ throw new ArgumentError( |
+ "Expected ${outputCount} segments, " |
+ "but found ${segmentCount} in $chunk"); |
+ } |
+ } else { |
+ for (StringBuffer buffer in result) { |
+ buffer.write(chunk); |
+ } |
+ } |
+ } |
+ |
+ return result.map((e) => '$e').toList(); |
+} |