trackler 2.2.1.137 → 2.2.1.138

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/diffie-hellman/canonical-data.json +72 -0
  4. data/problem-specifications/exercises/yacht/description.md +2 -2
  5. data/tracks/csharp/exercises/sgf-parsing/Example.cs +1 -1
  6. data/tracks/csharp/exercises/sgf-parsing/SgfParsingTest.cs +1 -1
  7. data/tracks/csharp/exercises/sublist/SublistTest.cs +37 -78
  8. data/tracks/csharp/generators/Exercises/Sublist.cs +32 -0
  9. data/tracks/elisp/exercises/bob/README.md +2 -0
  10. data/tracks/elisp/exercises/bob/bob-test.el +60 -15
  11. data/tracks/elisp/exercises/bob/example.el +15 -5
  12. data/tracks/elisp/exercises/hamming/hamming-test.el +1 -1
  13. data/tracks/fsharp/build.ps1 +3 -3
  14. data/tracks/fsharp/build.sh +3 -3
  15. data/tracks/fsharp/exercises/bracket-push/BracketPushTest.fs +5 -1
  16. data/tracks/fsharp/exercises/isbn-verifier/IsbnVerifierTest.fs +5 -1
  17. data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGardenTest.fs +1 -1
  18. data/tracks/fsharp/exercises/pov/PovTest.fs +6 -1
  19. data/tracks/fsharp/exercises/react/Example.fs +2 -2
  20. data/tracks/fsharp/exercises/react/React.fsproj +1 -0
  21. data/tracks/fsharp/exercises/react/ReactTest.fs +55 -33
  22. data/tracks/fsharp/exercises/series/Example.fs +2 -12
  23. data/tracks/fsharp/exercises/series/SeriesTest.fs +33 -56
  24. data/tracks/fsharp/generators/Generators.fs +81 -46
  25. data/tracks/idris/exercises/rna-transcription/src/{example.idr → Example.idr} +0 -0
  26. data/tracks/java/config.json +14 -0
  27. data/tracks/java/exercises/acronym/src/test/java/AcronymTest.java +10 -10
  28. data/tracks/java/exercises/all-your-base/src/test/java/BaseConverterTest.java +39 -39
  29. data/tracks/java/exercises/grep/.meta/hints.md +58 -0
  30. data/tracks/java/exercises/grep/.meta/src/reference/java/GrepTool.java +65 -0
  31. data/tracks/java/exercises/grep/.meta/version +1 -0
  32. data/tracks/java/exercises/grep/README.md +145 -0
  33. data/tracks/java/exercises/grep/build.gradle +18 -0
  34. data/tracks/java/exercises/grep/src/main/java/.keep +0 -0
  35. data/tracks/java/exercises/grep/src/test/java/GrepToolTest.java +395 -0
  36. data/tracks/java/exercises/largest-series-product/src/test/java/LargestSeriesProductCalculatorTest.java +36 -36
  37. data/tracks/java/exercises/minesweeper/src/test/java/MinesweeperBoardTest.java +36 -36
  38. data/tracks/java/exercises/phone-number/src/test/java/PhoneNumberTest.java +14 -14
  39. data/tracks/java/exercises/poker/src/test/java/PokerTest.java +40 -40
  40. data/tracks/java/exercises/pythagorean-triplet/src/test/java/PythagoreanTripletTest.java +10 -10
  41. data/tracks/java/exercises/settings.gradle +1 -0
  42. data/tracks/ocaml/exercises/anagram/example.ml +1 -1
  43. data/tracks/ocaml/exercises/change/example.ml +1 -1
  44. data/tracks/ocaml/exercises/custom-set/example.ml +4 -3
  45. data/tracks/ocaml/exercises/custom-set/test.ml +0 -1
  46. data/tracks/ocaml/exercises/dominoes/test.ml +1 -1
  47. data/tracks/ocaml/exercises/etl/example.ml +1 -1
  48. data/tracks/ocaml/exercises/grade-school/example.ml +1 -1
  49. data/tracks/ocaml/exercises/palindrome-products/example.ml +2 -2
  50. data/tracks/ocaml/exercises/prime-factors/example.ml +1 -1
  51. data/tracks/ocaml/exercises/robot-name/test.ml +1 -1
  52. data/tracks/ocaml/exercises/triangle/example.ml +1 -1
  53. data/tracks/ocaml/make-exercise.sh +1 -0
  54. data/tracks/ocaml/tools/test-generator/src/controller.ml +1 -1
  55. data/tracks/perl5/exercises/raindrops/.meta/solutions/Raindrops.pm +13 -12
  56. data/tracks/perl5/exercises/raindrops/raindrops.t +166 -111
  57. data/tracks/perl6/docs/INSTALLATION.md +1 -3
  58. data/tracks/perl6/exercises/raindrops/.meta/exercise-data.yaml +5 -5
  59. data/tracks/perl6/exercises/raindrops/.meta/solutions/Raindrops.pm6 +2 -2
  60. data/tracks/perl6/exercises/raindrops/Raindrops.pm6 +2 -2
  61. data/tracks/perl6/exercises/raindrops/raindrops.t +3 -3
  62. data/tracks/python/exercises/food-chain/example.py +11 -2
  63. data/tracks/python/exercises/food-chain/food_chain_test.py +48 -45
  64. data/tracks/python/exercises/pov/pov_test.py +12 -1
  65. data/tracks/python/exercises/series/README.md +6 -6
  66. data/tracks/python/exercises/series/example.py +2 -3
  67. data/tracks/python/exercises/series/series_test.py +27 -28
  68. data/tracks/python/exercises/sgf-parsing/example.py +1 -1
  69. data/tracks/python/exercises/sgf-parsing/sgf_parsing_test.py +1 -1
  70. data/tracks/python/exercises/yacht/README.md +2 -2
  71. data/tracks/ruby/Gemfile +0 -1
  72. data/tracks/ruby/README.md +23 -0
  73. data/tracks/ruby/bin/generate +1 -0
  74. data/tracks/ruby/exercises/complex-numbers/complex_numbers_test.rb +1 -1
  75. data/tracks/ruby/lib/generator.rb +1 -2
  76. data/tracks/ruby/lib/generator/command_line.rb +3 -0
  77. data/tracks/ruby/lib/generator/command_line/generator_optparser.rb +1 -0
  78. data/tracks/ruby/lib/generator/exercise.rb +2 -0
  79. data/tracks/ruby/lib/generator/exercise_case.rb +3 -0
  80. data/tracks/ruby/lib/generator/files.rb +1 -0
  81. data/tracks/ruby/lib/generator/files/metadata_files.rb +2 -0
  82. data/tracks/ruby/lib/generator/files/track_files.rb +1 -0
  83. data/tracks/ruby/lib/generator/implementation.rb +1 -0
  84. data/tracks/ruby/lib/generator/repository.rb +3 -0
  85. data/tracks/ruby/lib/generator/template_values.rb +1 -0
  86. data/tracks/ruby/test/generator/case_values_test.rb +2 -0
  87. data/tracks/ruby/test/generator/command_line_test.rb +1 -0
  88. data/tracks/ruby/test/generator/files/metadata_files_test.rb +2 -0
  89. data/tracks/ruby/test/generator/files/track_files_test.rb +1 -0
  90. data/tracks/ruby/test/generator/implementation_test.rb +1 -0
  91. data/tracks/ruby/test/tasks/exercise_test.rb +1 -0
  92. data/tracks/ruby/test/tasks/exercise_test_tasks_test.rb +2 -0
  93. data/tracks/ruby/test/test_helper.rb +1 -3
  94. data/tracks/rust/config.json +12 -0
  95. data/tracks/rust/exercises/atbash-cipher/src/lib.rs +9 -0
  96. data/tracks/rust/exercises/hamming/src/lib.rs +6 -0
  97. data/tracks/rust/exercises/isogram/src/lib.rs +3 -0
  98. data/tracks/rust/exercises/luhn/src/lib.rs +4 -0
  99. data/tracks/rust/exercises/palindrome-products/.meta/test-in-release-mode +1 -0
  100. data/tracks/rust/exercises/palindrome-products/Cargo.toml +6 -0
  101. data/tracks/rust/exercises/palindrome-products/README.md +72 -0
  102. data/tracks/rust/exercises/palindrome-products/example.rs +25 -0
  103. data/tracks/rust/exercises/palindrome-products/src/lib.rs +22 -0
  104. data/tracks/rust/exercises/palindrome-products/tests/palindrome-products.rs +57 -0
  105. data/tracks/rust/exercises/pangram/src/lib.rs +4 -0
  106. data/tracks/rust/exercises/run-length-encoding/src/lib.rs +7 -0
  107. data/tracks/rust/exercises/say/src/lib.rs +3 -4
  108. data/tracks/rust/exercises/scrabble-score/src/lib.rs +4 -0
  109. data/tracks/rust/exercises/word-count/src/lib.rs +6 -0
  110. data/tracks/scheme/exercises/hello-world/example.scm +1 -4
  111. data/tracks/scheme/exercises/hello-world/hello-world-test.scm +1 -5
  112. data/tracks/scheme/exercises/scrabble-score/scrabble-score-test.scm +2 -2
  113. data/tracks/typescript/config.json +30 -0
  114. data/tracks/typescript/exercises/queen-attack/README.md +59 -0
  115. data/tracks/typescript/exercises/queen-attack/package.json +36 -0
  116. data/tracks/typescript/exercises/queen-attack/queen-attack.example.ts +56 -0
  117. data/tracks/typescript/exercises/queen-attack/queen-attack.test.ts +71 -0
  118. data/tracks/typescript/exercises/queen-attack/queen-attack.ts +0 -0
  119. data/tracks/typescript/exercises/queen-attack/tsconfig.json +22 -0
  120. data/tracks/typescript/exercises/queen-attack/tslint.json +127 -0
  121. data/tracks/typescript/exercises/queen-attack/yarn.lock +2624 -0
  122. data/tracks/typescript/exercises/spiral-matrix/README.md +56 -0
  123. data/tracks/typescript/exercises/spiral-matrix/package.json +36 -0
  124. data/tracks/typescript/exercises/spiral-matrix/spiral-matrix.example.ts +33 -0
  125. data/tracks/typescript/exercises/spiral-matrix/spiral-matrix.test.ts +49 -0
  126. data/tracks/typescript/exercises/spiral-matrix/spiral-matrix.ts +0 -0
  127. data/tracks/typescript/exercises/spiral-matrix/tsconfig.json +22 -0
  128. data/tracks/typescript/exercises/spiral-matrix/tslint.json +127 -0
  129. data/tracks/typescript/exercises/spiral-matrix/yarn.lock +2624 -0
  130. metadata +35 -3
@@ -0,0 +1,18 @@
1
+ apply plugin: "java"
2
+ apply plugin: "eclipse"
3
+ apply plugin: "idea"
4
+
5
+ repositories {
6
+ mavenCentral()
7
+ }
8
+
9
+ dependencies {
10
+ testCompile "junit:junit:4.12"
11
+ }
12
+
13
+ test {
14
+ testLogging {
15
+ exceptionFormat = 'full'
16
+ events = ["passed", "failed", "skipped"]
17
+ }
18
+ }
@@ -0,0 +1,395 @@
1
+ import org.junit.After;
2
+ import org.junit.Before;
3
+ import org.junit.Ignore;
4
+ import org.junit.Test;
5
+
6
+ import java.io.IOException;
7
+ import java.nio.charset.Charset;
8
+ import java.nio.file.Files;
9
+ import java.nio.file.Path;
10
+ import java.nio.file.Paths;
11
+ import java.util.Arrays;
12
+ import java.util.Collections;
13
+ import java.util.List;
14
+
15
+ import static org.junit.Assert.assertEquals;
16
+
17
+ public class GrepToolTest {
18
+ private GrepTool grepTool;
19
+
20
+ @Before
21
+ public void setUp() throws IOException {
22
+ List<String> iliadText = Arrays.asList(
23
+ "Achilles sing, O Goddess! Peleus' son;",
24
+ "His wrath pernicious, who ten thousand woes",
25
+ "Caused to Achaia's host, sent many a soul",
26
+ "Illustrious into Ades premature,",
27
+ "And Heroes gave (so stood the will of Jove)",
28
+ "To dogs and to all ravening fowls a prey,",
29
+ "When fierce dispute had separated once",
30
+ "The noble Chief Achilles from the son",
31
+ "Of Atreus, Agamemnon, King of men."
32
+ );
33
+ writeToFile("iliad.txt", iliadText);
34
+
35
+ List<String> midsummerNightText = Arrays.asList(
36
+ "I do entreat your grace to pardon me.",
37
+ "I know not by what power I am made bold,",
38
+ "Nor how it may concern my modesty,",
39
+ "In such a presence here to plead my thoughts;",
40
+ "But I beseech your grace that I may know",
41
+ "The worst that may befall me in this case,",
42
+ "If I refuse to wed Demetrius."
43
+ );
44
+ writeToFile("midsummer-night.txt", midsummerNightText);
45
+
46
+ List<String> paradiseLostText = Arrays.asList(
47
+ "Of Mans First Disobedience, and the Fruit",
48
+ "Of that Forbidden Tree, whose mortal tast",
49
+ "Brought Death into the World, and all our woe,",
50
+ "With loss of Eden, till one greater Man",
51
+ "Restore us, and regain the blissful Seat,",
52
+ "Sing Heav'nly Muse, that on the secret top",
53
+ "Of Oreb, or of Sinai, didst inspire",
54
+ "That Shepherd, who first taught the chosen Seed"
55
+ );
56
+ writeToFile("paradise-lost.txt", paradiseLostText);
57
+
58
+ grepTool = new GrepTool();
59
+ }
60
+
61
+ @After
62
+ public void tearDown() throws IOException {
63
+ deleteFile("iliad.txt");
64
+ deleteFile("midsummer-night.txt");
65
+ deleteFile("paradise-lost.txt");
66
+ }
67
+
68
+ @Test
69
+ public void oneFileOneMatchNoFlags() {
70
+ String expected = "Of Atreus, Agamemnon, King of men.";
71
+
72
+ String actual = grepTool.grep(
73
+ "Agamemnon",
74
+ Collections.emptyList(),
75
+ Collections.singletonList("iliad.txt")
76
+ );
77
+
78
+ assertEquals(expected, actual);
79
+ }
80
+
81
+ @Ignore("Remove to run test")
82
+ @Test
83
+ public void oneFileOneMatchPrintLineNumbersFlag() {
84
+ String expected = "2:Of that Forbidden Tree, whose mortal tast";
85
+
86
+ String actual = grepTool.grep(
87
+ "Forbidden",
88
+ Collections.singletonList("-n"),
89
+ Collections.singletonList("paradise-lost.txt")
90
+ );
91
+
92
+ assertEquals(expected, actual);
93
+ }
94
+
95
+ @Ignore("Remove to run test")
96
+ @Test
97
+ public void oneFileOneMatchCaseInsensitiveFlag() {
98
+ String expected = "Of that Forbidden Tree, whose mortal tast";
99
+
100
+ String actual = grepTool.grep(
101
+ "FORBIDDEN",
102
+ Collections.singletonList("-i"),
103
+ Collections.singletonList("paradise-lost.txt")
104
+ );
105
+
106
+ assertEquals(expected, actual);
107
+ }
108
+
109
+ @Ignore("Remove to run test")
110
+ @Test
111
+ public void oneFileOneMatchPrintFileNamesFlag() {
112
+ String expected = "paradise-lost.txt";
113
+
114
+ String actual = grepTool.grep(
115
+ "Forbidden",
116
+ Collections.singletonList("-l"),
117
+ Collections.singletonList("paradise-lost.txt")
118
+ );
119
+
120
+ assertEquals(expected, actual);
121
+ }
122
+
123
+ @Ignore("Remove to run test")
124
+ @Test
125
+ public void oneFileOneMatchEntireLinesFlag() {
126
+ String expected = "With loss of Eden, till one greater Man";
127
+
128
+ String actual = grepTool.grep(
129
+ "With loss of Eden, till one greater Man",
130
+ Collections.singletonList("-x"),
131
+ Collections.singletonList("paradise-lost.txt")
132
+ );
133
+
134
+ assertEquals(expected, actual);
135
+ }
136
+
137
+ @Ignore("Remove to run test")
138
+ @Test
139
+ public void oneFileOneMatchMultipleFlags() {
140
+ String expected = "9:Of Atreus, Agamemnon, King of men.";
141
+
142
+ String actual = grepTool.grep(
143
+ "OF ATREUS, Agamemnon, KIng of MEN.",
144
+ Arrays.asList("-n", "-i", "-x"),
145
+ Collections.singletonList("iliad.txt")
146
+ );
147
+
148
+ assertEquals(expected, actual);
149
+ }
150
+
151
+ @Ignore("Remove to run test")
152
+ @Test
153
+ public void oneFileSeveralMatchesNoFlags() {
154
+ String expected = "Nor how it may concern my modesty,\n"
155
+ + "But I beseech your grace that I may know\n"
156
+ + "The worst that may befall me in this case,";
157
+
158
+ String actual = grepTool.grep(
159
+ "may",
160
+ Collections.emptyList(),
161
+ Collections.singletonList("midsummer-night.txt")
162
+ );
163
+
164
+ assertEquals(expected, actual);
165
+ }
166
+
167
+ @Ignore("Remove to run test")
168
+ @Test
169
+ public void oneFileSeveralMatchesPrintLineNumbersFlag() {
170
+ String expected = "3:Nor how it may concern my modesty,\n"
171
+ + "5:But I beseech your grace that I may know\n"
172
+ + "6:The worst that may befall me in this case,";
173
+
174
+ String actual = grepTool.grep(
175
+ "may",
176
+ Collections.singletonList("-n"),
177
+ Collections.singletonList("midsummer-night.txt")
178
+ );
179
+
180
+ assertEquals(expected, actual);
181
+ }
182
+
183
+ @Ignore("Remove to run test")
184
+ @Test
185
+ public void oneFileSeveralMatchesMatchEntireLineFlag() {
186
+ String expected = "";
187
+
188
+ String actual = grepTool.grep(
189
+ "may",
190
+ Collections.singletonList("-x"),
191
+ Collections.singletonList("midsummer-night.txt")
192
+ );
193
+
194
+ assertEquals(expected, actual);
195
+ }
196
+
197
+ @Ignore("Remove to run test")
198
+ @Test
199
+ public void oneFileSeveralMatchesCaseInsensitiveFlag() {
200
+ String expected = "Achilles sing, O Goddess! Peleus' son;\n"
201
+ + "The noble Chief Achilles from the son";
202
+
203
+ String actual = grepTool.grep(
204
+ "ACHILLES",
205
+ Collections.singletonList("-i"),
206
+ Collections.singletonList("iliad.txt")
207
+ );
208
+
209
+ assertEquals(expected, actual);
210
+ }
211
+
212
+ @Ignore("Remove to run test")
213
+ @Test
214
+ public void oneFileSeveralMatchesInvertedFlag() {
215
+ String expected = "Brought Death into the World, and all our woe,\n"
216
+ + "With loss of Eden, till one greater Man\n"
217
+ + "Restore us, and regain the blissful Seat,\n"
218
+ + "Sing Heav'nly Muse, that on the secret top\n"
219
+ + "That Shepherd, who first taught the chosen Seed";
220
+
221
+ String actual = grepTool.grep(
222
+ "Of",
223
+ Collections.singletonList("-v"),
224
+ Collections.singletonList("paradise-lost.txt")
225
+ );
226
+
227
+ assertEquals(expected, actual);
228
+ }
229
+
230
+ @Ignore("Remove to run test")
231
+ @Test
232
+ public void oneFileNoMatchesVariousFlags() {
233
+ String expected = "";
234
+
235
+ String actual = grepTool.grep(
236
+ "Gandalf",
237
+ Arrays.asList("-n", "-l", "-x", "-i"),
238
+ Collections.singletonList("iliad.txt")
239
+ );
240
+
241
+ assertEquals(expected, actual);
242
+ }
243
+
244
+ @Ignore("Remove to run test")
245
+ @Test
246
+ public void multipleFilesOneMatchNoFlags() {
247
+ String expected = "iliad.txt:Of Atreus, Agamemnon, King of men.";
248
+
249
+ String actual = grepTool.grep(
250
+ "Agamemnon",
251
+ Collections.emptyList(),
252
+ Arrays.asList("iliad.txt", "midsummer-night.txt", "paradise-lost.txt")
253
+ );
254
+
255
+ assertEquals(expected, actual);
256
+ }
257
+
258
+ @Ignore("Remove to run test")
259
+ @Test
260
+ public void multipleFilesSeveralMatchesNoFlags() {
261
+ String expected = "midsummer-night.txt:Nor how it may concern my modesty,\n"
262
+ + "midsummer-night.txt:But I beseech your grace that I may know\n"
263
+ + "midsummer-night.txt:The worst that may befall me in this case,";
264
+
265
+ String actual = grepTool.grep(
266
+ "may",
267
+ Collections.emptyList(),
268
+ Arrays.asList("iliad.txt", "midsummer-night.txt", "paradise-lost.txt")
269
+ );
270
+
271
+ assertEquals(expected, actual);
272
+ }
273
+
274
+ @Ignore("Remove to run test")
275
+ @Test
276
+ public void multipleFilesSeveralMatchesPrintLineNumbersFlag() {
277
+ String expected = "midsummer-night.txt:5:But I beseech your grace that I may know\n"
278
+ + "midsummer-night.txt:6:The worst that may befall me in this case,\n"
279
+ + "paradise-lost.txt:2:Of that Forbidden Tree, whose mortal tast\n"
280
+ + "paradise-lost.txt:6:Sing Heav'nly Muse, that on the secret top";
281
+
282
+ String actual = grepTool.grep(
283
+ "that",
284
+ Collections.singletonList("-n"),
285
+ Arrays.asList("iliad.txt", "midsummer-night.txt", "paradise-lost.txt")
286
+ );
287
+
288
+ assertEquals(expected, actual);
289
+ }
290
+
291
+ @Ignore("Remove to run test")
292
+ @Test
293
+ public void multipleFilesOneMatchPrintFileNamesFlag() {
294
+ String expected = "iliad.txt\n"
295
+ + "paradise-lost.txt";
296
+
297
+ String actual = grepTool.grep(
298
+ "who",
299
+ Collections.singletonList("-l"),
300
+ Arrays.asList("iliad.txt", "midsummer-night.txt", "paradise-lost.txt")
301
+ );
302
+
303
+ assertEquals(expected, actual);
304
+ }
305
+
306
+ @Ignore("Remove to run test")
307
+ @Test
308
+ public void multipleFilesSeveralMatchesCaseInsensitiveFlag() {
309
+ String expected = "iliad.txt:Caused to Achaia's host, sent many a soul\n"
310
+ + "iliad.txt:Illustrious into Ades premature,\n"
311
+ + "iliad.txt:And Heroes gave (so stood the will of Jove)\n"
312
+ + "iliad.txt:To dogs and to all ravening fowls a prey,\n"
313
+ + "midsummer-night.txt:I do entreat your grace to pardon me.\n"
314
+ + "midsummer-night.txt:In such a presence here to plead my thoughts;\n"
315
+ + "midsummer-night.txt:If I refuse to wed Demetrius.\n"
316
+ + "paradise-lost.txt:Brought Death into the World, and all our woe,\n"
317
+ + "paradise-lost.txt:Restore us, and regain the blissful Seat,\n"
318
+ + "paradise-lost.txt:Sing Heav'nly Muse, that on the secret top";
319
+
320
+ String actual = grepTool.grep(
321
+ "TO",
322
+ Collections.singletonList("-i"),
323
+ Arrays.asList("iliad.txt", "midsummer-night.txt", "paradise-lost.txt")
324
+ );
325
+
326
+ assertEquals(expected, actual);
327
+ }
328
+
329
+ @Ignore("Remove to run test")
330
+ @Test
331
+ public void multipleFilesSeveralMatchesInvertedFlag() {
332
+ String expected = "iliad.txt:Achilles sing, O Goddess! Peleus' son;\n"
333
+ + "iliad.txt:The noble Chief Achilles from the son\n"
334
+ + "midsummer-night.txt:If I refuse to wed Demetrius.";
335
+
336
+ String actual = grepTool.grep(
337
+ "a",
338
+ Collections.singletonList("-v"),
339
+ Arrays.asList("iliad.txt", "midsummer-night.txt", "paradise-lost.txt")
340
+ );
341
+
342
+ assertEquals(expected, actual);
343
+ }
344
+
345
+ @Ignore("Remove to run test")
346
+ @Test
347
+ public void multipleFilesOneMatchEntireLinesFlag() {
348
+ String expected = "midsummer-night.txt:But I beseech your grace that I may know";
349
+
350
+ String actual = grepTool.grep(
351
+ "But I beseech your grace that I may know",
352
+ Collections.singletonList("-x"),
353
+ Arrays.asList("iliad.txt", "midsummer-night.txt", "paradise-lost.txt")
354
+ );
355
+
356
+ assertEquals(expected, actual);
357
+ }
358
+
359
+ @Ignore("Remove to run test")
360
+ @Test
361
+ public void multipleFilesOneMatchMultipleFlags() {
362
+ String expected = "paradise-lost.txt:4:With loss of Eden, till one greater Man";
363
+
364
+ String actual = grepTool.grep(
365
+ "WITH LOSS OF EDEN, TILL ONE GREATER MAN",
366
+ Arrays.asList("-n", "-i", "-x"),
367
+ Arrays.asList("iliad.txt", "midsummer-night.txt", "paradise-lost.txt")
368
+ );
369
+
370
+ assertEquals(expected, actual);
371
+ }
372
+
373
+ @Ignore("Remove to run test")
374
+ @Test
375
+ public void multipleFilesNoMatchesVariousFlags() {
376
+ String expected = "";
377
+
378
+ String actual = grepTool.grep(
379
+ "Frodo",
380
+ Arrays.asList("-n", "-l", "-i", "-x"),
381
+ Arrays.asList("iliad.txt", "midsummer-night.txt", "paradise-lost.txt")
382
+ );
383
+
384
+ assertEquals(expected, actual);
385
+ }
386
+
387
+ private void writeToFile(String filename, List<String> contents) throws IOException {
388
+ Path file = Paths.get(filename);
389
+ Files.write(file, contents, Charset.forName("UTF-8"));
390
+ }
391
+
392
+ private void deleteFile(String filename) throws IOException {
393
+ Files.deleteIfExists(Paths.get(filename));
394
+ }
395
+ }
@@ -12,10 +12,10 @@ public class LargestSeriesProductCalculatorTest {
12
12
 
13
13
  @Test
14
14
  public void testCorrectlyCalculatesLargestProductWhenSeriesLengthEqualsStringToSearchLength() {
15
- final LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("29");
16
- final long expectedProduct = 18;
15
+ LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("29");
16
+ long expectedProduct = 18;
17
17
 
18
- final long actualProduct = calculator.calculateLargestProductForSeriesLength(2);
18
+ long actualProduct = calculator.calculateLargestProductForSeriesLength(2);
19
19
 
20
20
  assertEquals(expectedProduct, actualProduct);
21
21
  }
@@ -23,10 +23,10 @@ public class LargestSeriesProductCalculatorTest {
23
23
  @Ignore("Remove to run test")
24
24
  @Test
25
25
  public void testCorrectlyCalculatesLargestProductOfLengthTwoWithNumbersInOrder() {
26
- final LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("0123456789");
27
- final long expectedProduct = 72;
26
+ LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("0123456789");
27
+ long expectedProduct = 72;
28
28
 
29
- final long actualProduct = calculator.calculateLargestProductForSeriesLength(2);
29
+ long actualProduct = calculator.calculateLargestProductForSeriesLength(2);
30
30
 
31
31
  assertEquals(expectedProduct, actualProduct);
32
32
  }
@@ -34,10 +34,10 @@ public class LargestSeriesProductCalculatorTest {
34
34
  @Ignore("Remove to run test")
35
35
  @Test
36
36
  public void testCorrectlyCalculatesLargestProductOfLengthTwoWithNumbersNotInOrder() {
37
- final LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("576802143");
38
- final long expectedProduct = 48;
37
+ LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("576802143");
38
+ long expectedProduct = 48;
39
39
 
40
- final long actualProduct = calculator.calculateLargestProductForSeriesLength(2);
40
+ long actualProduct = calculator.calculateLargestProductForSeriesLength(2);
41
41
 
42
42
  assertEquals(expectedProduct, actualProduct);
43
43
  }
@@ -45,10 +45,10 @@ public class LargestSeriesProductCalculatorTest {
45
45
  @Ignore("Remove to run test")
46
46
  @Test
47
47
  public void testCorrectlyCalculatesLargestProductOfLengthThreeWithNumbersInOrder() {
48
- final LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("0123456789");
49
- final long expectedProduct = 504;
48
+ LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("0123456789");
49
+ long expectedProduct = 504;
50
50
 
51
- final long actualProduct = calculator.calculateLargestProductForSeriesLength(3);
51
+ long actualProduct = calculator.calculateLargestProductForSeriesLength(3);
52
52
 
53
53
  assertEquals(expectedProduct, actualProduct);
54
54
  }
@@ -56,10 +56,10 @@ public class LargestSeriesProductCalculatorTest {
56
56
  @Ignore("Remove to run test")
57
57
  @Test
58
58
  public void testCorrectlyCalculatesLargestProductOfLengthThreeWithNumbersNotInOrder() {
59
- final LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("1027839564");
60
- final long expectedProduct = 270;
59
+ LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("1027839564");
60
+ long expectedProduct = 270;
61
61
 
62
- final long actualProduct = calculator.calculateLargestProductForSeriesLength(3);
62
+ long actualProduct = calculator.calculateLargestProductForSeriesLength(3);
63
63
 
64
64
  assertEquals(expectedProduct, actualProduct);
65
65
  }
@@ -67,10 +67,10 @@ public class LargestSeriesProductCalculatorTest {
67
67
  @Ignore("Remove to run test")
68
68
  @Test
69
69
  public void testCorrectlyCalculatesLargestProductOfLengthFiveWithNumbersInOrder() {
70
- final LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("0123456789");
71
- final long expectedProduct = 15120;
70
+ LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("0123456789");
71
+ long expectedProduct = 15120;
72
72
 
73
- final long actualProduct = calculator.calculateLargestProductForSeriesLength(5);
73
+ long actualProduct = calculator.calculateLargestProductForSeriesLength(5);
74
74
 
75
75
  assertEquals(expectedProduct, actualProduct);
76
76
  }
@@ -78,12 +78,12 @@ public class LargestSeriesProductCalculatorTest {
78
78
  @Ignore("Remove to run test")
79
79
  @Test
80
80
  public void testCorrectlyCalculatesLargestProductInLongStringToSearchV1() {
81
- final LargestSeriesProductCalculator calculator
81
+ LargestSeriesProductCalculator calculator
82
82
  = new LargestSeriesProductCalculator("73167176531330624919225119674426574742355349194934");
83
83
 
84
- final long expectedProduct = 23520;
84
+ long expectedProduct = 23520;
85
85
 
86
- final long actualProduct = calculator.calculateLargestProductForSeriesLength(6);
86
+ long actualProduct = calculator.calculateLargestProductForSeriesLength(6);
87
87
 
88
88
  assertEquals(expectedProduct, actualProduct);
89
89
  }
@@ -91,10 +91,10 @@ public class LargestSeriesProductCalculatorTest {
91
91
  @Ignore("Remove to run test")
92
92
  @Test
93
93
  public void testCorrectlyCalculatesLargestProductOfZeroIfAllDigitsAreZeroes() {
94
- final LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("0000");
95
- final long expectedProduct = 0;
94
+ LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("0000");
95
+ long expectedProduct = 0;
96
96
 
97
- final long actualProduct = calculator.calculateLargestProductForSeriesLength(2);
97
+ long actualProduct = calculator.calculateLargestProductForSeriesLength(2);
98
98
 
99
99
  assertEquals(expectedProduct, actualProduct);
100
100
  }
@@ -102,10 +102,10 @@ public class LargestSeriesProductCalculatorTest {
102
102
  @Ignore("Remove to run test")
103
103
  @Test
104
104
  public void testCorrectlyCalculatesLargestProductOfZeroIfAllSeriesOfGivenLengthContainZero() {
105
- final LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("99099");
106
- final long expectedProduct = 0;
105
+ LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("99099");
106
+ long expectedProduct = 0;
107
107
 
108
- final long actualProduct = calculator.calculateLargestProductForSeriesLength(3);
108
+ long actualProduct = calculator.calculateLargestProductForSeriesLength(3);
109
109
 
110
110
  assertEquals(expectedProduct, actualProduct);
111
111
  }
@@ -113,7 +113,7 @@ public class LargestSeriesProductCalculatorTest {
113
113
  @Ignore("Remove to run test")
114
114
  @Test
115
115
  public void testSeriesLengthLongerThanLengthOfStringToTestIsRejected() {
116
- final LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("123");
116
+ LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("123");
117
117
 
118
118
  expectedException.expect(IllegalArgumentException.class);
119
119
  expectedException.expectMessage(
@@ -125,10 +125,10 @@ public class LargestSeriesProductCalculatorTest {
125
125
  @Ignore("Remove to run test")
126
126
  @Test
127
127
  public void testCorrectlyCalculatesLargestProductOfLength0ForEmptyStringToSearch() {
128
- final LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("");
129
- final long expectedProduct = 1;
128
+ LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("");
129
+ long expectedProduct = 1;
130
130
 
131
- final long actualProduct = calculator.calculateLargestProductForSeriesLength(0);
131
+ long actualProduct = calculator.calculateLargestProductForSeriesLength(0);
132
132
 
133
133
  assertEquals(expectedProduct, actualProduct);
134
134
  }
@@ -136,10 +136,10 @@ public class LargestSeriesProductCalculatorTest {
136
136
  @Ignore("Remove to run test")
137
137
  @Test
138
138
  public void testCorrectlyCalculatesLargestProductOfLength0ForNonEmptyStringToSearch() {
139
- final LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("123");
140
- final long expectedProduct = 1;
139
+ LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("123");
140
+ long expectedProduct = 1;
141
141
 
142
- final long actualProduct = calculator.calculateLargestProductForSeriesLength(0);
142
+ long actualProduct = calculator.calculateLargestProductForSeriesLength(0);
143
143
 
144
144
  assertEquals(expectedProduct, actualProduct);
145
145
  }
@@ -147,7 +147,7 @@ public class LargestSeriesProductCalculatorTest {
147
147
  @Ignore("Remove to run test")
148
148
  @Test
149
149
  public void testEmptyStringToSearchAndSeriesOfNonZeroLengthIsRejected() {
150
- final LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("");
150
+ LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("");
151
151
 
152
152
  expectedException.expect(IllegalArgumentException.class);
153
153
  expectedException.expectMessage(
@@ -168,7 +168,7 @@ public class LargestSeriesProductCalculatorTest {
168
168
  @Ignore("Remove to run test")
169
169
  @Test
170
170
  public void testNegativeSeriesLengthIsRejected() {
171
- final LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("12345");
171
+ LargestSeriesProductCalculator calculator = new LargestSeriesProductCalculator("12345");
172
172
 
173
173
  expectedException.expect(IllegalArgumentException.class);
174
174
  expectedException.expectMessage("Series length must be non-negative.");