trackler 2.0.6.15 → 2.0.6.16
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/tracks/go/config.json +5 -1
- data/tracks/go/exercises/clock/clock_test.go +13 -8
- data/tracks/ruby/.github/ISSUE_TEMPLATE.md +43 -0
- data/tracks/ruby/.github/PULL_REQUEST_TEMPLATE.md +36 -0
- data/tracks/swift/.swiftlint.yml +8 -3
- data/tracks/swift/.travis.yml +26 -17
- data/tracks/swift/Dangerfile +0 -7
- data/tracks/swift/Package.swift +26 -0
- data/tracks/swift/README.md +1 -1
- data/tracks/swift/docs/ABOUT.md +9 -1
- data/tracks/swift/docs/INSTALLATION.md +10 -2
- data/tracks/swift/docs/TESTS.md +45 -80
- data/tracks/swift/docs/img/file-inspector.png +0 -0
- data/tracks/swift/docs/img/tests-fail.png +0 -0
- data/tracks/swift/docs/img/tests-pass.png +0 -0
- data/tracks/swift/docs/img/tests.png +0 -0
- data/tracks/swift/exercises/accumulate/.gitignore +4 -0
- data/tracks/swift/exercises/accumulate/Package.swift +5 -0
- data/tracks/swift/exercises/accumulate/{AccumulateExample.swift → Sources/AccumulateExample.swift} +0 -0
- data/tracks/swift/exercises/accumulate/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/accumulate/{AccumulateTest.swift → Tests/AccumulateTests/AccumulateTests.swift} +13 -16
- data/tracks/swift/exercises/accumulate/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/acronym/.gitignore +4 -0
- data/tracks/swift/exercises/acronym/Package.swift +5 -0
- data/tracks/swift/exercises/acronym/{AcronymExample.swift → Sources/AcronymExample.swift} +2 -0
- data/tracks/swift/exercises/acronym/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/acronym/{AcronymTest.swift → Tests/AcronymTests/AcronymTests.swift} +13 -5
- data/tracks/swift/exercises/acronym/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/all-your-base/.gitignore +4 -0
- data/tracks/swift/exercises/all-your-base/Package.swift +5 -0
- data/tracks/swift/exercises/all-your-base/{AllYourBaseExample.swift → Sources/AllYourBaseExample.swift} +0 -0
- data/tracks/swift/exercises/all-your-base/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/all-your-base/{AllYourBaseTest.swift → Tests/AllYourBaseTests/AllYourBaseTests.swift} +27 -6
- data/tracks/swift/exercises/all-your-base/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/allergies/.gitignore +4 -0
- data/tracks/swift/exercises/allergies/Package.swift +5 -0
- data/tracks/swift/exercises/allergies/{AllergiesExample.swift → Sources/AllergiesExample.swift} +0 -0
- data/tracks/swift/exercises/allergies/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/allergies/{AllergiesTest.swift → Tests/AllergiesTests/AllergiesTests.swift} +12 -4
- data/tracks/swift/exercises/allergies/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/anagram/.gitignore +4 -0
- data/tracks/swift/exercises/anagram/Package.swift +5 -0
- data/tracks/swift/exercises/anagram/{AnagramExample.swift → Sources/AnagramExample.swift} +0 -0
- data/tracks/swift/exercises/anagram/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/anagram/{AnagramTest.swift → Tests/AnagramTests/AnagramTests.swift} +17 -4
- data/tracks/swift/exercises/anagram/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/atbash-cipher/.gitignore +4 -0
- data/tracks/swift/exercises/atbash-cipher/Package.swift +5 -0
- data/tracks/swift/exercises/atbash-cipher/{AtbashExample.swift → Sources/AtbashExample.swift} +2 -0
- data/tracks/swift/exercises/atbash-cipher/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/atbash-cipher/{AtbashTest.swift → Tests/AtbashTests/AtbashTests.swift} +15 -4
- data/tracks/swift/exercises/atbash-cipher/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/beer-song/.gitignore +4 -0
- data/tracks/swift/exercises/beer-song/Package.swift +5 -0
- data/tracks/swift/exercises/beer-song/{BeerSongExample.swift → Sources/BeerSongExample.swift} +0 -0
- data/tracks/swift/exercises/beer-song/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/beer-song/{BeerSongTest.swift → Tests/BeerSongTests/BeerSongTests.swift} +12 -4
- data/tracks/swift/exercises/beer-song/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/binary-search-tree/.gitignore +4 -0
- data/tracks/swift/exercises/binary-search-tree/Package.swift +5 -0
- data/tracks/swift/exercises/binary-search-tree/{BinarySearchTreeExample.swift → Sources/BinarySearchTreeExample.swift} +0 -0
- data/tracks/swift/exercises/binary-search-tree/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/binary-search-tree/{BinarySearchTreeTest.swift → Tests/BinarySearchTreeTests/BinarySearchTreeTests.swift} +16 -4
- data/tracks/swift/exercises/binary-search-tree/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/binary-search/.gitignore +4 -0
- data/tracks/swift/exercises/binary-search/Package.swift +5 -0
- data/tracks/swift/exercises/binary-search/{BinarySearchExample.swift → Sources/BinarySearchExample.swift} +0 -0
- data/tracks/swift/exercises/binary-search/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/binary-search/{BinarySearchTest.swift → Tests/BinarySearchTests/BinarySearchTests.swift} +15 -5
- data/tracks/swift/exercises/binary-search/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/binary/.gitignore +4 -0
- data/tracks/swift/exercises/binary/Package.swift +5 -0
- data/tracks/swift/exercises/binary/{BinaryExample.swift → Sources/BinaryExample.swift} +0 -0
- data/tracks/swift/exercises/binary/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/binary/{BinaryTest.swift → Tests/BinaryTests/BinaryTests.swift} +18 -4
- data/tracks/swift/exercises/binary/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/bob/.gitignore +4 -0
- data/tracks/swift/exercises/bob/Package.swift +5 -0
- data/tracks/swift/exercises/bob/{BobExample.swift → Sources/BobExample.swift} +2 -0
- data/tracks/swift/exercises/bob/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/bob/{BobTest.swift → Tests/BobTests/BobTests.swift} +24 -4
- data/tracks/swift/exercises/bob/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/bowling/.gitignore +4 -0
- data/tracks/swift/exercises/bowling/Package.swift +5 -0
- data/tracks/swift/exercises/bowling/{BowlingExample.swift → Sources/BowlingExample.swift} +1 -1
- data/tracks/swift/exercises/bowling/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/bowling/{BowlingTest.swift → Tests/BowlingTests/BowlingTests.swift} +31 -5
- data/tracks/swift/exercises/bowling/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/bracket-push/.gitignore +4 -0
- data/tracks/swift/exercises/bracket-push/Package.swift +5 -0
- data/tracks/swift/exercises/bracket-push/{BracketPushExample.swift → Sources/BracketPushExample.swift} +3 -3
- data/tracks/swift/exercises/bracket-push/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/bracket-push/{BracketPushTest.swift → Tests/BracketPushTests/BracketPushTests.swift} +21 -4
- data/tracks/swift/exercises/bracket-push/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/clock/.gitignore +4 -0
- data/tracks/swift/exercises/clock/Package.swift +5 -0
- data/tracks/swift/exercises/clock/{ClockExample.swift → Sources/ClockExample.swift} +2 -0
- data/tracks/swift/exercises/clock/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/clock/{ClockTest.swift → Tests/ClockTests/ClockTests.swift} +55 -4
- data/tracks/swift/exercises/clock/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/crypto-square/.gitignore +4 -0
- data/tracks/swift/exercises/crypto-square/Package.swift +5 -0
- data/tracks/swift/exercises/crypto-square/{CryptoSquareExample.swift → Sources/CryptoSquareExample.swift} +2 -2
- data/tracks/swift/exercises/crypto-square/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/crypto-square/{CryptoSquareTest.swift → Tests/CryptoSquareTests/CryptoSquareTests.swift} +23 -4
- data/tracks/swift/exercises/crypto-square/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/custom-set/.gitignore +4 -0
- data/tracks/swift/exercises/custom-set/Package.swift +5 -0
- data/tracks/swift/exercises/custom-set/{CustomSetExample.swift → Sources/CustomSetExample.swift} +0 -0
- data/tracks/swift/exercises/custom-set/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/custom-set/{CustomSetTest.swift → Tests/CustomSetTests/CustomSetTests.swift} +21 -5
- data/tracks/swift/exercises/custom-set/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/difference-of-squares/.gitignore +4 -0
- data/tracks/swift/exercises/difference-of-squares/Package.swift +5 -0
- data/tracks/swift/exercises/difference-of-squares/{DifferenceOfSquaresExample.swift → Sources/DifferenceOfSquaresExample.swift} +0 -0
- data/tracks/swift/exercises/difference-of-squares/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/difference-of-squares/{DifferenceOfSquaresTest.swift → Tests/DifferenceOfSquaresTests/DifferenceOfSquaresTests.swift} +16 -4
- data/tracks/swift/exercises/difference-of-squares/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/dominoes/.gitignore +4 -0
- data/tracks/swift/exercises/dominoes/Package.swift +5 -0
- data/tracks/swift/exercises/dominoes/{DominoesExample.swift → Sources/DominoesExample.swift} +0 -0
- data/tracks/swift/exercises/dominoes/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/dominoes/{DominoesTest.swift → Tests/DominoesTests/DominoesTests.swift} +19 -4
- data/tracks/swift/exercises/dominoes/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/etl/.gitignore +4 -0
- data/tracks/swift/exercises/etl/Package.swift +5 -0
- data/tracks/swift/exercises/etl/{EtlExample.swift → Sources/EtlExample.swift} +0 -0
- data/tracks/swift/exercises/etl/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/etl/Tests/EtlTests/EtlTests.swift +59 -0
- data/tracks/swift/exercises/etl/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/flatten-array/.gitignore +4 -0
- data/tracks/swift/exercises/flatten-array/Package.swift +5 -0
- data/tracks/swift/exercises/flatten-array/{FlattenArrayExample.swift → Sources/FlattenArrayExample.swift} +0 -0
- data/tracks/swift/exercises/flatten-array/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/flatten-array/{FlattenArrayTest.swift → Tests/FlattenArrayTests/FlattenArrayTests.swift} +14 -1
- data/tracks/swift/exercises/flatten-array/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/food-chain/.gitignore +4 -0
- data/tracks/swift/exercises/food-chain/Package.swift +5 -0
- data/tracks/swift/exercises/food-chain/{FoodChainExample.swift → Sources/FoodChainExample.swift} +0 -0
- data/tracks/swift/exercises/food-chain/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/food-chain/{FoodChainTest.swift → Tests/FoodChainTests/FoodChainTests.swift} +13 -4
- data/tracks/swift/exercises/food-chain/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/gigasecond/.gitignore +4 -0
- data/tracks/swift/exercises/gigasecond/Package.swift +5 -0
- data/tracks/swift/exercises/gigasecond/{GigasecondExample.swift → Sources/GigasecondExample.swift} +1 -1
- data/tracks/swift/exercises/gigasecond/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/gigasecond/{GigasecondTest.swift → Tests/GigasecondTests/GigasecondTests.swift} +14 -4
- data/tracks/swift/exercises/gigasecond/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/grade-school/.gitignore +4 -0
- data/tracks/swift/exercises/grade-school/Package.swift +5 -0
- data/tracks/swift/exercises/grade-school/{GradeSchoolExample.swift → Sources/GradeSchoolExample.swift} +0 -0
- data/tracks/swift/exercises/grade-school/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/grade-school/{GradeSchoolTest.swift → Tests/GradeSchoolTests/GradeSchoolTests.swift} +17 -13
- data/tracks/swift/exercises/grade-school/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/grains/.gitignore +4 -0
- data/tracks/swift/exercises/grains/Package.swift +5 -0
- data/tracks/swift/exercises/grains/{GrainsExample.swift → Sources/GrainsExample.swift} +1 -1
- data/tracks/swift/exercises/grains/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/grains/{GrainsTest.swift → Tests/GrainsTests/GrainsTests.swift} +19 -5
- data/tracks/swift/exercises/grains/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/hamming/.gitignore +4 -0
- data/tracks/swift/exercises/hamming/Package.swift +5 -0
- data/tracks/swift/exercises/hamming/{HammingExample.swift → Sources/HammingExample.swift} +0 -0
- data/tracks/swift/exercises/hamming/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/hamming/{HammingTest.swift → Tests/HammingTests/HammingTests.swift} +15 -4
- data/tracks/swift/exercises/hamming/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/hello-world/.gitignore +4 -0
- data/tracks/swift/exercises/hello-world/Package.swift +5 -0
- data/tracks/swift/exercises/hello-world/{HelloWorldExample.swift → Sources/HelloWorldExample.swift} +0 -0
- data/tracks/swift/exercises/hello-world/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/hello-world/{helloWorldTest.swift → Tests/HelloWorldTests/HelloWorldTests.swift} +11 -4
- data/tracks/swift/exercises/hello-world/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/hexadecimal/.gitignore +4 -0
- data/tracks/swift/exercises/hexadecimal/Package.swift +5 -0
- data/tracks/swift/exercises/hexadecimal/{HexadecimalExample.swift → Sources/HexadecimalExample.swift} +16 -16
- data/tracks/swift/exercises/hexadecimal/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/hexadecimal/{HexadecimalTest.swift → Tests/HexadecimalTests/HexadecimalTests.swift} +17 -4
- data/tracks/swift/exercises/hexadecimal/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/house/.gitignore +4 -0
- data/tracks/swift/exercises/house/Package.swift +5 -0
- data/tracks/swift/exercises/house/{HouseExample.swift → Sources/HouseExample.swift} +0 -0
- data/tracks/swift/exercises/house/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/house/{HouseTest.swift → Tests/HouseTests/HouseTests.swift} +9 -4
- data/tracks/swift/exercises/house/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/isogram/.gitignore +4 -0
- data/tracks/swift/exercises/isogram/Package.swift +5 -0
- data/tracks/swift/exercises/isogram/{IsogramExample.swift → Sources/IsogramExample.swift} +0 -0
- data/tracks/swift/exercises/isogram/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/isogram/{IsogramTest.swift → Tests/IsogramTests/IsogramTests.swift} +16 -4
- data/tracks/swift/exercises/isogram/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/kindergarten-garden/.gitignore +4 -0
- data/tracks/swift/exercises/kindergarten-garden/Package.swift +5 -0
- data/tracks/swift/exercises/kindergarten-garden/{KindergartenGardenExample.swift → Sources/KindergartenGardenExample.swift} +1 -1
- data/tracks/swift/exercises/kindergarten-garden/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/kindergarten-garden/{KindergartenGardenTest.swift → Tests/KindergartenGardenTests/KindergartenGardenTests.swift} +28 -5
- data/tracks/swift/exercises/kindergarten-garden/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/largest-series-product/.gitignore +4 -0
- data/tracks/swift/exercises/largest-series-product/Package.swift +5 -0
- data/tracks/swift/exercises/largest-series-product/{LargestSeriesProductExample.swift → Sources/LargestSeriesProductExample.swift} +0 -0
- data/tracks/swift/exercises/largest-series-product/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/largest-series-product/{LargestSeriesProductTest.swift → Tests/LargestSeriesProductTests/LargestSeriesProductTests.swift} +24 -4
- data/tracks/swift/exercises/largest-series-product/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/leap/.gitignore +4 -0
- data/tracks/swift/exercises/leap/Package.swift +5 -0
- data/tracks/swift/exercises/leap/{LeapExample.swift → Sources/LeapExample.swift} +0 -0
- data/tracks/swift/exercises/leap/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/leap/{LeapTest.swift → Tests/LeapTests/LeapTests.swift} +11 -4
- data/tracks/swift/exercises/leap/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/linked-list/.gitignore +4 -0
- data/tracks/swift/exercises/linked-list/Package.swift +5 -0
- data/tracks/swift/exercises/linked-list/{LinkedListExample.swift → Sources/LinkedListExample.swift} +3 -3
- data/tracks/swift/exercises/linked-list/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/linked-list/{LinkedListTest.swift → Tests/LinkedListTests/LinkedListTests.swift} +12 -4
- data/tracks/swift/exercises/linked-list/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/luhn/.gitignore +4 -0
- data/tracks/swift/exercises/luhn/Package.swift +5 -0
- data/tracks/swift/exercises/luhn/{LuhnExample.swift → Sources/LuhnExample.swift} +1 -1
- data/tracks/swift/exercises/luhn/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/luhn/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/luhn/{LuhnTest.swift → Tests/LuhnTests/LuhnTests.swift} +16 -4
- data/tracks/swift/exercises/matrix/.gitignore +4 -0
- data/tracks/swift/exercises/matrix/Package.swift +5 -0
- data/tracks/swift/exercises/matrix/{MatrixExample.swift → Sources/MatrixExample.swift} +0 -0
- data/tracks/swift/exercises/matrix/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/matrix/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/matrix/{MatrixTest.swift → Tests/MatrixTests/MatrixTests.swift} +13 -5
- data/tracks/swift/exercises/meetup/.gitignore +4 -0
- data/tracks/swift/exercises/meetup/Package.swift +5 -0
- data/tracks/swift/exercises/meetup/{MeetupExample.swift → Sources/MeetupExample.swift} +1 -1
- data/tracks/swift/exercises/meetup/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/meetup/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/meetup/{MeetupTest.swift → Tests/MeetupTests/MeetupTests.swift} +17 -5
- data/tracks/swift/exercises/minesweeper/.gitignore +4 -0
- data/tracks/swift/exercises/minesweeper/Package.swift +5 -0
- data/tracks/swift/exercises/minesweeper/{MinesweeperExample.swift → Sources/MinesweeperExample.swift} +8 -2
- data/tracks/swift/exercises/minesweeper/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/minesweeper/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/minesweeper/{MinesweeperTest.swift → Tests/MinesweeperTests/MinesweeperTests.swift} +19 -6
- data/tracks/swift/exercises/nth-prime/.gitignore +4 -0
- data/tracks/swift/exercises/nth-prime/Package.swift +5 -0
- data/tracks/swift/exercises/nth-prime/{NthPrimeExample.swift → Sources/NthPrimeExample.swift} +5 -1
- data/tracks/swift/exercises/nth-prime/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/nth-prime/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/nth-prime/Tests/NthPrimeTests/NthPrimeTests.swift +34 -0
- data/tracks/swift/exercises/nucleotide-count/.gitignore +4 -0
- data/tracks/swift/exercises/nucleotide-count/Package.swift +5 -0
- data/tracks/swift/exercises/nucleotide-count/{NucleotideCountExample.swift → Sources/NucleotideCountExample.swift} +1 -1
- data/tracks/swift/exercises/nucleotide-count/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/nucleotide-count/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/nucleotide-count/{NucleotideCountTest.swift → Tests/NucleotideCountTests/NucleotideCountTests.swift} +17 -5
- data/tracks/swift/exercises/ocr-numbers/.gitignore +4 -0
- data/tracks/swift/exercises/ocr-numbers/Package.swift +5 -0
- data/tracks/swift/exercises/ocr-numbers/{OcrNumbersExample.swift → Sources/OcrNumbersExample.swift} +0 -0
- data/tracks/swift/exercises/ocr-numbers/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/ocr-numbers/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/ocr-numbers/{OcrNumbersTest.swift → Tests/OcrNumbersTests/OcrNumbersTests.swift} +25 -5
- data/tracks/swift/exercises/octal/.gitignore +4 -0
- data/tracks/swift/exercises/octal/Package.swift +5 -0
- data/tracks/swift/exercises/octal/{OctalExample.swift → Sources/OctalExample.swift} +5 -1
- data/tracks/swift/exercises/octal/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/octal/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/octal/{OctalTest.swift → Tests/OctalTests/OctalTests.swift} +22 -5
- data/tracks/swift/exercises/palindrome-products/.gitignore +4 -0
- data/tracks/swift/exercises/palindrome-products/Package.swift +5 -0
- data/tracks/swift/exercises/palindrome-products/{PalindromeProductsExample.swift → Sources/PalindromeProductsExample.swift} +1 -0
- data/tracks/swift/exercises/palindrome-products/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/palindrome-products/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/palindrome-products/{PalindromeProductsTest.swift → Tests/PalindromeProductsTests/PalindromeProductsTests.swift} +12 -5
- data/tracks/swift/exercises/pangram/.gitignore +4 -0
- data/tracks/swift/exercises/pangram/Package.swift +5 -0
- data/tracks/swift/exercises/pangram/{PangramExample.swift → Sources/PangramExample.swift} +0 -0
- data/tracks/swift/exercises/pangram/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/pangram/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/pangram/{PangramTest.swift → Tests/PangramTests/PangramTests.swift} +16 -5
- data/tracks/swift/exercises/pascals-triangle/.gitignore +4 -0
- data/tracks/swift/exercises/pascals-triangle/Package.swift +5 -0
- data/tracks/swift/exercises/pascals-triangle/{PascalsTriangleExample.swift → Sources/PascalsTriangleExample.swift} +0 -0
- data/tracks/swift/exercises/pascals-triangle/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/pascals-triangle/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/pascals-triangle/{PascalsTriangleTest.swift → Tests/PascalsTriangleTests/PascalsTriangleTests.swift} +13 -5
- data/tracks/swift/exercises/perfect-numbers/.gitignore +4 -0
- data/tracks/swift/exercises/perfect-numbers/Package.swift +5 -0
- data/tracks/swift/exercises/perfect-numbers/{PerfectNumbersExample.swift → Sources/PerfectNumbersExample.swift} +0 -0
- data/tracks/swift/exercises/perfect-numbers/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/perfect-numbers/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/perfect-numbers/{PerfectNumbersTest.swift → Tests/PerfectNumbersTests/PerfectNumbersTests.swift} +11 -4
- data/tracks/swift/exercises/phone-number/.gitignore +4 -0
- data/tracks/swift/exercises/phone-number/Package.swift +5 -0
- data/tracks/swift/exercises/phone-number/{PhoneNumberExample.swift → Sources/PhoneNumberExample.swift} +2 -0
- data/tracks/swift/exercises/phone-number/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/phone-number/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/phone-number/{PhoneNumberTest.swift → Tests/PhoneNumberTests/PhoneNumberTests.swift} +16 -5
- data/tracks/swift/exercises/pig-latin/.gitignore +4 -0
- data/tracks/swift/exercises/pig-latin/Package.swift +5 -0
- data/tracks/swift/exercises/pig-latin/{PigLatinExample.swift → Sources/PigLatinExample.swift} +2 -0
- data/tracks/swift/exercises/pig-latin/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/pig-latin/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/pig-latin/{PigLatinTest.swift → Tests/PigLatinTests/PigLatinTests.swift} +22 -4
- data/tracks/swift/exercises/poker/.gitignore +4 -0
- data/tracks/swift/exercises/poker/Package.swift +5 -0
- data/tracks/swift/exercises/poker/{PokerExample.swift → Sources/PokerExample.swift} +3 -1
- data/tracks/swift/exercises/poker/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/poker/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/poker/{PokerTest.swift → Tests/PokerTests/PokerTests.swift} +10 -5
- data/tracks/swift/exercises/prime-factors/.gitignore +4 -0
- data/tracks/swift/exercises/prime-factors/Package.swift +5 -0
- data/tracks/swift/exercises/prime-factors/{PrimeFactorsExample.swift → Sources/PrimeFactorsExample.swift} +0 -0
- data/tracks/swift/exercises/prime-factors/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/prime-factors/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/prime-factors/{PrimeFactorsTest.swift → Tests/PrimeFactorsTests/PrimeFactorsTests.swift} +18 -5
- data/tracks/swift/exercises/pythagorean-triplet/.gitignore +4 -0
- data/tracks/swift/exercises/pythagorean-triplet/Package.swift +5 -0
- data/tracks/swift/exercises/pythagorean-triplet/{PythagoreanTripletExample.swift → Sources/PythagoreanTripletExample.swift} +5 -1
- data/tracks/swift/exercises/pythagorean-triplet/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/pythagorean-triplet/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/pythagorean-triplet/{PythagoreanTripletTest.swift → Tests/PythagoreanTripletTests/PythagoreanTripletTests.swift} +15 -4
- data/tracks/swift/exercises/queen-attack/.gitignore +4 -0
- data/tracks/swift/exercises/queen-attack/Package.swift +5 -0
- data/tracks/swift/exercises/queen-attack/{QueenAttackExample.swift → Sources/QueenAttackExample.swift} +0 -0
- data/tracks/swift/exercises/queen-attack/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/queen-attack/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/queen-attack/{QueenAttackTest.swift → Tests/QueenAttackTests/QueenAttackTests.swift} +24 -6
- data/tracks/swift/exercises/raindrops/.gitignore +4 -0
- data/tracks/swift/exercises/raindrops/Package.swift +5 -0
- data/tracks/swift/exercises/raindrops/{RaindropsExample.swift → Sources/RaindropsExample.swift} +0 -0
- data/tracks/swift/exercises/raindrops/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/raindrops/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/raindrops/{RaindropsTest.swift → Tests/RaindropsTests/RaindropsTests.swift} +23 -5
- data/tracks/swift/exercises/rna-transcription/.gitignore +4 -0
- data/tracks/swift/exercises/rna-transcription/Package.swift +5 -0
- data/tracks/swift/exercises/rna-transcription/{RnaTranscriptionExample.swift → Sources/RnaTranscriptionExample.swift} +0 -0
- data/tracks/swift/exercises/rna-transcription/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/rna-transcription/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/rna-transcription/Tests/RnaTranscriptionTests/RnaTranscriptionTests.swift +34 -0
- data/tracks/swift/exercises/robot-name/.gitignore +4 -0
- data/tracks/swift/exercises/robot-name/Package.swift +5 -0
- data/tracks/swift/exercises/robot-name/{RobotNameExample.swift → Sources/RobotNameExample.swift} +9 -4
- data/tracks/swift/exercises/robot-name/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/robot-name/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/robot-name/{RobotNameTest.swift → Tests/RobotNameTests/RobotNameTests.swift} +19 -5
- data/tracks/swift/exercises/robot-simulator/.gitignore +4 -0
- data/tracks/swift/exercises/robot-simulator/Package.swift +5 -0
- data/tracks/swift/exercises/robot-simulator/{RobotSimulatorExample.swift → Sources/RobotSimulatorExample.swift} +0 -0
- data/tracks/swift/exercises/robot-simulator/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/robot-simulator/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/robot-simulator/{RobotSimulatorTest.swift → Tests/RobotSimulatorTests/RobotSimulatorTests.swift} +31 -5
- data/tracks/swift/exercises/roman-numerals/.gitignore +4 -0
- data/tracks/swift/exercises/roman-numerals/Package.swift +5 -0
- data/tracks/swift/exercises/roman-numerals/{RomanNumeralsExample.swift → Sources/RomanNumeralsExample.swift} +0 -0
- data/tracks/swift/exercises/roman-numerals/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/roman-numerals/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/roman-numerals/{RomanNumeralsTest.swift → Tests/RomanNumeralsTests/RomanNumeralsTests.swift} +25 -5
- data/tracks/swift/exercises/run-length-encoding/.gitignore +4 -0
- data/tracks/swift/exercises/run-length-encoding/Package.swift +5 -0
- data/tracks/swift/exercises/run-length-encoding/{RunLengthEncodingExample.swift → Sources/RunLengthEncodingExample.swift} +0 -0
- data/tracks/swift/exercises/run-length-encoding/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/run-length-encoding/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/run-length-encoding/{RunLengthEncodingTest.swift → Tests/RunLengthEncodingTests/RunLengthEncodingTests.swift} +15 -5
- data/tracks/swift/exercises/saddle-points/.gitignore +4 -0
- data/tracks/swift/exercises/saddle-points/Package.swift +5 -0
- data/tracks/swift/exercises/saddle-points/{SaddlePointsExample.swift → Sources/SaddlePointsExample.swift} +0 -0
- data/tracks/swift/exercises/saddle-points/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/saddle-points/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/saddle-points/{SaddlePointsTest.swift → Tests/SaddlePointsTests/SaddlePointsTests.swift} +17 -5
- data/tracks/swift/exercises/scrabble-score/.gitignore +4 -0
- data/tracks/swift/exercises/scrabble-score/Package.swift +5 -0
- data/tracks/swift/exercises/scrabble-score/{ScrabbleScoreExample.swift → Sources/ScrabbleScoreExample.swift} +2 -0
- data/tracks/swift/exercises/scrabble-score/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/scrabble-score/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/scrabble-score/{ScrabbleScoreTest.swift → Tests/ScrabbleScoreTests/ScrabbleScoreTests.swift} +16 -5
- data/tracks/swift/exercises/secret-handshake/.gitignore +4 -0
- data/tracks/swift/exercises/secret-handshake/Package.swift +5 -0
- data/tracks/swift/exercises/secret-handshake/{SecretHandshakeExample.swift → Sources/SecretHandshakeExample.swift} +0 -0
- data/tracks/swift/exercises/secret-handshake/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/secret-handshake/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/secret-handshake/{SecretHandshakeTest.swift → Tests/SecretHandshakeTests/SecretHandshakeTests.swift} +15 -5
- data/tracks/swift/exercises/series/.gitignore +4 -0
- data/tracks/swift/exercises/series/Package.swift +5 -0
- data/tracks/swift/exercises/series/{SeriesExample.swift → Sources/SeriesExample.swift} +0 -0
- data/tracks/swift/exercises/series/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/series/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/series/{SeriesTest.swift → Tests/SeriesTests/SeriesTests.swift} +21 -5
- data/tracks/swift/exercises/sieve/.gitignore +4 -0
- data/tracks/swift/exercises/sieve/Package.swift +5 -0
- data/tracks/swift/exercises/sieve/{SieveExample.swift → Sources/SieveExample.swift} +0 -0
- data/tracks/swift/exercises/sieve/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/sieve/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/sieve/{SieveTest.swift → Tests/SieveTests/SieveTests.swift} +9 -5
- data/tracks/swift/exercises/simple-cipher/.gitignore +4 -0
- data/tracks/swift/exercises/simple-cipher/Package.swift +5 -0
- data/tracks/swift/exercises/simple-cipher/{SimpleCipherExample.swift → Sources/SimpleCipherExample.swift} +14 -3
- data/tracks/swift/exercises/simple-cipher/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/simple-cipher/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/simple-cipher/{SimpleCipherTest.swift → Tests/SimpleCipherTests/SimpleCipherTests.swift} +22 -5
- data/tracks/swift/exercises/simple-linked-list/.gitignore +4 -0
- data/tracks/swift/exercises/simple-linked-list/Package.swift +5 -0
- data/tracks/swift/exercises/simple-linked-list/{SimpleLinkedListExample.swift → Sources/SimpleLinkedListExample.swift} +2 -2
- data/tracks/swift/exercises/simple-linked-list/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/simple-linked-list/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/simple-linked-list/{SimpleLinkedListTest.swift → Tests/SimpleLinkedListTests/SimpleLinkedListTests.swift} +16 -6
- data/tracks/swift/exercises/space-age/.gitignore +4 -0
- data/tracks/swift/exercises/space-age/Package.swift +5 -0
- data/tracks/swift/exercises/space-age/{SpaceAgeExample.swift → Sources/SpaceAgeExample.swift} +5 -1
- data/tracks/swift/exercises/space-age/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/space-age/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/space-age/{SpaceAgeTest.swift → Tests/SpaceAgeTests/SpaceAgeTests.swift} +17 -5
- data/tracks/swift/exercises/strain/.gitignore +4 -0
- data/tracks/swift/exercises/strain/Package.swift +5 -0
- data/tracks/swift/exercises/strain/{StrainExample.swift → Sources/StrainExample.swift} +0 -0
- data/tracks/swift/exercises/strain/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/strain/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/strain/{StrainTest.swift → Tests/StrainTests/StrainTests.swift} +20 -5
- data/tracks/swift/exercises/sublist/.gitignore +4 -0
- data/tracks/swift/exercises/sublist/Package.swift +5 -0
- data/tracks/swift/exercises/sublist/{SublistExample.swift → Sources/SublistExample.swift} +0 -0
- data/tracks/swift/exercises/sublist/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/sublist/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/sublist/{SubListTest.swift → Tests/SublistTests/SublistTests.swift} +24 -2
- data/tracks/swift/exercises/sum-of-multiples/.gitignore +4 -0
- data/tracks/swift/exercises/sum-of-multiples/Package.swift +5 -0
- data/tracks/swift/exercises/sum-of-multiples/{SumOfMultiplesExample.swift → Sources/SumOfMultiplesExample.swift} +0 -0
- data/tracks/swift/exercises/sum-of-multiples/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/sum-of-multiples/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/sum-of-multiples/{SumOfMultiplesTest.swift → Tests/SumOfMultiplesTests/SumOfMultiplesTests.swift} +18 -5
- data/tracks/swift/exercises/tournament/.gitignore +4 -0
- data/tracks/swift/exercises/tournament/Package.swift +5 -0
- data/tracks/swift/exercises/tournament/{TournamentExample.swift → Sources/TournamentExample.swift} +8 -9
- data/tracks/swift/exercises/tournament/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/tournament/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/tournament/{TournamentTest.swift → Tests/TournamentTests/TournamentTests.swift} +12 -8
- data/tracks/swift/exercises/transpose/.gitignore +4 -0
- data/tracks/swift/exercises/transpose/Package.swift +5 -0
- data/tracks/swift/exercises/transpose/{TransposeExample.swift → Sources/TransposeExample.swift} +2 -0
- data/tracks/swift/exercises/transpose/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/transpose/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/transpose/{TransposeTest.swift → Tests/TransposeTests/TransposeTests.swift} +18 -5
- data/tracks/swift/exercises/triangle/.gitignore +4 -0
- data/tracks/swift/exercises/triangle/Package.swift +5 -0
- data/tracks/swift/exercises/triangle/{TriangleExample.swift → Sources/TriangleExample.swift} +0 -0
- data/tracks/swift/exercises/triangle/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/triangle/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/triangle/{TriangleTest.swift → Tests/TriangleTests/TriangleTests.swift} +22 -5
- data/tracks/swift/exercises/trinary/.gitignore +4 -0
- data/tracks/swift/exercises/trinary/Package.swift +5 -0
- data/tracks/swift/exercises/trinary/{TrinaryExample.swift → Sources/TrinaryExample.swift} +5 -1
- data/tracks/swift/exercises/trinary/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/trinary/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/trinary/{TrinaryTest.swift → Tests/TrinaryTests/TrinaryTests.swift} +17 -5
- data/tracks/swift/exercises/twelve-days/.gitignore +4 -0
- data/tracks/swift/exercises/twelve-days/Package.swift +5 -0
- data/tracks/swift/exercises/twelve-days/Sources/TwelveDaysExample.swift +24 -0
- data/tracks/swift/exercises/twelve-days/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/twelve-days/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/twelve-days/{TwelveDaysTest.swift → Tests/TwelveDaysTests/TwelveDaysTests.swift} +21 -4
- data/tracks/swift/exercises/word-count/.gitignore +4 -0
- data/tracks/swift/exercises/word-count/Package.swift +5 -0
- data/tracks/swift/exercises/word-count/{WordCountExample.swift → Sources/WordCountExample.swift} +1 -1
- data/tracks/swift/exercises/word-count/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/word-count/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/word-count/{WordCountTest.swift → Tests/WordCountTests/WordCountTests.swift} +18 -10
- data/tracks/swift/exercises/wordy/.gitignore +4 -0
- data/tracks/swift/exercises/wordy/Package.swift +5 -0
- data/tracks/swift/exercises/wordy/{WordyExample.swift → Sources/WordyExample.swift} +6 -4
- data/tracks/swift/exercises/wordy/Sources/deleteme.swift +1 -0
- data/tracks/swift/exercises/wordy/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/wordy/{WordyTest.swift → Tests/WordyTests/WordyTests.swift} +23 -5
- data/tracks/swift/xswift-test-spm +5 -0
- metadata +460 -167
- data/tracks/swift/docs/img/tests_001-splash.png +0 -0
- data/tracks/swift/docs/img/tests_002-templateChooser.png +0 -0
- data/tracks/swift/docs/img/tests_003-nameProject.jpg +0 -0
- data/tracks/swift/docs/img/tests_004-saveProject.jpg +0 -0
- data/tracks/swift/docs/img/tests_005-folderLayout.png +0 -0
- data/tracks/swift/docs/img/tests_006-newProjectInitial.jpg +0 -0
- data/tracks/swift/docs/img/tests_007-fileInspectorUpdate.png +0 -0
- data/tracks/swift/docs/img/tests_008-templateChooserSwift.png +0 -0
- data/tracks/swift/docs/img/tests_009-importTestSource.png +0 -0
- data/tracks/swift/docs/img/tests_010-testsImportExample.png +0 -0
- data/tracks/swift/docs/img/tests_011-finalLayoutExample.png +0 -0
- data/tracks/swift/exercises/etl/EtlTest.swift +0 -51
- data/tracks/swift/exercises/nth-prime/NthPrimeTest.swift +0 -27
- data/tracks/swift/exercises/rna-transcription/RnaTranscriptionTest.swift +0 -27
- data/tracks/swift/exercises/twelve-days/TwelveDaysExample.swift +0 -24
- data/tracks/swift/xcodeProject/xSwift Tests/Info.plist +0 -24
- data/tracks/swift/xcodeProject/xSwift.xcodeproj/project.pbxproj +0 -1521
- data/tracks/swift/xcodeProject/xSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- data/tracks/swift/xcodeProject/xSwift.xcodeproj/xcshareddata/xcschemes/xSwiftTests.xcscheme +0 -99
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 93c7f99da67e82bacb69b2baa1335f4fe2fcc2da
|
4
|
+
data.tar.gz: 789b2e7a4936b344dcefb2dcf594d603889c762f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d558ac9c0cea44feb34714b50a7447eda5c3cc0ff7f3ac6c8e9e357f073117ea060ae7b3867d3be38d2f37903275c5b07196bc1c6870754956c7081bb5a33bb0
|
7
|
+
data.tar.gz: d206b1b48daee6f9d5a178f4c50dadec5874bfbf42a0103671bdae92d5994c2c2d116ba6f0e119d538c2204a1b2ddd0c9f8e459c4d2bc0982bb5d5efb6b7bf0b
|
data/lib/trackler/version.rb
CHANGED
data/tracks/go/config.json
CHANGED
@@ -12,15 +12,20 @@ import (
|
|
12
12
|
// (Clock) Add(minutes int) Clock
|
13
13
|
//
|
14
14
|
// The Add method should also handle subtraction by accepting negative values.
|
15
|
-
|
16
|
-
//
|
15
|
+
|
16
|
+
// To satisfy the README requirement about clocks being equal, values of
|
17
|
+
// your Clock type need to work with the == operator. This means that if your
|
18
|
+
// New function returns a pointer rather than a value, your clocks will
|
19
|
+
// probably not work with ==.
|
20
|
+
//
|
21
|
+
// While the time.Time type in the standard library (https://golang.org/pkg/time/#Time)
|
22
|
+
// doesn't necessarily need to be used as a basis for your Clock type, it might
|
23
|
+
// help to look at how constructors there (Date and Now) return values rather
|
24
|
+
// than pointers. Note also how most time.Time methods have value receivers
|
25
|
+
// rather than pointer receivers.
|
17
26
|
//
|
18
|
-
//
|
19
|
-
//
|
20
|
-
// (Date and Now) return Time values rather than pointers. Note also how
|
21
|
-
// most time.Time methods have value receivers rather than pointer receivers.
|
22
|
-
// For more background on this read
|
23
|
-
// https://github.com/golang/go/wiki/CodeReviewComments#receiver-type.
|
27
|
+
// For some useful guidelines on when to use a value receiver or a pointer
|
28
|
+
// receiver see: https://github.com/golang/go/wiki/CodeReviewComments#receiver-type
|
24
29
|
|
25
30
|
const targetTestVersion = 4
|
26
31
|
|
@@ -0,0 +1,43 @@
|
|
1
|
+
<!--- Provide a general summary of the issue in the Title above -->
|
2
|
+
|
3
|
+
## Expected Behavior
|
4
|
+
<!--- If you're describing a bug, tell us what should happen -->
|
5
|
+
<!--- If you're suggesting a change/improvement, tell us how it should work -->
|
6
|
+
|
7
|
+
## Current Behavior
|
8
|
+
<!--- If describing a bug, tell us what happens instead of the expected behavior -->
|
9
|
+
<!--- If suggesting a change/improvement, explain the difference from current behavior -->
|
10
|
+
|
11
|
+
## Possible Solution
|
12
|
+
<!--- Not obligatory, but suggest a fix/reason for the bug, -->
|
13
|
+
<!--- or ideas how to implement the addition or change -->
|
14
|
+
|
15
|
+
## Steps to Reproduce (for bugs)
|
16
|
+
<!--- Provide a link to a live example, or an unambiguous set of steps to -->
|
17
|
+
<!--- reproduce this bug. Include code to reproduce, if relevant -->
|
18
|
+
1.
|
19
|
+
2.
|
20
|
+
3.
|
21
|
+
4.
|
22
|
+
|
23
|
+
## Context
|
24
|
+
<!--- How has this issue affected you? What are you trying to accomplish? -->
|
25
|
+
<!--- Providing context helps us come up with a solution that is most useful in the real world -->
|
26
|
+
|
27
|
+
## Your Environment
|
28
|
+
<!--- Include as many relevant details about the environment you experienced the bug in -->
|
29
|
+
* Version used:
|
30
|
+
* Environment name and version (e.g. Chrome 39, node.js 5.4):
|
31
|
+
* Operating System and version (desktop or mobile):
|
32
|
+
* Link to your project:
|
33
|
+
|
34
|
+
## Task List
|
35
|
+
|
36
|
+
* [ ] First Task
|
37
|
+
* [ ] Second Task
|
38
|
+
* [ ] Third Task
|
39
|
+
|
40
|
+
## References and Closures
|
41
|
+
|
42
|
+
<!--- refernces #000 --->
|
43
|
+
<!--- closes #000 --->
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<!--- Provide a general summary of your changes in the Title above -->
|
2
|
+
|
3
|
+
## Description
|
4
|
+
<!--- Describe your changes in detail -->
|
5
|
+
|
6
|
+
## Motivation and Context
|
7
|
+
<!--- Why is this change required? What problem does it solve? -->
|
8
|
+
<!--- If it fixes an open issue, please link to the issue here. -->
|
9
|
+
|
10
|
+
## How Has This Been Tested?
|
11
|
+
<!--- Please describe in detail how you tested your changes. -->
|
12
|
+
<!--- Include details of your testing environment, and the tests you ran to -->
|
13
|
+
<!--- see how your change affects other areas of the code, etc. -->
|
14
|
+
|
15
|
+
## Screenshots (if appropriate):
|
16
|
+
|
17
|
+
## Types of changes
|
18
|
+
<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: -->
|
19
|
+
- [ ] Bug fix (non-breaking change which fixes an issue)
|
20
|
+
- [ ] New feature (non-breaking change which adds functionality)
|
21
|
+
- [ ] Breaking change (fix or feature that would cause existing functionality to change)
|
22
|
+
|
23
|
+
## References and Closures
|
24
|
+
|
25
|
+
<!--- refernces #000 -->
|
26
|
+
<!--- closes #000 -->
|
27
|
+
|
28
|
+
## Checklist:
|
29
|
+
<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
|
30
|
+
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
|
31
|
+
- [ ] My change requires a change to the documentation.
|
32
|
+
- [ ] My change relies on a pending issue/pull request
|
33
|
+
- [ ] I have updated the documentation accordingly.
|
34
|
+
- [ ] I have read the **CONTRIBUTING** document.
|
35
|
+
- [ ] I have added tests to cover my changes.
|
36
|
+
- [ ] All new and existing tests passed.
|
data/tracks/swift/.swiftlint.yml
CHANGED
@@ -1,15 +1,20 @@
|
|
1
|
-
variable_name:
|
2
|
-
min_length:
|
1
|
+
variable_name:
|
2
|
+
min_length:
|
3
3
|
warning: 1
|
4
4
|
error: 0
|
5
5
|
|
6
|
+
colon:
|
7
|
+
apply_to_dictionaries: false
|
8
|
+
|
6
9
|
force_try: warning
|
7
10
|
|
8
11
|
opt_in_rules:
|
9
12
|
- vertical_whitespace
|
10
|
-
|
13
|
+
- closure_spacing
|
14
|
+
|
11
15
|
disabled_rules: # rule identifiers to exclude from running
|
12
16
|
- function_body_length
|
13
17
|
- line_length
|
18
|
+
- trailing_comma
|
14
19
|
|
15
20
|
reporter: "json"
|
data/tracks/swift/.travis.yml
CHANGED
@@ -1,21 +1,30 @@
|
|
1
|
-
language:
|
2
|
-
osx_image: xcode8
|
3
|
-
xcode_project: 'xcodeProject/xSwift.xcodeproj'
|
4
|
-
xcode_scheme: 'xSwiftTests'
|
1
|
+
language: generic
|
5
2
|
|
6
3
|
before_install:
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
4
|
+
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then gem install danger ; fi
|
5
|
+
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update ; fi
|
6
|
+
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew outdated swiftlint || brew upgrade swiftlint ; fi
|
7
|
+
|
8
|
+
matrix:
|
9
|
+
include:
|
10
|
+
- script:
|
11
|
+
- swiftlint lint --quiet >> lintreport.json
|
12
|
+
- ls
|
13
|
+
- ./xswift-test-spm
|
14
|
+
env: JOB=SPM
|
15
|
+
os: osx
|
16
|
+
osx_image: xcode8.2
|
17
|
+
- script:
|
18
|
+
- bin/fetch-configlet
|
19
|
+
- bin/configlet .
|
20
|
+
- docker run -v `pwd`:/xswift norionomura/sourcekit:302 bash -c "cd /xswift && ./xswift-test-spm"
|
21
|
+
env: JOB=Linux
|
22
|
+
sudo: required
|
23
|
+
services: docker
|
16
24
|
|
17
25
|
after_success:
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
26
|
+
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then danger ; fi
|
27
|
+
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then ls -al ; fi
|
28
|
+
|
29
|
+
|
30
|
+
|
data/tracks/swift/Dangerfile
CHANGED
@@ -42,10 +42,3 @@ json.each do |object|
|
|
42
42
|
message(msg, file: shortFile, line: line)
|
43
43
|
end
|
44
44
|
end
|
45
|
-
|
46
|
-
# Reports when the test passed
|
47
|
-
jsonpath2 = "build/reports/errors.json"
|
48
|
-
contents2 = File.read jsonpath2
|
49
|
-
json2 = JSON.parse contents2
|
50
|
-
firstStrinInArray = json2["tests_summary_messages"][0]
|
51
|
-
message(firstStrinInArray)
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import PackageDescription
|
2
|
+
import Foundation
|
3
|
+
|
4
|
+
let path = FileManager.default.currentDirectoryPath + "/config.json"
|
5
|
+
var allProblems = [String]()
|
6
|
+
|
7
|
+
if
|
8
|
+
let jsonData = try? Data(contentsOf: URL(fileURLWithPath: path), options: Data.ReadingOptions.mappedIfSafe) ,
|
9
|
+
let json = try? JSONSerialization.jsonObject(with: jsonData, options: []) ,
|
10
|
+
let jsonDict = json as? [String: Any],
|
11
|
+
let exercisesDict = jsonDict["exercises"] as? [[String:Any]],
|
12
|
+
let exercises = exercisesDict.map({$0["slug"]}) as? [String],
|
13
|
+
let deprecated = jsonDict["deprecated"] as? [String] {
|
14
|
+
|
15
|
+
allProblems += exercises
|
16
|
+
allProblems += deprecated
|
17
|
+
} else {
|
18
|
+
print("Could not parse config.json at \(path)")
|
19
|
+
}
|
20
|
+
|
21
|
+
let dependencies = allProblems.map { Package.Dependency.Package(url: "./exercises/\($0)/", majorVersion: 1) }
|
22
|
+
|
23
|
+
let package = Package(
|
24
|
+
name: "xswift",
|
25
|
+
dependencies: dependencies
|
26
|
+
)
|
data/tracks/swift/README.md
CHANGED
@@ -8,7 +8,7 @@ Please see the [contributing guide](https://github.com/exercism/x-api/blob/maste
|
|
8
8
|
|
9
9
|
## Swift Track
|
10
10
|
|
11
|
-
We use Travis CI to automatically run all the unit tests on the code that is going to be checked in. In addition we also have [SwiftLint](https://github.com/realm/SwiftLint) set up to make sure that the code is consistent across all exercises. Please run `swiftlint autocorrect --format` on your code before submitting a PR.
|
11
|
+
We use Travis CI to automatically run all the unit tests on the code that is going to be checked in. In addition we also have [SwiftLint](https://github.com/realm/SwiftLint) set up to make sure that the code is consistent across all exercises. Please run `swiftlint autocorrect --format` on your code before submitting a PR. Check the travis file to see which version of swift we are testing against. Make sure all the tests pass locally using the swift package manager. Keep in mind that we support Linux so the tests need to also pass on linux on Travis.
|
12
12
|
|
13
13
|
## License
|
14
14
|
|
data/tracks/swift/docs/ABOUT.md
CHANGED
@@ -1 +1,9 @@
|
|
1
|
-
|
1
|
+
Swift is a modern open source programming language that runs primarily on macOS and Linux. Swift was developed initially by Apple to interoperate with their key frameworks, Cocoa and CocoaTouch, both of which are mostly implemented in Objective-C.
|
2
|
+
|
3
|
+
Swift is influenced by a large number of existing programming languages, and it incorporates concepts from a wide range of programming methods, everything from scripting to object oriented and functional programming. Apple refers to Swift as a protocol oriented programming language and has expressed the goal of eventually making Swift useful for everything from scripts to an operating system.
|
4
|
+
|
5
|
+
This [Swift Tour](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/GuidedTour.html) is an introduction the language.
|
6
|
+
|
7
|
+
A [deeper overview](https://en.wikipedia.org/wiki/Swift_(programming_language)) of Swift from Wikipedia.
|
8
|
+
|
9
|
+
Swift is documented in [The Swift Programming Language](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/index.html) and in the [iBooks Store](https://itunes.apple.com/us/book/swift-programming-language/id881256329?mt=11). The ePub is also available on [Swift.org](https://swift.org/documentation/#the-swift-programming-language).
|
@@ -1,9 +1,17 @@
|
|
1
1
|
## Installing Swift
|
2
2
|
|
3
|
-
|
3
|
+
### macOS
|
4
|
+
|
5
|
+
In order to use the Swift exercises, install Xcode version 8.0 or greater. On the first launch of Xcode, install the command line tools when prompted.
|
4
6
|
|
5
7
|
The current release version is available at the [Mac App Store](https://itunes.apple.com/us/app/xcode/id497799835?mt=12).
|
6
8
|
|
7
9
|
Additional versions of Xcode (including the most recent beta) are available at [Apple's developer center](https://developer.apple.com/xcode/downloads/).
|
8
10
|
|
9
|
-
All exercises tested with Xcode 8.0 using Swift 3
|
11
|
+
All exercises have been tested with Xcode 8.0 using Swift 3.
|
12
|
+
|
13
|
+
### Linux
|
14
|
+
|
15
|
+
The latest release is available on [Swift.org](https://swift.org/download/#releases).
|
16
|
+
|
17
|
+
Swift.org installation [instructions](https://swift.org/getting-started/#installing-swift).
|
data/tracks/swift/docs/TESTS.md
CHANGED
@@ -1,120 +1,85 @@
|
|
1
|
-
##
|
1
|
+
## Testing Tutorial
|
2
2
|
|
3
|
-
This guide explains how to
|
3
|
+
This guide explains how to run unit tests for the Exercism Swift exercises using either macOS or Linux.
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
### For experienced users:
|
6
|
+
1. `swift test` runs tests
|
7
|
+
2. `swift package generate-xcodeproj` creates an Xcode project
|
8
|
+
|
9
|
+
To run the tests from the command line, first `cd` to the directory for an exercise (for example, ~/exercism/swift/exercises/hello-world/), then execute `swift test`. This will compile the files in the Sources directory and execute the tests in the Tests directory. Alternatively, open the Xcode project and press Command-U.
|
10
10
|
|
11
11
|
### Overview
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
* **Swift Source** (HelloWorld.swift). This is the file you will create to hold your source code and it is the file you will submit to Exercism.
|
16
|
-
* **Test Source** (HelloWorldTest.swift). This file is provided by Exercism. It contains the XCTestCase subclass that defines the solution to the exercise. You never edit this file, but you will have to understand it in order to fulfill its expectations. This is also the file where you will trigger the tests and interpret the results.
|
17
|
-
* **Playground** (MyPlayground.playground) is a scratchpad for drafting code snippets and playing with ideas. The code executes as you type, providing instant feedback.
|
18
|
-
|
19
|
-
When you reach the end of this tutorial, the file inspector in Xcode will look like this.
|
20
|
-
|
21
|
-
![tests_011-finalLayoutExample](/docs/img/tests_011-finalLayoutExample.png)
|
22
|
-
|
23
|
-
### Create A New Xcode Project
|
13
|
+
The following instructions are written with the expectation that some readers will be very new to test driven development, Exercism, or Xcode. Each step is described in detail.
|
24
14
|
|
25
|
-
|
15
|
+
**macOS users are encouraged to use Xcode.** The Xcode environment provides detailed error messages compared to those available from the command line.
|
26
16
|
|
27
|
-
|
28
|
-
2. Select macOS from the row of buttons at the top of the dialog, then choose the Cocoa Application icon as shown in this image:
|
17
|
+
Exercism uses the [Swift Package Manager](https://github.com/apple/swift-package-manager/tree/master/Documentation) to package files and tests for Swift. Packages provide a complete set of source files that can be compiled and executed from the command line.
|
29
18
|
|
30
|
-
|
19
|
+
To complete an Exercism exercise, you will work primarily with two files:
|
31
20
|
|
32
|
-
|
33
|
-
|
21
|
+
* **Swift Source** (hello-world/Sources/HelloWorld.swift). This is the code file you will submit to Exercism.
|
22
|
+
* **Test Source** (hello-world/Tests/HelloWorldTests/HelloWorldTest.swift). This file is provided by Exercism which contains the XCTestCase subclass that defines the solution to the exercise. You never edit this file, but you will have to understand it in order to fulfill its expectations.
|
34
23
|
|
35
|
-
|
36
|
-
2. Fill in the Organization Name and Bundle Identifier. The Organization Name field will appear in each source file you create. The Bundle Identifier is not used in this context but should not be left blank.
|
37
|
-
3. The Language popup should be Swift, the Include Unit Tests checkbox should be selected. All other checkboxes should be deselected.
|
24
|
+
Optionally, Xcode can create a third file for experimentation:
|
38
25
|
|
39
|
-
|
40
|
-
![tests_004-saveproject](/docs/img/tests_004-saveProject.jpg)
|
41
|
-
|
42
|
-
1. Choose a location to save the project. Anywhere is fine, but a good choice is inside the root folder of the current exercise.
|
43
|
-
2. In this example, the Exercism CLI fetched an exercise into a newly created root folder named `hello-world`. The fetched contents include a readme file `README.md` and a Test Source file `HelloWorldTest.swift`.
|
44
|
-
3. Create your project as shown in the above image, inside the root folder `hello-world`.
|
45
|
-
4. The contents displayed inside the Xcode File Inspector do not match the arrangement of the files on the disk. This is confusing at first, but it makes sense as projects become more complex. You will need a general idea of how the layout is different in order to import files later in this tutorial. If you switch to the Finder to explore the file hierarchy now, the files on disk should look like the image below. Essentially Xcode added a new project folder named `HelloWorld` (highlighted) to the root folder `hello-world`.
|
46
|
-
|
47
|
-
![tests_005-folderlayout](/docs/img/tests_005-folderLayout.png)
|
48
|
-
|
49
|
-
#### Configure the Initial Files in the Project
|
50
|
-
|
51
|
-
At this point the project's file inspector should look similar to the image on the left. If the `HelloWorldTests` folder is closed, click on the disclosure triangle to reveal its contents. Many of these files are not needed, so let's move them out of the way.
|
52
|
-
|
53
|
-
![tests_006-newprojectinitial](/docs/img/tests_006-newProjectInitial.jpg)
|
26
|
+
* **Playground** (MyPlayground.playground) is a scratchpad for drafting code snippets and playing with ideas. The code executes as you type, providing instant feedback.
|
54
27
|
|
55
|
-
1. Create a new group folder 'Support' inside the main group then drag the unused files into it. As with many tasks in Xcode, there is a shortcut. In this case you could also Command-Click to select all the unneeded files, and choose `File -> New -> Group from Selection` from the contextual menu.
|
56
|
-
2. Look at the image above on the right, note the file `HelloWorldTests.swift`. This file was provided by Xcode. Because Exercism supplies its own test file - often with a similar name - the default Xcode file is unnecessary and should be deleted. To delete the file, select it in the File Inspector and press the Delete key. In the confirmation dialog that appears, move the file to the trash.
|
57
|
-
3. Next, create a new playground document. First, make sure to select the topmost item in the File Inspector, the item marked with a blue icon that represents the project file.
|
58
|
-
4. Xcode provides several different options to create a new playground, including one called New Playground. However, in order for this step to work properly follow this exactly: press Command-N and choose Playground from the template chooser. Click Next, and click Create.
|
59
28
|
|
60
|
-
|
29
|
+
### Configuring Xcode
|
30
|
+
1. `cd` to the directory for an exercise (for example, ~/exercism/swift/exercises/hello-world/), then execute `swift package generate-xcodeproj` in the Terminal. This creates an Xcode project in the current directory with the same name as the package. (The generated project file is ideal for unit tests, as it does not include overhead such as launching the iOS simulator or a target application.)
|
31
|
+
2. Open the newly generated project file.
|
32
|
+
3. At this point the project's file inspector should look similar to the following image. If the `HelloWorldTests` folder is closed, click on the disclosure triangle to reveal its contents.
|
33
|
+
4. The items Package.swift, Configs, and Products are boilerplate that do not need modification.
|
61
34
|
|
62
|
-
![
|
35
|
+
![file inspector](img/file-inspector.png)
|
63
36
|
|
64
|
-
|
37
|
+
### Running Tests with Xcode
|
65
38
|
|
66
|
-
|
39
|
+
Select the test file from the file inspector. You can trigger tests by clicking on one of the diamonds in the gutter of the Tests Source file. The diamond next to the class definition will run all the tests, whereas the diamond next to each individual test will run only that test.
|
67
40
|
|
68
|
-
|
69
|
-
2. Near the bottom of the Save As dialog that appears next, set the Group to `HelloWorld` and select only `HelloWorld` from the Targets list.
|
70
|
-
3. The filename is up to you and can be changed later. The project name, `HelloWorld`, is a good first choice. By convention Swift classes and structs begin with a capital letter, so their source files should as well.
|
71
|
-
4. Click Create. **Note this is the file you will submit to the Exercism web site for review.**
|
41
|
+
![tests](img/tests.png)
|
72
42
|
|
73
|
-
|
43
|
+
Tests can also be invoked with Command-U, from the Test Inspector (Command-5), or from the sub-menu under the play button in the top bar. Red errors are normal at this stage.
|
74
44
|
|
75
|
-
|
45
|
+
![failing tests](img/tests-fail.png)
|
76
46
|
|
77
|
-
|
47
|
+
Once all the tests are marked with a green icon, congratulations, you have successfully completed the exercise! Now submit it to the Exercism website for review. If you are impossibly stuck, submit the exercise before it is complete to view how other users solved the exercise.
|
78
48
|
|
79
|
-
![
|
49
|
+
![passing tests](img/tests-pass.png)
|
80
50
|
|
81
|
-
|
51
|
+
*The Hello-World exercise is a very simple coding problem, but the complexity of Xcode can make even simple exercises complex. We can ignore most of this complexity, because we only need to edit one file. You can always regenerate the Xcode project if something goes wrong.*
|
82
52
|
|
83
|
-
|
53
|
+
### Xcode Playgrounds
|
84
54
|
|
85
|
-
|
55
|
+
Playgrounds can be useful for brainstorming solutions to the problem. The playground continuously evaluates code as you type, displaying variable states and results as you type.
|
86
56
|
|
87
|
-
|
57
|
+
If you generated an Xcode project, follow these steps:
|
88
58
|
|
89
|
-
|
59
|
+
1. First, make sure to select the topmost item in the File Inspector, the item marked with a blue icon that represents the project file.
|
60
|
+
2. Press Command-N and choose Playground from the template chooser. Click Next, and click Create.
|
90
61
|
|
91
|
-
|
92
|
-
* **HelloWorldTest.swift** is the Test Source code file provided by Exercism. It contains the tests that define the exercise.
|
93
|
-
* **MyPlayground.playground** is for drafting code snippets and playing with ideas.
|
62
|
+
Keep in mind that while playgrounds are useful for drafting code snippets and ideas, code must be moved to the Swift Source file for testing and submission.
|
94
63
|
|
95
64
|
### How Tests Are Used
|
96
65
|
|
97
|
-
Test driven development is a very iterative process. The first step is to successfully run the tests
|
98
|
-
|
99
|
-
One approach begins with creating a method that returns a correct hard coded value to at least the first test in order for the project to compile. This should confirm that Xcode is passing values between the code and tests properly. Next, create code that generates the expected return value and test again. Keep repeating this basic cycle until all the tests pass.
|
100
|
-
|
101
|
-
#### Running The Tests
|
102
|
-
|
103
|
-
Trigger a test by clicking on one of the diamonds in the gutter of the Tests Source file. The diamond next to the class definition will run all the tests, whereas the diamond next to each individual test will run only that test.
|
104
|
-
|
105
|
-
Tests can also be invoked with Command-U, or from the Test Inspector (Command-5).
|
66
|
+
Test driven development is a very iterative process. The first step is to successfully run the tests and have them fail. Remember that the exercise can be solved with code in the application source file alone. Enter your solution into the Swift Source file. Xcode will continuously update the display with errors that highlight code that will not compile.
|
106
67
|
|
107
|
-
|
108
|
-
|
109
|
-
*The Hello-World exercise is a very simple coding problem, but the complexity of Xcode can make even simple exercises challenging. If creating a working solution is problematic, the issue may be with how the project is configured. Consider submitting the unfinished exercise to obtain a solution. Then try repeating this tutorial from the beginning with a fresh Xcode project.*
|
68
|
+
One approach begins with "sliming a test" by creating a method that returns a correct hard coded value. Sliming will confirm the project can compile and pass one test. Next, replace the hard coded value with code that generates the expected return value and test again. Keep repeating this cycle until all the tests pass.
|
110
69
|
|
111
|
-
|
70
|
+
## Submission
|
112
71
|
|
113
72
|
1. In the Terminal, navigate to the folder that contains the application source file. In this example, the path would be `~/exercism/swift/hello-world/HelloWorld/HelloWorld/`
|
114
73
|
2. To submit, type `exercism submit HelloWorld.swift` (_Alternatively, you can submit by using the file name with the full path from any directory. A second alternative is to locate the file you need to submit in the Finder. Open the Terminal, type exercism submit followed by a space, then drag the file from the Finder into the Terminal and press return._)
|
115
74
|
3. Once uploaded, a URL will appear that reveals your solution on the Exercism web site.
|
116
75
|
4. The Exercism CLI allows files to be submitted more than once, and each successive iteration will be added alongside the original.
|
117
76
|
|
77
|
+
To review:
|
78
|
+
|
79
|
+
* **HelloWorld.swift** is the Swift Source code file where you code the solution and later submit it to Exercism.
|
80
|
+
* **HelloWorldTest.swift** is the Test Source code file provided by Exercism. It contains the tests that define the exercise.
|
81
|
+
* **MyPlayground.playground** is for drafting code snippets and playing with ideas.
|
82
|
+
|
118
83
|
### Participate in Code Reviews
|
119
84
|
|
120
85
|
After you submit a file, follow the URL presented to show the submission on the web. Bookmark it for future reference. From your submission page you can view how others solved the same problem.
|
@@ -123,7 +88,7 @@ After you submit a file, follow the URL presented to show the submission on the
|
|
123
88
|
|
124
89
|
XCTestCase is the XCTest subclass that contains the test's methods and XCTAssert lines are the expected results. The results are different types depending on how the test is designed.
|
125
90
|
|
126
|
-
There is a lot more to learn more about Test Driven Development, XCTAssert Methods and XCTestCase. Unfortunately up-to-date Swift documentation on these topics is short-lived. Although out of date as of when this tutorial was last updated, this
|
91
|
+
There is a lot more to learn more about Test Driven Development, XCTAssert Methods and XCTestCase. Unfortunately up-to-date Swift documentation on these topics is short-lived. Although out of date as of when this tutorial was last updated, this list of sources contains useful information:
|
127
92
|
|
128
93
|
[Apple's Guide on XCTest](https://developer.apple.com/library/tvos/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/02-quick_start.html#//apple_ref/doc/uid/TP40014132-CH2-SW1)
|
129
94
|
|