trackler 2.1.0.34 → 2.1.0.36

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/coq/config.json +3 -5
  4. data/tracks/csharp/.gitignore +5 -1
  5. data/tracks/csharp/exercises/acronym/AcronymTest.cs +3 -7
  6. data/tracks/csharp/exercises/atbash-cipher/AtbashCipherTest.cs +2 -0
  7. data/tracks/csharp/exercises/beer-song/BeerSongTest.cs +9 -7
  8. data/tracks/csharp/exercises/bob/Bob.cs +1 -1
  9. data/tracks/csharp/exercises/bob/BobTest.cs +79 -37
  10. data/tracks/csharp/exercises/bob/Example.cs +1 -1
  11. data/tracks/csharp/exercises/food-chain/FoodChainTest.cs +2 -0
  12. data/tracks/csharp/exercises/hello-world/HelloWorldTest.cs +5 -3
  13. data/tracks/csharp/exercises/isogram/IsogramTest.cs +8 -0
  14. data/tracks/csharp/exercises/leap/LeapTest.cs +2 -0
  15. data/tracks/csharp/exercises/luhn/LuhnTest.cs +2 -0
  16. data/tracks/csharp/exercises/nth-prime/NthPrimeTest.cs +2 -0
  17. data/tracks/csharp/exercises/perfect-numbers/PerfectNumbersTest.cs +2 -0
  18. data/tracks/csharp/exercises/pig-latin/PigLatinTest.cs +2 -0
  19. data/tracks/csharp/exercises/raindrops/RaindropsTest.cs +2 -0
  20. data/tracks/csharp/exercises/roman-numerals/RomanNumeralsTest.cs +2 -0
  21. data/tracks/csharp/exercises/rotational-cipher/RotationalCipherTest.cs +2 -0
  22. data/tracks/csharp/exercises/wordy/WordyTest.cs +2 -0
  23. data/tracks/csharp/generators/Classes/TestClass.cs +1 -0
  24. data/tracks/csharp/generators/Classes/TestClassRenderer.cs +4 -1
  25. data/tracks/csharp/generators/Exercises/Bob.cs +20 -0
  26. data/tracks/csharp/generators/Exercises/Exercise.cs +2 -1
  27. data/tracks/csharp/generators/Methods/TestMethodGenerator.cs +4 -0
  28. data/tracks/delphi/exercises/hello-world/uTestHelloWorld.pas +12 -1
  29. data/tracks/elixir/config.json +58 -7
  30. data/tracks/go/config.json +5 -6
  31. data/tracks/go/exercises/anagram/anagram_test.go +2 -2
  32. data/tracks/go/exercises/anagram/example.go +2 -3
  33. data/tracks/java/.travis.yml +9 -9
  34. data/tracks/java/bin/fetch-configlet +1 -1
  35. data/tracks/java/bin/journey-test.sh +23 -17
  36. data/tracks/java/bin/unit-tests.sh +2 -2
  37. data/tracks/julia/exercises/rotational-cipher/runtests.jl +13 -13
  38. data/tracks/julia/runtests.jl +13 -0
  39. data/tracks/lisp/config.json +174 -120
  40. data/tracks/lua/README.md +9 -8
  41. data/tracks/ocaml/config.json +0 -5
  42. data/tracks/php/config.json +424 -402
  43. data/tracks/ruby/README.md +6 -0
  44. data/tracks/scala/config.json +0 -7
  45. data/tracks/typescript/config.json +27 -13
  46. metadata +3 -2
@@ -103,6 +103,7 @@
103
103
  "slug": "acronym",
104
104
  "difficulty": 2,
105
105
  "topics": [
106
+
106
107
  ]
107
108
  },
108
109
  {
@@ -116,30 +117,35 @@
116
117
  "slug": "raindrops",
117
118
  "difficulty": 2,
118
119
  "topics": [
120
+
119
121
  ]
120
122
  },
121
123
  {
122
124
  "slug": "run-length-encoding",
123
125
  "difficulty": 2,
124
126
  "topics": [
127
+
125
128
  ]
126
129
  },
127
130
  {
128
131
  "slug": "sublist",
129
132
  "difficulty": 2,
130
133
  "topics": [
134
+
131
135
  ]
132
136
  },
133
137
  {
134
138
  "slug": "scrabble-score",
135
139
  "difficulty": 2,
136
140
  "topics": [
141
+
137
142
  ]
138
143
  },
139
144
  {
140
145
  "slug": "sum-of-multiples",
141
146
  "difficulty": 2,
142
147
  "topics": [
148
+
143
149
  ]
144
150
  },
145
151
  {
@@ -161,6 +167,7 @@
161
167
  "slug": "anagram",
162
168
  "difficulty": 2,
163
169
  "topics": [
170
+
164
171
  ]
165
172
  },
166
173
  {
@@ -175,66 +182,77 @@
175
182
  "slug": "bracket-push",
176
183
  "difficulty": 3,
177
184
  "topics": [
185
+
178
186
  ]
179
187
  },
180
188
  {
181
189
  "slug": "rna-transcription",
182
190
  "difficulty": 2,
183
191
  "topics": [
192
+
184
193
  ]
185
194
  },
186
195
  {
187
196
  "slug": "phone-number",
188
197
  "difficulty": 3,
189
198
  "topics": [
199
+
190
200
  ]
191
201
  },
192
202
  {
193
203
  "slug": "nth-prime",
194
204
  "difficulty": 2,
195
205
  "topics": [
206
+
196
207
  ]
197
208
  },
198
209
  {
199
210
  "slug": "roman-numerals",
200
211
  "difficulty": 2,
201
212
  "topics": [
213
+
202
214
  ]
203
215
  },
204
216
  {
205
217
  "slug": "all-your-base",
206
218
  "difficulty": 2,
207
219
  "topics": [
220
+
208
221
  ]
209
222
  },
210
223
  {
211
224
  "slug": "hamming",
212
225
  "difficulty": 2,
213
226
  "topics": [
227
+
214
228
  ]
215
229
  },
216
230
  {
217
231
  "slug": "triangle",
218
232
  "difficulty": 2,
219
233
  "topics": [
234
+
220
235
  ]
221
236
  },
222
237
  {
223
238
  "slug": "beer-song",
224
239
  "difficulty": 3,
225
240
  "topics": [
241
+
226
242
  ]
227
243
  },
228
244
  {
229
245
  "slug": "isogram",
230
246
  "difficulty": 3,
231
247
  "topics": [
248
+
232
249
  ]
233
250
  },
234
251
  {
235
252
  "slug": "grade-school",
236
253
  "difficulty": 3,
237
254
  "topics": [
255
+
238
256
  ]
239
257
  },
240
258
  {
@@ -250,60 +268,70 @@
250
268
  "slug": "list-ops",
251
269
  "difficulty": 4,
252
270
  "topics": [
271
+
253
272
  ]
254
273
  },
255
274
  {
256
275
  "slug": "flatten-array",
257
276
  "difficulty": 3,
258
277
  "topics": [
278
+
259
279
  ]
260
280
  },
261
281
  {
262
282
  "slug": "leap",
263
283
  "difficulty": 3,
264
284
  "topics": [
285
+
265
286
  ]
266
287
  },
267
288
  {
268
289
  "slug": "kindergarten-garden",
269
290
  "difficulty": 3,
270
291
  "topics": [
292
+
271
293
  ]
272
294
  },
273
295
  {
274
296
  "slug": "etl",
275
297
  "difficulty": 2,
276
298
  "topics": [
299
+
277
300
  ]
278
301
  },
279
302
  {
280
303
  "slug": "meetup",
281
304
  "difficulty": 4,
282
305
  "topics": [
306
+
283
307
  ]
284
308
  },
285
309
  {
286
310
  "slug": "grains",
287
311
  "difficulty": 3,
288
312
  "topics": [
313
+
289
314
  ]
290
315
  },
291
316
  {
292
317
  "slug": "change",
293
318
  "difficulty": 3,
294
319
  "topics": [
320
+
295
321
  ]
296
322
  },
297
323
  {
298
324
  "slug": "parallel-letter-frequency",
299
325
  "difficulty": 4,
300
326
  "topics": [
327
+
301
328
  ]
302
329
  },
303
330
  {
304
331
  "slug": "binary",
305
332
  "difficulty": 3,
306
333
  "topics": [
334
+
307
335
  ]
308
336
  },
309
337
  {
@@ -318,66 +346,77 @@
318
346
  "slug": "luhn",
319
347
  "difficulty": 5,
320
348
  "topics": [
349
+
321
350
  ]
322
351
  },
323
352
  {
324
353
  "slug": "markdown",
325
354
  "difficulty": 5,
326
355
  "topics": [
356
+
327
357
  ]
328
358
  },
329
359
  {
330
360
  "slug": "gigasecond",
331
361
  "difficulty": 3,
332
362
  "topics": [
363
+
333
364
  ]
334
365
  },
335
366
  {
336
367
  "slug": "queen-attack",
337
368
  "difficulty": 7,
338
369
  "topics": [
370
+
339
371
  ]
340
372
  },
341
373
  {
342
374
  "slug": "pascals-triangle",
343
375
  "difficulty": 3,
344
376
  "topics": [
377
+
345
378
  ]
346
379
  },
347
380
  {
348
381
  "slug": "saddle-points",
349
382
  "difficulty": 5,
350
383
  "topics": [
384
+
351
385
  ]
352
386
  },
353
387
  {
354
388
  "slug": "hexadecimal",
355
389
  "difficulty": 3,
356
390
  "topics": [
391
+
357
392
  ]
358
393
  },
359
394
  {
360
395
  "slug": "diamond",
361
396
  "difficulty": 5,
362
397
  "topics": [
398
+
363
399
  ]
364
400
  },
365
401
  {
366
402
  "slug": "binary-search",
367
403
  "difficulty": 3,
368
404
  "topics": [
405
+
369
406
  ]
370
407
  },
371
408
  {
372
409
  "slug": "prime-factors",
373
410
  "difficulty": 3,
374
411
  "topics": [
412
+
375
413
  ]
376
414
  },
377
415
  {
378
416
  "slug": "perfect-numbers",
379
417
  "difficulty": 3,
380
418
  "topics": [
419
+
381
420
  ]
382
421
  },
383
422
  {
@@ -391,24 +430,28 @@
391
430
  "slug": "sieve",
392
431
  "difficulty": 5,
393
432
  "topics": [
433
+
394
434
  ]
395
435
  },
396
436
  {
397
437
  "slug": "wordy",
398
438
  "difficulty": 6,
399
439
  "topics": [
440
+
400
441
  ]
401
442
  },
402
443
  {
403
444
  "slug": "robot-simulator",
404
445
  "difficulty": 6,
405
446
  "topics": [
447
+
406
448
  ]
407
449
  },
408
450
  {
409
451
  "slug": "atbash-cipher",
410
452
  "difficulty": 3,
411
453
  "topics": [
454
+
412
455
  ]
413
456
  },
414
457
  {
@@ -423,66 +466,77 @@
423
466
  "slug": "bank-account",
424
467
  "difficulty": 7,
425
468
  "topics": [
469
+
426
470
  ]
427
471
  },
428
472
  {
429
473
  "slug": "largest-series-product",
430
474
  "difficulty": 4,
431
475
  "topics": [
476
+
432
477
  ]
433
478
  },
434
479
  {
435
480
  "slug": "crypto-square",
436
481
  "difficulty": 4,
437
482
  "topics": [
483
+
438
484
  ]
439
485
  },
440
486
  {
441
487
  "slug": "pythagorean-triplet",
442
488
  "difficulty": 5,
443
489
  "topics": [
490
+
444
491
  ]
445
492
  },
446
493
  {
447
494
  "slug": "allergies",
448
495
  "difficulty": 4,
449
496
  "topics": [
497
+
450
498
  ]
451
499
  },
452
500
  {
453
501
  "slug": "palindrome-products",
454
502
  "difficulty": 5,
455
503
  "topics": [
504
+
456
505
  ]
457
506
  },
458
507
  {
459
508
  "slug": "rail-fence-cipher",
460
509
  "difficulty": 6,
461
510
  "topics": [
511
+
462
512
  ]
463
513
  },
464
514
  {
465
515
  "slug": "zipper",
466
516
  "difficulty": 8,
467
517
  "topics": [
518
+
468
519
  ]
469
520
  },
470
521
  {
471
522
  "slug": "minesweeper",
472
523
  "difficulty": 7,
473
524
  "topics": [
525
+
474
526
  ]
475
527
  },
476
528
  {
477
529
  "slug": "connect",
478
530
  "difficulty": 7,
479
531
  "topics": [
532
+
480
533
  ]
481
534
  },
482
535
  {
483
536
  "slug": "difference-of-squares",
484
537
  "difficulty": 4,
485
538
  "topics": [
539
+
486
540
  ]
487
541
  },
488
542
  {
@@ -496,24 +550,28 @@
496
550
  "slug": "bowling",
497
551
  "difficulty": 8,
498
552
  "topics": [
553
+
499
554
  ]
500
555
  },
501
556
  {
502
557
  "slug": "dot-dsl",
503
558
  "difficulty": 8,
504
559
  "topics": [
560
+
505
561
  ]
506
562
  },
507
563
  {
508
564
  "slug": "custom-set",
509
565
  "difficulty": 5,
510
566
  "topics": [
567
+
511
568
  ]
512
569
  },
513
570
  {
514
571
  "slug": "forth",
515
572
  "difficulty": 10,
516
573
  "topics": [
574
+
517
575
  ]
518
576
  },
519
577
  {
@@ -553,13 +611,6 @@
553
611
  ],
554
612
  "deprecated": [
555
613
 
556
- ],
557
- "ignored": [
558
- "docs",
559
- "deps",
560
- "img",
561
- "test",
562
- "_build"
563
614
  ],
564
615
  "foregone": [
565
616
  "robot-name"
@@ -13,12 +13,6 @@
13
13
  "point-mutations",
14
14
  "trinary"
15
15
  ],
16
- "ignored": [
17
- "error-handling",
18
- "img",
19
- "gen",
20
- "docs"
21
- ],
22
16
  "foregone": [
23
17
  "space-age",
24
18
  "linked-list",
@@ -140,6 +134,11 @@
140
134
  "Mathematics"
141
135
  ]
142
136
  },
137
+ {
138
+ "difficulty": 1,
139
+ "slug": "error-handling",
140
+ "topics": []
141
+ },
143
142
  {
144
143
  "difficulty": 5,
145
144
  "slug": "secret-handshake",
@@ -6,7 +6,7 @@ import (
6
6
  "testing"
7
7
  )
8
8
 
9
- const targetTestVersion = 1
9
+ const targetTestVersion = 2
10
10
 
11
11
  var testCases = []struct {
12
12
  subject string
@@ -125,7 +125,7 @@ var testCases = []struct {
125
125
  "Carthorse",
126
126
  "radishes",
127
127
  },
128
- expected: []string{"carthorse"},
128
+ expected: []string{"Carthorse"},
129
129
  description: "candidates are case insensitive",
130
130
  },
131
131
  }
@@ -5,14 +5,13 @@ import (
5
5
  "strings"
6
6
  )
7
7
 
8
- const testVersion = 1
8
+ const testVersion = 2
9
9
 
10
10
  func Detect(subject string, candidates []string) []string {
11
11
  subject = strings.ToLower(subject)
12
12
  var matches []string
13
13
  for _, c := range candidates {
14
- c = strings.ToLower(c)
15
- if isAnagram(subject, c) {
14
+ if tc := strings.ToLower(c); isAnagram(subject, tc) {
16
15
  matches = append(matches, c)
17
16
  }
18
17
  }
@@ -3,14 +3,6 @@ language: java
3
3
  jdk:
4
4
  - oraclejdk8
5
5
 
6
- notifications:
7
- webhooks:
8
- urls:
9
- - https://webhooks.gitter.im/e/5e9ccd41111917b19478
10
- on_success: change # options: [always|never|change] default: always
11
- on_failure: always # options: [always|never|change] default: always
12
- on_start: never # options: [always|never|change] default: always
13
-
14
6
  # http://docs.travis-ci.com/user/migrating-from-legacy
15
7
  sudo: false
16
8
 
@@ -43,4 +35,12 @@ cache:
43
35
  bundler: true
44
36
  directories:
45
37
  - $HOME/.gradle/caches/
46
- - $HOME/.gradle/wrapper/
38
+ - $HOME/.gradle/wrapper/
39
+
40
+ notifications:
41
+ webhooks:
42
+ urls:
43
+ - https://webhooks.gitter.im/e/5e9ccd41111917b19478
44
+ on_success: change # options: [always|never|change] default: always
45
+ on_failure: always # options: [always|never|change] default: always
46
+ on_start: never # options: [always|never|change] default: always
@@ -1,4 +1,4 @@
1
- #!/bin/bash
1
+ #!/usr/bin/env bash
2
2
 
3
3
  LATEST=https://github.com/exercism/configlet/releases/latest
4
4
 
@@ -1,5 +1,11 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
+ # This script is shared between the Java and Kotlin tracks. If you make an update to this script on
4
+ # one track, please create a companion PR to merge it in to the other. Thank you!
5
+ TRACK=java
6
+ TRACK_REPO="x${TRACK}"
7
+ TRACK_SRC_EXT="java"
8
+
3
9
  on_exit() {
4
10
  echo ">>> on_exit()"
5
11
  if [[ "$xapi_pid" != "" ]] ; then
@@ -16,7 +22,7 @@ assert_installed() {
16
22
 
17
23
  if [[ "`which $binary`" == "" ]]; then
18
24
  echo "${binary} not found; it is required to perform this test."
19
- echo -e "Have you completed the setup instructions at https://github.com/exercism/xjava ?\n"
25
+ echo -e "Have you completed the setup instructions at https://github.com/exercism/${TRACK_REPO} ?\n"
20
26
  echo "PATH=${PATH}"
21
27
  echo "aborting."
22
28
  exit 1
@@ -35,7 +41,7 @@ assert_ruby_installed() {
35
41
  if [[ "${expected_ruby_ver}" != "" && "${current_ruby_ver}" != "${expected_ruby_ver}" ]]; then
36
42
  echo "${ruby_app_home} requires Ruby ${expected_ruby_ver}; current Ruby version is ${current_ruby_ver}."
37
43
  echo -e "Ruby used: `which ruby`.\n"
38
- echo -e "Have you completed the setup instructions at https://github.com/exercism/xjava ?\n"
44
+ echo -e "Have you completed the setup instructions at https://github.com/exercism/${TRACK_REPO} ?\n"
39
45
  echo "PATH=${PATH}"
40
46
  echo "aborting."
41
47
  exit 1
@@ -141,7 +147,7 @@ make_local_trackler() {
141
147
  local xapi_home="$2"
142
148
  echo ">>> make_local_trackler(trackler=\"${trackler}\", xapi_home=\"${xapi_home}\")"
143
149
 
144
- local xjava=$( pwd )
150
+ local track_root=$( pwd )
145
151
  pushd ${trackler}
146
152
 
147
153
  # Get the version of Trackler x-api is currently using
@@ -151,11 +157,11 @@ make_local_trackler() {
151
157
  git submodule init -- common
152
158
  git submodule update
153
159
 
154
- # Bake in local copy of xjava; this is what we are testing.
155
- rmdir tracks/java
156
- mkdir -p tracks/java/exercises
157
- cp ${xjava}/config.json tracks/java
158
- cp -r ${xjava}/exercises tracks/java
160
+ # Bake in local copy of this track; this is what we are testing.
161
+ rmdir tracks/${TRACK}
162
+ mkdir -p tracks/${TRACK}/exercises
163
+ cp ${track_root}/config.json tracks/${TRACK}
164
+ cp -r ${track_root}/exercises tracks/${TRACK}
159
165
 
160
166
  gem install bundler
161
167
  bundle install
@@ -208,7 +214,7 @@ solve_all_exercises() {
208
214
  local exercism_configfile="$2"
209
215
  echo ">>> solve_all_exercises(exercism_exercises_dir=\"${exercism_exercises_dir}\", exercism_configfile=\"${exercism_configfile}\")"
210
216
 
211
- local xjava=$( pwd )
217
+ local track_root=$( pwd )
212
218
  local exercism_cli="./exercism --config ${exercism_configfile}"
213
219
  local exercises=`cat config.json | jq '.exercises[].slug + " "' --join-output`
214
220
  local total_exercises=`cat config.json | jq '.exercises | length'`
@@ -222,15 +228,15 @@ solve_all_exercises() {
222
228
  echo "${current_exercise_number} of ${total_exercises} -- ${exercise}"
223
229
  echo "=================================================="
224
230
 
225
- ${exercism_cli} fetch java $exercise
226
- cp -R -H ${xjava}/exercises/${exercise}/src/example/java/* ${exercism_exercises_dir}/java/${exercise}/src/main/java/
231
+ ${exercism_cli} fetch ${TRACK} $exercise
232
+ cp -R -H ${track_root}/exercises/${exercise}/src/example/${TRACK}/* ${exercism_exercises_dir}/${TRACK}/${exercise}/src/main/${TRACK}/
227
233
 
228
- pushd ${exercism_exercises_dir}/java/${exercise}
234
+ pushd ${exercism_exercises_dir}/${TRACK}/${exercise}
229
235
  # Check that tests compile before we strip @Ignore annotations
230
236
  "$EXECPATH"/gradlew compileTestJava
231
237
  # Ensure we run all the tests (as delivered, all but the first is @Ignore'd)
232
- for testfile in `find . -name "*Test.java"`; do
233
- sed 's/@Ignore\(.*\)//' ${testfile} > "${tempfile}" && mv "${tempfile}" "${testfile}"
238
+ for testfile in `find . -name "*Test.${TRACK_SRC_EXT}"`; do
239
+ sed 's/@Ignore\(\(.*\)\)\{0,1\}//' ${testfile} > "${tempfile}" && mv "${tempfile}" "${testfile}"
234
240
  done
235
241
  "$EXECPATH"/gradlew test
236
242
  popd
@@ -244,9 +250,9 @@ main() {
244
250
  # all functions assume current working directory is repository root.
245
251
  cd "${SCRIPTPATH}/.."
246
252
 
247
- local xjava=$( pwd )
253
+ local track_root=$( pwd )
248
254
  local build_dir="build"
249
- local build_path="${xjava}/${build_dir}"
255
+ local build_path="${track_root}/${build_dir}"
250
256
 
251
257
  local xapi_home="${build_path}/x-api"
252
258
  local trackler_home="${build_path}/trackler"
@@ -260,7 +266,7 @@ main() {
260
266
 
261
267
  clean "${build_dir}"
262
268
 
263
- # Make a version of trackler that includes the source from this repo.
269
+ # Make a local version of trackler that includes the source from this repo.
264
270
  git_clone "x-api" "${xapi_home}"
265
271
  git_clone "trackler" "${trackler_home}"
266
272
  assert_ruby_installed "${trackler_home}"
@@ -1,4 +1,4 @@
1
- #!/bin/bash
1
+ #!/usr/bin/env bash
2
2
  set -e
3
3
  ./gradlew --version
4
4
 
@@ -10,6 +10,6 @@ bin/configlet .
10
10
  pushd exercises
11
11
  echo ""
12
12
  echo ">>> Running tests..."
13
- TERM=dumb ../gradlew check compileStarterSourceJava --continue
13
+ TERM=dumb ../gradlew check compileStarterSourceJava --parallel --continue
14
14
  popd
15
15
 
@@ -32,20 +32,20 @@ include("rotational-cipher.jl")
32
32
  end
33
33
  end
34
34
 
35
- # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
36
- # Additional exercises #
37
- # Remove the comments for the optional bonus exercises from HINTS.md #
38
- # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
35
+ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
36
+ # Additional exercises #
37
+ # Change @test_skip to @test for the optional bonus exercises from HINTS.md #
38
+ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
39
39
 
40
40
  # Bonus A
41
- # @testset "string literal R13" begin
42
- # @test R13"The quick brown fox jumps over the lazy dog." == "Gur dhvpx oebja sbk whzcf bire gur ynml qbt."
43
- # end
41
+ @testset "Bonus A: string literal R13" begin
42
+ @test_skip R13"The quick brown fox jumps over the lazy dog." == "Gur dhvpx oebja sbk whzcf bire gur ynml qbt."
43
+ end
44
44
 
45
45
  # Bonus B
46
- # @testset "string literals" begin
47
- # @test R5"OMG" == "TRL"
48
- # @test R4"Testing 1 2 3 testing" == "Xiwxmrk 1 2 3 xiwxmrk"
49
- # @test R21"Let's eat, Grandma!" == "Gzo'n zvo, Bmviyhv!"
50
- # @test R13"The quick brown fox jumps over the lazy dog." == "Gur dhvpx oebja sbk whzcf bire gur ynml qbt."
51
- # end
46
+ @testset "Bonus B: string literals" begin
47
+ @test_skip R5"OMG" == "TRL"
48
+ @test_skip R4"Testing 1 2 3 testing" == "Xiwxmrk 1 2 3 xiwxmrk"
49
+ @test_skip R21"Let's eat, Grandma!" == "Gzo'n zvo, Bmviyhv!"
50
+ @test_skip R13"The quick brown fox jumps over the lazy dog." == "Gur dhvpx oebja sbk whzcf bire gur ynml qbt."
51
+ end
@@ -1,5 +1,18 @@
1
1
  using Base.Test
2
2
 
3
+ import Base.Test.@test_skip, Base.Test.@test_broken
4
+
5
+ # When testing the example solution, all tests must pass, even ones marked as skipped or broken.
6
+ # The track user will not be affected by this.
7
+ # Overwrite @test_skip, @test_broken with @test
8
+ macro test_skip(ex)
9
+ @test eval(ex)
10
+ end
11
+
12
+ macro test_broken(ex)
13
+ @test eval(ex)
14
+ end
15
+
3
16
  for (root, dirs, files) in walkdir("exercises")
4
17
  for exercise in dirs
5
18
  # Allow only testing specified execises