Index: recipes/test/core/strings/incrementally_building_test.dart |
diff --git a/recipes/test/core/strings/incrementally_building_test.dart b/recipes/test/core/strings/incrementally_building_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6a2ace49412b17d2d8f0d4e9821a5e87b9caa40b |
--- /dev/null |
+++ b/recipes/test/core/strings/incrementally_building_test.dart |
@@ -0,0 +1,71 @@ |
+library incrementally_building; |
+ |
+import 'package:unittest/unittest.dart'; |
+ |
+var data = [{'scheme': 'https', 'domain': 'news.ycombinator.com'}, |
+ {'domain': 'www.google.com'}, |
+ {'domain': 'reddit.com', 'path': 'search', 'params': 'q=dart'} |
+ ]; |
+ |
+String assembleUrlsUsingStringBuffer(data) { |
+ StringBuffer sb = new StringBuffer(); |
+ for (final item in data) { |
+ sb.write(item['scheme'] != null ? item['scheme'] : 'http'); |
+ sb.write("://"); |
+ sb.write(item['domain']); |
+ sb.write('/'); |
+ sb.write(item['path'] != null ? item['path'] : ''); |
+ if (item['params'] != null) { |
+ sb.write('?'); |
+ sb.write(item['params']); |
+ } |
+ sb.write('\n'); |
+ } |
+ return sb.toString(); |
+} |
+ |
+String assembleUrlsUsingConcat(data) { |
+ var urls = ''; |
+ for (final item in data) { |
+ urls = urls.concat(item['scheme'] != null ? item['scheme'] : 'http'); |
+ urls = urls.concat("://"); |
+ urls = urls.concat(item['domain']); |
+ urls = urls.concat('/'); |
+ urls = urls.concat(item['path'] != null ? item['path'] : ''); |
+ if (item['params'] != null) { |
+ urls = urls.concat('?'); |
+ urls = urls.concat(item['params']); |
+ } |
+ urls = urls.concat('\n'); |
+ } |
+ return urls; |
+} |
+ |
+void main() { |
+ group('incrementally building a string', () { |
+ group('using a StringBuffer', () { |
+ test('using write()', () { |
+ expect(assembleUrlsUsingStringBuffer(data), equals('''https://news.ycombinator.com/ |
+http://www.google.com/ |
+http://reddit.com/search?q=dart |
+''')); |
+ }); |
+ test('using several methods', () { |
+ var sb = new StringBuffer(); |
+ sb.writeln('The Beatles:'); |
+ sb.writeAll(['John, ', 'Paul, ', 'George, and Ringo']); |
+ sb.writeCharCode(33); // charCode for '!'. |
+ expect(sb.toString(), equals('The Beatles:\nJohn, Paul, George, and Ringo!')); |
+ }); |
+ }); |
+ |
+ group('using concat()', () { |
+ test('', () { |
+ expect(assembleUrlsUsingConcat(data), equals('''https://news.ycombinator.com/ |
+http://www.google.com/ |
+http://reddit.com/search?q=dart |
+''')); |
+ }); |
+ }); |
+ }); |
+} |