├── .gitignore
├── Angular-React
├── README.md
└── lets-do-it
│ ├── .babelrc
│ ├── .nvmrc
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ └── index.ejs
│ ├── src
│ ├── components
│ │ ├── app
│ │ │ ├── index.js
│ │ │ └── template.html
│ │ ├── input-task
│ │ │ ├── index.js
│ │ │ └── template.html
│ │ ├── task-item
│ │ │ ├── index.js
│ │ │ └── template.html
│ │ └── task-list
│ │ │ ├── index.js
│ │ │ └── template.html
│ └── index.js
│ └── webpack.config.js
├── README.md
├── arduino-mocha
├── .nvmrc
├── README.md
├── arduino.js
├── my-report.js
├── package.json
├── setup.js
└── test.js
├── bowling-game
├── README.md
└── tabcorp
│ ├── 17-05-2017
│ ├── .nvmrc
│ ├── README.md
│ ├── package.json
│ └── test.js
│ └── 31-05-2017
│ ├── .nvmrc
│ ├── README.md
│ ├── package.json
│ └── test.js
├── counter-react
├── README.md
└── index.html
├── equal-sides-of-an-array
├── README.md
├── package.json
└── test.js
├── es6-promise
├── .nvmrc
├── 1-basics.js
├── 2-creation.js
├── 3-chaining.js
├── 4-api.js
├── 5-catch.js
├── README.md
└── package.json
├── from-callback-to-promise
└── README.md
├── game-of-life
├── README.md
└── oneflare
│ ├── .gitignore
│ ├── .rspec
│ ├── .ruby-version
│ ├── Gemfile
│ ├── Gemfile.lock
│ ├── README.md
│ ├── Rakefile
│ └── game_of_life.rb
├── gilded-rose-refactoring-kata
├── GildedRoseRequirements.txt
├── README.md
├── license.txt
├── sbs
│ ├── README.md
│ ├── SpecRunner.html
│ ├── TexttestFixture.html
│ ├── lib
│ │ ├── jasmine-1.1.0
│ │ │ ├── MIT.LICENSE
│ │ │ ├── jasmine-html.js
│ │ │ ├── jasmine.css
│ │ │ ├── jasmine.js
│ │ │ └── jasmine_favicon.png
│ │ ├── jasmine-ajax
│ │ │ └── mock-ajax.js
│ │ ├── jasmine-jquery-1.3.1
│ │ │ └── jasmine-jquery-1.3.1.js
│ │ └── jquery-1.7.1
│ │ │ └── jquery-1.7.1.js
│ ├── spec
│ │ └── gilded_rose_spec.js
│ └── src
│ │ └── gilded_rose.js
└── tabcorp
│ ├── README.md
│ ├── TexttestFixture.html
│ ├── index.html
│ ├── lib
│ ├── jasmine-1.1.0
│ │ ├── MIT.LICENSE
│ │ ├── jasmine-html.js
│ │ ├── jasmine.css
│ │ ├── jasmine.js
│ │ └── jasmine_favicon.png
│ ├── jasmine-ajax
│ │ └── mock-ajax.js
│ ├── jasmine-jquery-1.3.1
│ │ └── jasmine-jquery-1.3.1.js
│ └── jquery-1.7.1
│ │ └── jquery-1.7.1.js
│ ├── spec
│ └── gilded_rose_spec.js
│ └── src
│ └── gilded_rose.js
├── microfrontends
├── README.md
└── tabcorp
│ ├── .gitignore
│ ├── README.md
│ ├── cart
│ ├── .dockerignore
│ ├── .gitignore
│ ├── Dockerfile
│ ├── Main.elm
│ ├── bootstrap.js
│ ├── build.sh
│ ├── elm-package.json
│ ├── index.html
│ ├── package-lock.json
│ └── package.json
│ ├── header
│ ├── .babelrc
│ ├── .dockerignore
│ ├── .gitignore
│ ├── Dockerfile
│ ├── README.md
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ └── manifest.json
│ ├── server.js
│ └── src
│ │ ├── App.css
│ │ ├── App.js
│ │ ├── App.test.js
│ │ ├── index.css
│ │ ├── index.js
│ │ ├── logo.svg
│ │ └── registerServiceWorker.js
│ ├── homepage
│ ├── package-lock.json
│ ├── package.json
│ ├── server.js
│ └── views
│ │ └── index.ejs
│ └── products-list
│ ├── .dockerignore
│ ├── .gitignore
│ ├── Dockerfile
│ ├── README.md
│ ├── config
│ ├── env.js
│ ├── jest
│ │ ├── cssTransform.js
│ │ └── fileTransform.js
│ ├── paths.js
│ ├── polyfills.js
│ ├── webpack.config.dev.js
│ └── webpack.config.prod.js
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ ├── favicon.ico
│ └── index.html
│ ├── scripts
│ ├── build.js
│ ├── start.js
│ └── test.js
│ ├── server.js
│ └── src
│ ├── App.css
│ ├── App.js
│ ├── App.test.js
│ ├── index.css
│ ├── index.js
│ └── logo.svg
├── racing-car-katas
├── README.md
├── exercises
│ ├── CSharp
│ │ ├── LeaderBoard
│ │ │ ├── Driver.cs
│ │ │ ├── Leaderboard.cs
│ │ │ ├── Race.cs
│ │ │ └── SelfDrivingCar.cs
│ │ ├── Leaderboard.Tests
│ │ │ ├── LeaderboardTest.cs
│ │ │ ├── RaceTest.cs
│ │ │ └── TestData.cs
│ │ ├── TDDMicroExercises.csproj
│ │ ├── TDDMicroExercises.sln
│ │ ├── TelemetrySystem.Tests
│ │ │ └── TelemetryDiagnosticControlsTest.cs
│ │ ├── TelemetrySystem
│ │ │ ├── TelemetryClient.cs
│ │ │ └── TelemetryDiagnosticControls.cs
│ │ ├── TirePressureMonitoringSystem.Tests
│ │ │ └── AlarmTest.cs
│ │ ├── TirePressureMonitoringSystem
│ │ │ ├── Alarm.cs
│ │ │ └── Sensor.cs
│ │ ├── TurnTicketDispenser
│ │ │ ├── TicketDispenser.cs
│ │ │ ├── TurnNumberSequence.cs
│ │ │ └── TurnTicket.cs
│ │ ├── UnicodeFileToHtmlTextConverter.Tests
│ │ │ └── UnicodeFileToHtmlTextConverterTest.cs
│ │ ├── UnicodeFileToHtmlTextConverter
│ │ │ └── UnicodeFileToHtmlTextConverter.cs
│ │ └── packages.config
│ ├── Cpp
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── Source
│ │ │ ├── CMakeLists.txt
│ │ │ ├── CMakeModules
│ │ │ │ └── FindCppUnit.cmake
│ │ │ ├── LeaderBoard.Test
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── include
│ │ │ │ │ └── TestData.h
│ │ │ │ └── source
│ │ │ │ │ ├── LeaderBoardTest.cpp
│ │ │ │ │ ├── RaceTest.cpp
│ │ │ │ │ ├── TestData.cpp
│ │ │ │ │ └── main.cpp
│ │ │ ├── LeaderBoard
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── include
│ │ │ │ │ ├── Driver.h
│ │ │ │ │ ├── LeaderBoard.h
│ │ │ │ │ ├── Race.h
│ │ │ │ │ └── SelfDrivingCar.h
│ │ │ │ └── source
│ │ │ │ │ ├── Driver.cpp
│ │ │ │ │ ├── LeaderBoard.cpp
│ │ │ │ │ ├── Race.cpp
│ │ │ │ │ └── SelfDrivingCar.cpp
│ │ │ ├── TelemetrySystem.Test
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ └── source
│ │ │ │ │ ├── TelemetryDiagnosticControlsTest.cpp
│ │ │ │ │ └── main.cpp
│ │ │ ├── TelemetrySystem
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── include
│ │ │ │ │ ├── TelemetryClient.h
│ │ │ │ │ └── TelemetryDiagnosticControls.h
│ │ │ │ └── source
│ │ │ │ │ ├── TelemetryClient.cpp
│ │ │ │ │ └── TelemetryDiagnosticControls.cpp
│ │ │ ├── TextConverter.Test
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ └── source
│ │ │ │ │ ├── HtmlPagesConverterTest.cpp
│ │ │ │ │ ├── HtmlTextConverterTest.cpp
│ │ │ │ │ └── main.cpp
│ │ │ ├── TextConverter
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── include
│ │ │ │ │ ├── HtmlPagesConverter.h
│ │ │ │ │ ├── HtmlTextConverter.h
│ │ │ │ │ └── StringEscapeUtils.h
│ │ │ │ └── source
│ │ │ │ │ ├── HtmlPagesConverter.cpp
│ │ │ │ │ └── HtmlTextConverter.cpp
│ │ │ ├── TirePressureMonitoring.Test
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ └── source
│ │ │ │ │ ├── AlarmTest.cpp
│ │ │ │ │ └── main.cpp
│ │ │ ├── TirePressureMonitoring
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── include
│ │ │ │ │ ├── Alarm.h
│ │ │ │ │ └── Sensor.h
│ │ │ │ └── source
│ │ │ │ │ ├── Alarm.cpp
│ │ │ │ │ └── Sensor.cpp
│ │ │ ├── TurnTicketDispenser.Test
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ └── source
│ │ │ │ │ ├── TurnTicketDispenserTest.cpp
│ │ │ │ │ └── main.cpp
│ │ │ └── TurnTicketDispenser
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── include
│ │ │ │ ├── TicketDispenser.h
│ │ │ │ ├── TurnNumberSequence.h
│ │ │ │ └── TurnTicket.h
│ │ │ │ └── source
│ │ │ │ ├── TicketDispenser.cpp
│ │ │ │ ├── TurnNumberSequence.cpp
│ │ │ │ └── TurnTicket.cpp
│ │ ├── cmake_version
│ │ │ └── Source
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── CMakeModules
│ │ │ │ └── FindCppUnit.cmake
│ │ │ │ ├── LeaderBoard.Test
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── include
│ │ │ │ │ └── TestData.h
│ │ │ │ └── source
│ │ │ │ │ ├── LeaderBoardTest.cpp
│ │ │ │ │ ├── RaceTest.cpp
│ │ │ │ │ ├── TestData.cpp
│ │ │ │ │ └── main.cpp
│ │ │ │ ├── LeaderBoard
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── include
│ │ │ │ │ ├── Driver.h
│ │ │ │ │ ├── LeaderBoard.h
│ │ │ │ │ ├── Race.h
│ │ │ │ │ └── SelfDrivingCar.h
│ │ │ │ └── source
│ │ │ │ │ ├── Driver.cpp
│ │ │ │ │ ├── LeaderBoard.cpp
│ │ │ │ │ ├── Race.cpp
│ │ │ │ │ └── SelfDrivingCar.cpp
│ │ │ │ ├── TelemetrySystem.Test
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ └── source
│ │ │ │ │ ├── TelemetryDiagnosticControlsTest.cpp
│ │ │ │ │ └── main.cpp
│ │ │ │ ├── TelemetrySystem
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── include
│ │ │ │ │ ├── TelemetryClient.h
│ │ │ │ │ └── TelemetryDiagnosticControls.h
│ │ │ │ └── source
│ │ │ │ │ ├── TelemetryClient.cpp
│ │ │ │ │ └── TelemetryDiagnosticControls.cpp
│ │ │ │ ├── TextConverter.Test
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ └── source
│ │ │ │ │ ├── HtmlPagesConverterTest.cpp
│ │ │ │ │ ├── HtmlTextConverterTest.cpp
│ │ │ │ │ └── main.cpp
│ │ │ │ ├── TextConverter
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── include
│ │ │ │ │ ├── HtmlPagesConverter.h
│ │ │ │ │ ├── HtmlTextConverter.h
│ │ │ │ │ └── StringEscapeUtils.h
│ │ │ │ └── source
│ │ │ │ │ ├── HtmlPagesConverter.cpp
│ │ │ │ │ └── HtmlTextConverter.cpp
│ │ │ │ ├── TirePressureMonitoring.Test
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ └── source
│ │ │ │ │ ├── AlarmTest.cpp
│ │ │ │ │ └── main.cpp
│ │ │ │ ├── TirePressureMonitoring
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── include
│ │ │ │ │ ├── Alarm.h
│ │ │ │ │ └── Sensor.h
│ │ │ │ └── source
│ │ │ │ │ ├── Alarm.cpp
│ │ │ │ │ └── Sensor.cpp
│ │ │ │ ├── TurnTicketDispenser.Test
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ └── source
│ │ │ │ │ ├── TurnTicketDispenserTest.cpp
│ │ │ │ │ └── main.cpp
│ │ │ │ └── TurnTicketDispenser
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── include
│ │ │ │ ├── TicketDispenser.h
│ │ │ │ ├── TurnNumberSequence.h
│ │ │ │ └── TurnTicket.h
│ │ │ │ └── source
│ │ │ │ ├── TicketDispenser.cpp
│ │ │ │ ├── TurnNumberSequence.cpp
│ │ │ │ └── TurnTicket.cpp
│ │ ├── gmock_version
│ │ │ ├── textconverter
│ │ │ │ ├── HtmlTextConverter.cpp
│ │ │ │ ├── HtmlTextConverter.hpp
│ │ │ │ ├── HtmlTextConverter.tests.cpp
│ │ │ │ ├── StreamConverter.cpp
│ │ │ │ ├── StreamConverter.hpp
│ │ │ │ ├── StreamConverter.tests.cpp
│ │ │ │ ├── StringEscapeUtils.hpp
│ │ │ │ ├── foo.txt
│ │ │ │ ├── instructions.txt
│ │ │ │ ├── makefile
│ │ │ │ └── test
│ │ │ └── tyrepressure
│ │ │ │ ├── Alarm.cpp
│ │ │ │ ├── Alarm.hpp
│ │ │ │ ├── Alarm.tests.cpp
│ │ │ │ ├── PressureSensor.cpp
│ │ │ │ ├── PressureSensor.hpp
│ │ │ │ ├── Sensor.hpp
│ │ │ │ ├── StubSensor.hpp
│ │ │ │ ├── makefile
│ │ │ │ └── test
│ │ └── gtest_version
│ │ │ ├── leaderboard
│ │ │ ├── Driver.cpp
│ │ │ ├── Driver.hpp
│ │ │ ├── Leaderboard.cpp
│ │ │ ├── Leaderboard.hpp
│ │ │ ├── Leaderboard.tests.cpp
│ │ │ ├── Race.cpp
│ │ │ ├── Race.hpp
│ │ │ ├── Race.tests.cpp
│ │ │ ├── SelfDrivingCar.cpp
│ │ │ ├── SelfDrivingCar.hpp
│ │ │ ├── TestData.cpp
│ │ │ ├── TestData.hpp
│ │ │ └── makefile
│ │ │ ├── telemetrydiagnostics
│ │ │ ├── Telemetry.tests.cpp
│ │ │ ├── TelemetryClient.cpp
│ │ │ ├── TelemetryClient.hpp
│ │ │ ├── TelemetryDiagnosticControls.cpp
│ │ │ ├── TelemetryDiagnosticControls.hpp
│ │ │ └── makefile
│ │ │ ├── textconverter
│ │ │ ├── HtmlTextConverter.cpp
│ │ │ ├── HtmlTextConverter.hpp
│ │ │ ├── HtmlTextConverter.tests.cpp
│ │ │ ├── StringEscapeUtils.hpp
│ │ │ └── makefile
│ │ │ ├── turnticket
│ │ │ ├── TicketDispenser.cpp
│ │ │ ├── TicketDispenser.hpp
│ │ │ ├── TicketDispenser.tests.cpp
│ │ │ ├── TurnNumberSequence.cpp
│ │ │ ├── TurnNumberSequence.hpp
│ │ │ ├── TurnTicket.cpp
│ │ │ ├── TurnTicket.hpp
│ │ │ └── makefile
│ │ │ └── tyrepressure
│ │ │ ├── Alarm.cpp
│ │ │ ├── Alarm.hpp
│ │ │ ├── Alarm.tests.cpp
│ │ │ ├── Sensor.cpp
│ │ │ ├── Sensor.hpp
│ │ │ └── makefile
│ ├── Java
│ │ ├── .gitignore
│ │ ├── Leaderboard
│ │ │ ├── pom.xml
│ │ │ └── src
│ │ │ │ ├── main
│ │ │ │ └── java
│ │ │ │ │ └── tddmicroexercises
│ │ │ │ │ └── leaderboard
│ │ │ │ │ ├── Driver.java
│ │ │ │ │ ├── Leaderboard.java
│ │ │ │ │ ├── Race.java
│ │ │ │ │ └── SelfDrivingCar.java
│ │ │ │ └── test
│ │ │ │ └── java
│ │ │ │ └── tddmicroexercises
│ │ │ │ └── leaderboard
│ │ │ │ ├── LeaderboardTest.java
│ │ │ │ ├── RaceTest.java
│ │ │ │ └── TestData.java
│ │ ├── TelemetrySystem
│ │ │ ├── pom.xml
│ │ │ └── src
│ │ │ │ ├── main
│ │ │ │ └── java
│ │ │ │ │ └── tddmicroexercises
│ │ │ │ │ └── telemetrysystem
│ │ │ │ │ ├── TelemetryClient.java
│ │ │ │ │ └── TelemetryDiagnosticControls.java
│ │ │ │ └── test
│ │ │ │ └── java
│ │ │ │ └── tddmicroexercises
│ │ │ │ └── telemetrysystem
│ │ │ │ └── TelemetryDiagnosticControlsTest.java
│ │ ├── TextConverter
│ │ │ ├── pom.xml
│ │ │ └── src
│ │ │ │ ├── main
│ │ │ │ └── java
│ │ │ │ │ └── tddmicroexercises
│ │ │ │ │ └── textconvertor
│ │ │ │ │ ├── HtmlPagesConverter.java
│ │ │ │ │ ├── HtmlTextConverter.java
│ │ │ │ │ └── StringEscapeUtils.java
│ │ │ │ └── test
│ │ │ │ └── java
│ │ │ │ └── tddmicroexercises
│ │ │ │ └── textconvertor
│ │ │ │ ├── HtmlPagesConverterTest.java
│ │ │ │ └── HtmlTextConverterTest.java
│ │ ├── TirePressureMonitoringSystem
│ │ │ ├── pom.xml
│ │ │ └── src
│ │ │ │ ├── main
│ │ │ │ └── java
│ │ │ │ │ └── tddmicroexercises
│ │ │ │ │ └── tirepressuremonitoringsystem
│ │ │ │ │ ├── Alarm.java
│ │ │ │ │ └── Sensor.java
│ │ │ │ └── test
│ │ │ │ └── java
│ │ │ │ └── tddmicroexercises
│ │ │ │ └── tirepressuremonitoringsystem
│ │ │ │ └── TestAlarm.java
│ │ └── TurnTicketDispenser
│ │ │ ├── pom.xml
│ │ │ └── src
│ │ │ └── main
│ │ │ └── java
│ │ │ └── tddmicroexercises
│ │ │ └── turnticketdispenser
│ │ │ ├── TicketDispenser.java
│ │ │ ├── TurnNumberSequence.java
│ │ │ └── TurnTicket.java
│ ├── Javascript
│ │ ├── .gitignore
│ │ ├── lib
│ │ │ ├── .gitignore
│ │ │ ├── jasmine-html.js
│ │ │ ├── jasmine.css
│ │ │ ├── jasmine.js
│ │ │ └── jsfake.js
│ │ ├── spec.runner.html
│ │ ├── telemetry-system-tests
│ │ │ └── telemetry-diagnostic-controls-test.js
│ │ ├── telemetry-system
│ │ │ ├── telemetry-client.js
│ │ │ └── telemetry-diagnostic-controls.js
│ │ ├── tire-pressure-monitoring-system-tests
│ │ │ └── alarm-test.js
│ │ ├── tire-pressure-monitoring-system
│ │ │ ├── alarm.js
│ │ │ └── sensor.js
│ │ ├── turn-ticket-dispenser-tests
│ │ │ └── ticket-dispenser-test.js
│ │ ├── turn-ticket-dispenser
│ │ │ ├── ticket-dispenser.js
│ │ │ ├── turn-number-sequence.js
│ │ │ └── turn-ticket.js
│ │ ├── unicode-file-to-html-text-converter-tests
│ │ │ └── unicode-file-to-html-text-converter-test.js
│ │ └── unicode-file-to-html-text-converter
│ │ │ └── unicode-file-to-html-text-converter.js
│ ├── Python
│ │ ├── Leaderboard
│ │ │ ├── leaderboard.py
│ │ │ └── test_leaderboard.py
│ │ ├── TelemetrySystem
│ │ │ ├── client.py
│ │ │ ├── telemetry.py
│ │ │ └── test_telemetry.py
│ │ ├── TextConverter
│ │ │ ├── html_pages.py
│ │ │ ├── test_text_converter.py
│ │ │ └── text_converter.py
│ │ ├── TirePressureMonitoringSystem
│ │ │ ├── sensor.py
│ │ │ ├── test_tire_pressure_monitoring.py
│ │ │ └── tire_pressure_monitoring.py
│ │ └── TurnTicketDispenser
│ │ │ ├── test_turn_ticket.py
│ │ │ └── turn_ticket.py
│ ├── Ruby
│ │ ├── Gemfile
│ │ ├── Gemfile.lock
│ │ ├── LeaderBoard
│ │ │ ├── leader_board.rb
│ │ │ └── spec
│ │ │ │ └── leader_board_spec.rb
│ │ ├── TelemetrySystem
│ │ │ ├── client.rb
│ │ │ ├── spec
│ │ │ │ └── telemetry_diagnostics_spec.rb
│ │ │ └── telemetry.rb
│ │ ├── TextConverter
│ │ │ ├── html_pages.rb
│ │ │ ├── spec
│ │ │ │ └── text_converter_spec.rb
│ │ │ └── text_converter.rb
│ │ ├── TirePressure
│ │ │ ├── test_tire_pressure.rb
│ │ │ └── tire_pressure.rb
│ │ └── TurnTicketDispenser
│ │ │ ├── spec
│ │ │ └── turn_ticket_spec.rb
│ │ │ └── turn_ticket.rb
│ └── scala
│ │ ├── build.sbt
│ │ └── src
│ │ ├── main
│ │ └── scala
│ │ │ └── tddmicroexercises
│ │ │ ├── leaderboard
│ │ │ ├── Driver.scala
│ │ │ ├── Leaderboard.scala
│ │ │ └── Race.scala
│ │ │ ├── textconvertor
│ │ │ ├── HtmlPagesConverter.scala
│ │ │ ├── HtmlTextConverter.scala
│ │ │ └── StringEscapeUtils.scala
│ │ │ ├── tirepressuremonitoringsystem
│ │ │ ├── Alarm.scala
│ │ │ └── Sensor.scala
│ │ │ └── turnticketdispenser
│ │ │ ├── TicketDispenser.scala
│ │ │ ├── TurnNumberSequence.scala
│ │ │ └── TurnTicket.scala
│ │ └── test
│ │ └── scala
│ │ └── tddmicroexercises
│ │ ├── leaderboard
│ │ └── LeaderboardSpec.scala
│ │ ├── textconvertor
│ │ ├── HtmlPagesConverterTest.scala
│ │ └── HtmlTextConverterTest.scala
│ │ └── tirepressuremonitoringsystem
│ │ └── TestAlarm.scala
├── license.txt
└── tabcorp
│ ├── README.md
│ ├── lib
│ ├── .gitignore
│ ├── jasmine-html.js
│ ├── jasmine.css
│ ├── jasmine.js
│ └── jsfake.js
│ ├── spec.runner.html
│ ├── tire-pressure-monitoring-system-tests
│ └── alarm-test.js
│ ├── tire-pressure-monitoring-system
│ ├── alarm.js
│ └── sensor.js
│ ├── turn-ticket-dispenser-tests
│ └── ticket-dispenser-test.js
│ ├── turn-ticket-dispenser
│ ├── ticket-dispenser.js
│ ├── turn-number-sequence.js
│ └── turn-ticket.js
│ ├── unicode-file-to-html-text-converter-tests
│ └── unicode-file-to-html-text-converter-test.js
│ └── unicode-file-to-html-text-converter
│ └── unicode-file-to-html-text-converter.js
├── renovate.json
├── require-lint
└── README.md
├── revenge-of-the-pancakes
├── README.md
├── package.json
└── revenge-of-the-pancakes.js
├── roman-numerals
├── .nvmrc
├── README.md
├── package.json
└── test.js
├── tennis-refactoring-kata
├── .nvmrc
├── README.md
├── TennisGame1.js
├── TennisTest.html
└── TennisTest.js
└── warriorjs
├── README.md
└── tabcorp
├── README.md
├── package-lock.json
├── package.json
└── warriorjs
├── dojoer-beginner
├── .profile
├── Player.js
└── README
└── lethaldose-beginner
├── .profile
├── Player.js
└── README
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .DS_Store
3 |
--------------------------------------------------------------------------------
/Angular-React/README.md:
--------------------------------------------------------------------------------
1 | * **Format:** Mob Programming
2 | * **Kata:** Working with Redux in an Angular App
3 | * **Where:** [TabCorp](https://www.tabcorp.com.au/)
4 | * **When:** 15/11/2017
5 |
6 | ## Kata: Angular App with Redux
7 |
8 | ### Description:
9 | Use an Angular App for creating ToDo List and using the concepts of Redux, build on the logic and make it functional.
10 |
11 | ### Tech Specifications:
12 | - Uses Angular, Redux and Webpack
13 |
--------------------------------------------------------------------------------
/Angular-React/lets-do-it/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["env"],
3 | "plugins": [
4 | "transform-object-rest-spread",
5 | [
6 | "babel-plugin-webpack-alias",
7 | {
8 | "config": "./webpack.config.js"
9 | }
10 | ]
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/Angular-React/lets-do-it/.nvmrc:
--------------------------------------------------------------------------------
1 | 8.3.0
2 |
--------------------------------------------------------------------------------
/Angular-React/lets-do-it/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "lets-do-it",
3 | "version": "1.0.0",
4 | "description": "A Basic to do list app to learn angular with redux",
5 | "main": "./app/app.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "start": "webpack-dev-server"
9 | },
10 | "author": "",
11 | "license": "ISC",
12 | "dependencies": {
13 | "angular": "^1.6.6",
14 | "redux": "^4.0.0"
15 | },
16 | "devDependencies": {
17 | "babel-core": "6.26.3",
18 | "babel-loader": "8.0.5",
19 | "babel-plugin-transform-object-rest-spread": "6.26.0",
20 | "babel-plugin-webpack-alias": "2.1.2",
21 | "babel-preset-env": "1.7.0",
22 | "babel-preset-es2015": "6.24.1",
23 | "css-loader": "2.1.0",
24 | "extract-text-webpack-plugin": "3.0.2",
25 | "file-loader": "3.0.1",
26 | "html-webpack-plugin": "3.2.0",
27 | "raw-loader": "1.0.0",
28 | "resolve-url-loader": "3.0.0",
29 | "sass-loader": "7.1.0",
30 | "style-loader": "0.23.1",
31 | "webpack": "4.29.0",
32 | "webpack-dev-server": "3.1.14"
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/Angular-React/lets-do-it/public/index.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ';
15 | const renderedApp = renderToString(React.createElement(App, null));
16 |
17 | res.send(html.replace(rootElem, rootElem + renderedApp));
18 | });
19 | });
20 |
21 | server.use(express.static('build'));
22 |
23 | const port = process.env.PORT || 8080;
24 | server.listen(port, () => {
25 | console.log(`App listening on port ${port}`);
26 | });
27 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/header/src/App.css:
--------------------------------------------------------------------------------
1 | .App {
2 | text-align: center;
3 | }
4 |
5 | .App-logo {
6 | animation: App-logo-spin infinite 20s linear;
7 | height: 80px;
8 | }
9 |
10 | .App-header {
11 | background-color: #222;
12 | height: 150px;
13 | padding: 20px;
14 | color: white;
15 | }
16 |
17 | .App-intro {
18 | font-size: large;
19 | }
20 |
21 | @keyframes App-logo-spin {
22 | from { transform: rotate(0deg); }
23 | to { transform: rotate(360deg); }
24 | }
25 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/header/src/App.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | export default () =>
4 |
5 | Logo
6 |
12 | ;
13 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/header/src/App.test.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import App from './App';
4 |
5 | it('renders without crashing', () => {
6 | const div = document.createElement('div');
7 | ReactDOM.render(
, div);
8 | });
9 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/header/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | padding: 0;
4 | font-family: sans-serif;
5 | }
6 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/header/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import './index.css';
4 | import App from './App';
5 | import registerServiceWorker from './registerServiceWorker';
6 |
7 | ReactDOM.render(
, document.getElementById('root'));
8 | registerServiceWorker();
9 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/homepage/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "homepage",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "author": "",
10 | "license": "ISC",
11 | "dependencies": {
12 | "ejs": "^2.5.6",
13 | "express": "^4.15.3",
14 | "request": "^2.81.0"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/homepage/server.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const server = express();
3 | const request = require('request');
4 |
5 | server.set('view engine', 'ejs');
6 |
7 | server.get('/', (req, res) =>
8 | Promise.all([
9 | getContents('http://localhost:3002'),
10 | getContents('http://localhost:3001'),
11 | getContents('http://localhost:3000')
12 | ])
13 | .then(responses =>
14 | res.render('index', {
15 | header: responses[0],
16 | productsList: responses[1],
17 | cart: responses[2]
18 | })
19 | )
20 | .catch(error => res.send(error.message))
21 | );
22 |
23 | const getContents = url =>
24 | new Promise((resolve, reject) => {
25 | request.get(url, (error, response, body) => {
26 | if (error) return resolve('Error loading ' + url + ': ' + error.message);
27 |
28 | return resolve(body);
29 | });
30 | });
31 |
32 | const port = process.env.PORT || 8080;
33 | server.listen(port, () => {
34 | console.log(`Homepage listening on port ${port}`);
35 | });
36 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/homepage/views/index.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
Microfrontends Homepage
7 |
8 |
9 |
10 | <%- header %>
11 | <%- productsList %>
12 | <%- cart %>
13 |
14 |
15 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/products-list/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/products-list/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/ignore-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 |
6 | # testing
7 | /coverage
8 |
9 | # production
10 | /build
11 | /transpiled
12 |
13 | # misc
14 | .DS_Store
15 | .env
16 | npm-debug.log*
17 | yarn-debug.log*
18 | yarn-error.log*
19 |
20 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/products-list/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:latest@sha256:491424526a6556f7698c5d659b55f15d63b63a864c420a1f607d1a9d90b18a4a
2 |
3 | COPY package.json .
4 | RUN npm install
5 | COPY . .
6 |
7 | ENV PUBLIC_URL http://localhost:3002
8 |
9 | RUN npm run build
10 | RUN npm run transpile
11 |
12 | CMD PORT=$PORT npm run start:prod
13 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/products-list/config/jest/cssTransform.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | // This is a custom Jest transformer turning style imports into empty objects.
4 | // http://facebook.github.io/jest/docs/tutorial-webpack.html
5 |
6 | module.exports = {
7 | process() {
8 | return 'module.exports = {};';
9 | },
10 | getCacheKey() {
11 | // The output is always the same.
12 | return 'cssTransform';
13 | },
14 | };
15 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/products-list/config/jest/fileTransform.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const path = require('path');
4 |
5 | // This is a custom Jest transformer turning file imports into filenames.
6 | // http://facebook.github.io/jest/docs/tutorial-webpack.html
7 |
8 | module.exports = {
9 | process(src, filename) {
10 | return 'module.exports = ' + JSON.stringify(path.basename(filename)) + ';';
11 | },
12 | };
13 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/products-list/config/polyfills.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | if (typeof Promise === 'undefined') {
4 | // Rejection tracking prevents a common issue where React gets into an
5 | // inconsistent state due to an error, but it gets swallowed by a Promise,
6 | // and the user has no idea what causes React's erratic future behavior.
7 | require('promise/lib/rejection-tracking').enable();
8 | window.Promise = require('promise/lib/es6-extensions.js');
9 | }
10 |
11 | // fetch() polyfill for making API calls.
12 | require('whatwg-fetch');
13 |
14 | // Object.assign() is commonly used with React.
15 | // It will use the native implementation if it's present and isn't buggy.
16 | Object.assign = require('object-assign');
17 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/products-list/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Pragmateam/coding-dojo/8c5e001ab420b412cdefbb52e55e0b519ac59b8b/microfrontends/tabcorp/products-list/public/favicon.ico
--------------------------------------------------------------------------------
/microfrontends/tabcorp/products-list/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
16 |
React App
17 |
18 |
19 |
20 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/products-list/scripts/test.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | process.env.NODE_ENV = 'test';
4 | process.env.PUBLIC_URL = '';
5 |
6 | // Load environment variables from .env file. Suppress warnings using silent
7 | // if this file is missing. dotenv will never modify any environment variables
8 | // that have already been set.
9 | // https://github.com/motdotla/dotenv
10 | require('dotenv').config({silent: true});
11 |
12 | const jest = require('jest');
13 | const argv = process.argv.slice(2);
14 |
15 | // Watch unless on CI or in coverage mode
16 | if (!process.env.CI && argv.indexOf('--coverage') < 0) {
17 | argv.push('--watch');
18 | }
19 |
20 |
21 | jest.run(argv);
22 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/products-list/server.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | const fs = require('fs');
3 | const express = require('express');
4 | const React = require('react');
5 | const App = require('./transpiled/App.js').default;
6 | const { renderToString } = require('react-dom/server');
7 |
8 | const server = express();
9 |
10 | server.get('/', (req, res) => {
11 | const htmlPath = path.resolve(__dirname, 'build', 'index.html');
12 |
13 | fs.readFile(htmlPath, 'utf8', (err, html) => {
14 | const rootElem = '
';
15 | const renderedApp = renderToString(React.createElement(App, null));
16 |
17 | res.send(html.replace(rootElem, rootElem + renderedApp));
18 | });
19 | });
20 |
21 | server.use(express.static('build'));
22 |
23 | const port = process.env.PORT || 3002;
24 | server.listen(port, () => {
25 | console.log(`App listening on port ${port}`);
26 | });
27 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/products-list/src/App.css:
--------------------------------------------------------------------------------
1 | .App {
2 | text-align: center;
3 | }
4 |
5 | .App-logo {
6 | animation: App-logo-spin infinite 20s linear;
7 | height: 80px;
8 | }
9 |
10 | .App-header {
11 | background-color: #222;
12 | height: 150px;
13 | padding: 20px;
14 | color: white;
15 | }
16 |
17 | .App-intro {
18 | font-size: large;
19 | }
20 |
21 | @keyframes App-logo-spin {
22 | from { transform: rotate(0deg); }
23 | to { transform: rotate(360deg); }
24 | }
25 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/products-list/src/App.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | const addToCart = (item) => () => {
4 | const event = new CustomEvent('addToCart', { detail: item });
5 | window.dispatchEvent(event);
6 | }
7 |
8 | const productItemView = (product, index) => {
9 | const price = parseFloat((Math.random() * 100).toFixed(2));
10 |
11 | return (
12 |
13 | {product}
14 | $ {price}
15 |
16 |
17 | );
18 | };
19 |
20 | export default () =>
21 |
22 | Products
23 |
24 | { ['Rice', 'Beans', 'Fries', 'Steak'].map(productItemView) }
25 |
26 | ;
27 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/products-list/src/App.test.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import App from './App';
4 |
5 | it('renders without crashing', () => {
6 | const div = document.createElement('div');
7 | ReactDOM.render(
, div);
8 | });
9 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/products-list/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | padding: 0;
4 | font-family: sans-serif;
5 | }
6 |
--------------------------------------------------------------------------------
/microfrontends/tabcorp/products-list/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import App from './App';
4 | import './index.css';
5 |
6 | ReactDOM.render(
7 |
,
8 | document.getElementById('products-list-root')
9 | );
10 |
--------------------------------------------------------------------------------
/racing-car-katas/exercises/CSharp/LeaderBoard/Driver.cs:
--------------------------------------------------------------------------------
1 | namespace TDDMicroExercises.LeaderBoard
2 | {
3 | public class Driver
4 | {
5 | public Driver(string name, string country)
6 | {
7 | Name = name;
8 | Country = country;
9 | }
10 |
11 | public string Name { get; }
12 | public string Country { get; }
13 |
14 | public override int GetHashCode()
15 | {
16 | return Name.GetHashCode()*31 + Country.GetHashCode();
17 | }
18 |
19 | public override bool Equals(object obj)
20 | {
21 | if (this == obj)
22 | {
23 | return true;
24 | }
25 | if (!(obj is Driver))
26 | {
27 | return false;
28 | }
29 | var other = (Driver) obj;
30 | return Name.Equals(other.Name) && Country.Equals(other.Country);
31 | }
32 | }
33 | }
--------------------------------------------------------------------------------
/racing-car-katas/exercises/CSharp/LeaderBoard/SelfDrivingCar.cs:
--------------------------------------------------------------------------------
1 | namespace TDDMicroExercises.LeaderBoard
2 | {
3 | public class SelfDrivingCar : Driver
4 | {
5 | public SelfDrivingCar(string algorithmVersion, string company) : base(algorithmVersion, company)
6 | {
7 | AlgorithmVersion = algorithmVersion;
8 | }
9 |
10 | public string AlgorithmVersion { get; set; }
11 | }
12 | }
--------------------------------------------------------------------------------
/racing-car-katas/exercises/CSharp/Leaderboard.Tests/RaceTest.cs:
--------------------------------------------------------------------------------
1 | using NUnit.Framework;
2 |
3 | namespace TDDMicroExercises.LeaderBoard.Tests
4 | {
5 | public class RaceTest
6 | {
7 | [Test]
8 | public void ShouldCalculateDriverPoints()
9 | {
10 | Assert.AreEqual(25, TestData.Race1.GetPoints(TestData.Driver1));
11 | Assert.AreEqual(18, TestData.Race1.GetPoints(TestData.Driver2));
12 | Assert.AreEqual(15, TestData.Race1.GetPoints(TestData.Driver3));
13 | }
14 | }
15 | }
--------------------------------------------------------------------------------
/racing-car-katas/exercises/CSharp/TDDMicroExercises.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 11.00
3 | # Visual Studio 2010
4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TDDMicroExercises", "TDDMicroExercises.csproj", "{BBCF3C67-8E31-48E3-AD2E-8C605E2E07BE}"
5 | EndProject
6 | Global
7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
8 | Debug|Any CPU = Debug|Any CPU
9 | Release|Any CPU = Release|Any CPU
10 | EndGlobalSection
11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
12 | {BBCF3C67-8E31-48E3-AD2E-8C605E2E07BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
13 | {BBCF3C67-8E31-48E3-AD2E-8C605E2E07BE}.Debug|Any CPU.Build.0 = Debug|Any CPU
14 | {BBCF3C67-8E31-48E3-AD2E-8C605E2E07BE}.Release|Any CPU.ActiveCfg = Release|Any CPU
15 | {BBCF3C67-8E31-48E3-AD2E-8C605E2E07BE}.Release|Any CPU.Build.0 = Release|Any CPU
16 | EndGlobalSection
17 | GlobalSection(SolutionProperties) = preSolution
18 | HideSolutionNode = FALSE
19 | EndGlobalSection
20 | EndGlobal
21 |
--------------------------------------------------------------------------------
/racing-car-katas/exercises/CSharp/TelemetrySystem.Tests/TelemetryDiagnosticControlsTest.cs:
--------------------------------------------------------------------------------
1 | using NUnit.Framework;
2 |
3 | namespace TDDMicroExercises.TelemetrySystem.Tests
4 | {
5 | [TestFixture]
6 | public class TelemetryDiagnosticControlsTest
7 | {
8 | [Test]
9 | public void CheckTransmission_should_send_a_diagnostic_message_and_receive_a_status_message_response()
10 | {
11 | }
12 |
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/racing-car-katas/exercises/CSharp/TirePressureMonitoringSystem.Tests/AlarmTest.cs:
--------------------------------------------------------------------------------
1 |
2 | using NUnit.Framework;
3 |
4 | namespace TDDMicroExercises.TirePressureMonitoringSystem
5 | {
6 | [TestFixture]
7 | public class AlarmTest
8 | {
9 | [Test]
10 | public void Foo()
11 | {
12 | Alarm alarm = new Alarm();
13 | Assert.AreEqual(false, alarm.AlarmOn);
14 | }
15 | }
16 | }
--------------------------------------------------------------------------------
/racing-car-katas/exercises/CSharp/TirePressureMonitoringSystem/Alarm.cs:
--------------------------------------------------------------------------------
1 | namespace TDDMicroExercises.TirePressureMonitoringSystem
2 | {
3 | public class Alarm
4 | {
5 | private const double LowPressureThreshold = 17;
6 | private const double HighPressureThreshold = 21;
7 |
8 | Sensor _sensor = new Sensor();
9 |
10 | bool _alarmOn = false;
11 | private long _alarmCount = 0;
12 |
13 |
14 | public void Check()
15 | {
16 | double psiPressureValue = _sensor.PopNextPressurePsiValue();
17 |
18 | if (psiPressureValue < LowPressureThreshold || HighPressureThreshold < psiPressureValue)
19 | {
20 | _alarmOn = true;
21 | _alarmCount += 1;
22 | }
23 | }
24 |
25 | public bool AlarmOn
26 | {
27 | get { return _alarmOn; }
28 | }
29 |
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/racing-car-katas/exercises/CSharp/TirePressureMonitoringSystem/Sensor.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace TDDMicroExercises.TirePressureMonitoringSystem
4 | {
5 | public class Sensor
6 | {
7 | const double Offset = 16;
8 |
9 | public double PopNextPressurePsiValue()
10 | {
11 | double pressureTelemetryValue;
12 | SamplePressure(out pressureTelemetryValue);
13 |
14 | return Offset + pressureTelemetryValue;
15 | }
16 |
17 | private static void SamplePressure(out double pressureTelemetryValue)
18 | {
19 | // placeholder implementation that simulate a real sensor in a real tire
20 | Random basicRandomNumbersGenerator = new Random();
21 | pressureTelemetryValue = 6 * basicRandomNumbersGenerator.NextDouble() * basicRandomNumbersGenerator.NextDouble();
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/racing-car-katas/exercises/CSharp/TurnTicketDispenser/TicketDispenser.cs:
--------------------------------------------------------------------------------
1 | namespace TDDMicroExercises.TurnTicketDispenser
2 | {
3 | public class TicketDispenser
4 | {
5 | public TurnTicket GetTurnTicket()
6 | {
7 | int newTurnNumber = TurnNumberSequence.GetNextTurnNumber();
8 | TurnTicket newTurnTicket = new TurnTicket(newTurnNumber);
9 |
10 | return newTurnTicket;
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/racing-car-katas/exercises/CSharp/TurnTicketDispenser/TurnNumberSequence.cs:
--------------------------------------------------------------------------------
1 | namespace TDDMicroExercises.TurnTicketDispenser
2 | {
3 | public static class TurnNumberSequence
4 | {
5 | private static int _turnNumber = 0;
6 |
7 | public static int GetNextTurnNumber()
8 | {
9 | return _turnNumber++;
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/racing-car-katas/exercises/CSharp/TurnTicketDispenser/TurnTicket.cs:
--------------------------------------------------------------------------------
1 | namespace TDDMicroExercises.TurnTicketDispenser
2 | {
3 | public class TurnTicket
4 | {
5 | private readonly int _turnNumber;
6 |
7 | public TurnTicket(int turnNumber)
8 | {
9 | _turnNumber = turnNumber;
10 | }
11 |
12 | public int TurnNumber
13 | {
14 | get { return _turnNumber; }
15 | }
16 |
17 | }
18 | }
--------------------------------------------------------------------------------
/racing-car-katas/exercises/CSharp/UnicodeFileToHtmlTextConverter.Tests/UnicodeFileToHtmlTextConverterTest.cs:
--------------------------------------------------------------------------------
1 |
2 | using NUnit.Framework;
3 | namespace TDDMicroExercises.UnicodeFileToHtmlTextConverter
4 | {
5 | [TestFixture]
6 | public class HikerTest
7 | {
8 | [Test]
9 | public void foobar()
10 | {
11 | UnicodeFileToHtmlTextConverter converter = new UnicodeFileToHtmlTextConverter("foobar.txt");
12 | Assert.AreEqual("fixme", converter.GetFilename());
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/racing-car-katas/exercises/CSharp/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/racing-car-katas/exercises/Cpp/.gitignore:
--------------------------------------------------------------------------------
1 | Bin/
2 | build/
3 | **/test/
4 | *.compiled_hpp
5 |
--------------------------------------------------------------------------------
/racing-car-katas/exercises/Cpp/README.md:
--------------------------------------------------------------------------------
1 | Requirements:
2 | - CMake
3 | - CppUnit
4 |
5 | Use your package manager to install or download:
6 | - cmake from: https://cmake.org
7 | - cppunit from: https://sourceforge.net/projects/cppunit/
8 |
9 | Binaries are put to "Cpp/Bin" folder.
10 |
11 | Build steps to generate makefiles:
12 | ```sh
13 | cd Racing-Car-Katas/Cpp
14 | mkdir build
15 | cd build
16 | cmake ../Source
17 | make
18 | ```
19 |
20 | On Windows for VS2012 replace step 4 by:
21 | ```sh
22 | cmake -G"Visual Studio 12" ..\Source
23 | ```
24 |
25 | On mac for XCode replace step 4 by:
26 | ```sh
27 | cmake -G"XCode" ../Source
28 | ```
29 |
30 | For Eclipse 4.4 with CDT4 replace step 4 by:
31 | ```sh
32 | cmake -G"Eclipse CDT4 - Unix Makefiles" -D_ECLIPSE_VERSION=4.4 ../Source
33 | ```
34 |
35 | For CodeBlocks replace step 4 by:
36 | ```sh
37 | cmake -G"CodeBlocks - Unix Makefiles" ../Source
38 | ```
39 |
40 | For CodeListe replace step 4 by:
41 | ```sh
42 | cmake -G"CodeLite - Unix Makefiles" ../Source
43 | ```
44 |
45 | google "cmake generators" if you need something else.
46 |
47 |
--------------------------------------------------------------------------------
/racing-car-katas/exercises/Cpp/Source/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 2.8.11)
2 | project(Racing-Car-Katas)
3 |
4 | set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules)
5 |
6 | IF(NOT CMAKE_BUILD_TYPE)
7 | SET(CMAKE_BUILD_TYPE Debug)
8 | ENDIF()
9 |
10 | GET_FILENAME_COMPONENT( SOURCE_ROOT . ABSOLUTE )
11 | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${SOURCE_ROOT}/../Bin)
12 | set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${SOURCE_ROOT}/../Bin)
13 | set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${SOURCE_ROOT}/../Bin)
14 |
15 | find_package(CppUnit REQUIRED)
16 | include_directories(${CPPUNIT_INCLUDE_DIR})
17 | include_directories(${CMAKE_CURRENT_SOURCE_DIR})
18 |
19 | add_compile_options(--std=c++11)
20 | add_compile_options(-Wall)
21 | add_compile_options(-Werror)
22 |
23 | add_subdirectory(TirePressureMonitoring)
24 | add_subdirectory(TirePressureMonitoring.Test)
25 | add_subdirectory(LeaderBoard)
26 | add_subdirectory(LeaderBoard.Test)
27 | add_subdirectory(TelemetrySystem)
28 | add_subdirectory(TelemetrySystem.Test)
29 | add_subdirectory(TurnTicketDispenser)
30 | add_subdirectory(TurnTicketDispenser.Test)
31 | add_subdirectory(TextConverter)
32 | add_subdirectory(TextConverter.Test)
33 |
--------------------------------------------------------------------------------
/racing-car-katas/exercises/Cpp/Source/LeaderBoard.Test/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 2.8.11)
2 | project(LeaderBoard.Test)
3 |
4 | aux_source_directory(source PROJECT_SOURCE)
5 | file(GLOB PROJECT_INCLUDES "include/*.h")
6 |
7 | add_executable(${PROJECT_NAME} ${PROJECT_SOURCE} ${PROJECT_INCLUDES})
8 |
9 | target_link_libraries(${PROJECT_NAME} LeaderBoard ${CPPUNIT_LIBRARIES})
10 |
--------------------------------------------------------------------------------
/racing-car-katas/exercises/Cpp/Source/LeaderBoard.Test/source/RaceTest.cpp:
--------------------------------------------------------------------------------
1 |
2 | #include "../include/TestData.h"
3 |
4 | #include
5 | #include
6 | #include
7 |
8 | class RaceTest : public CppUnit::TestFixture
9 | {
10 | public:
11 | virtual void setUp() {}
12 | virtual void tearDown() {}
13 |
14 | void t_CalculateDriverPoints();
15 |
16 | CPPUNIT_TEST_SUITE(RaceTest);
17 | CPPUNIT_TEST(t_CalculateDriverPoints);
18 | CPPUNIT_TEST_SUITE_END();
19 | };
20 |
21 | void RaceTest::t_CalculateDriverPoints()
22 | {
23 | CPPUNIT_ASSERT(25 == TestData::race1.getPoints(TestData::driver1));
24 | CPPUNIT_ASSERT(18 == TestData::race1.getPoints(TestData::driver2));
25 | CPPUNIT_ASSERT(15 == TestData::race1.getPoints(TestData::driver3));
26 | }
27 |
28 | CPPUNIT_TEST_SUITE_REGISTRATION(RaceTest);
29 |
--------------------------------------------------------------------------------
/racing-car-katas/exercises/Cpp/Source/LeaderBoard.Test/source/TestData.cpp:
--------------------------------------------------------------------------------
1 |
2 | #include "../include/TestData.h"
3 |
4 | Driver TestData::driver1("Nico Rosberg", "DE");
5 | Driver TestData::driver2("Lewis Hamilton", "UK");
6 | Driver TestData::driver3("Sebastian Vettel", "DE");
7 | SelfDrivingCar TestData::driver4("1.3", "Acme");
8 |
9 | Race TestData::race1("Australian Grand Prix", TestData::CreateDriverList(driver1, driver2, driver3));
10 | Race TestData::race2("Malaysian Grand Prix", TestData::CreateDriverList(driver3, driver2, driver1));
11 | Race TestData::race3("Chinese Grand Prix", TestData::CreateDriverList(driver2, driver1, driver3));
12 | Race TestData::race4("Fictional Grand Prix 1", TestData::CreateDriverList(driver1, driver2, driver4));
13 | Race TestData::race5("Fictional Grand Prix 2", TestData::CreateDriverList(driver4, driver2, driver1));
14 | Race TestData::race6("Fictional Grand Prix 3", TestData::CreateDriverList(driver2, driver1, driver4));
15 |
16 | Leaderboard TestData::sampleLeaderboard1(TestData::CreateRaceList(race1, race2, race3));
17 | Leaderboard TestData::sampleLeaderboard2(TestData::CreateRaceList(race4, race5, race6));
18 |
--------------------------------------------------------------------------------
/racing-car-katas/exercises/Cpp/Source/LeaderBoard.Test/source/main.cpp:
--------------------------------------------------------------------------------
1 |
2 | #include
3 | #include
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include
9 | #include
10 | #include
11 |
12 | int main(int argc, char **argv) {
13 | CPPUNIT_NS::TestResult testresult;
14 | CPPUNIT_NS::TestResultCollector collectedresults;
15 | testresult.addListener(&collectedresults);
16 |
17 | CPPUNIT_NS::BriefTestProgressListener progress;
18 | testresult.addListener(&progress);
19 |
20 | CPPUNIT_NS::TestRunner testrunner;
21 | testrunner.addTest(
22 | CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest());
23 | testrunner.run(testresult);
24 |
25 | CPPUNIT_NS::CompilerOutputter(&collectedresults, std::cerr).write();
26 |
27 | return !collectedresults.wasSuccessful();
28 | }
29 |
--------------------------------------------------------------------------------
/racing-car-katas/exercises/Cpp/Source/LeaderBoard/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 2.8.11)
2 | project(LeaderBoard)
3 |
4 | aux_source_directory(source PROJECT_SOURCE)
5 | file(GLOB PROJECT_INCLUDES "include/*.h")
6 |
7 | add_library(${PROJECT_NAME} STATIC ${PROJECT_SOURCE} ${PROJECT_INCLUDES})
8 |
--------------------------------------------------------------------------------
/racing-car-katas/exercises/Cpp/Source/LeaderBoard/include/Driver.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include
4 |
5 | class Driver
6 | {
7 | std::string const m_name;
8 | std::string const m_country;
9 |
10 | public:
11 | Driver(std::string const name, std::string const country);
12 |
13 | std::string getName() const;
14 |
15 | std::string getCountry() const;
16 |
17 | bool operator==(Driver const& other) const;
18 | };
19 |
20 | namespace std
21 | {
22 | template <>
23 | struct hash
24 | {
25 | std::size_t operator()(Driver const& driver) const
26 | {
27 | std::hash< std::string > const hash;
28 | return hash( driver.getName() ) * 31 + hash( driver.getCountry() );
29 | }
30 | };
31 | }
32 |
--------------------------------------------------------------------------------
/racing-car-katas/exercises/Cpp/Source/LeaderBoard/include/LeaderBoard.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include
4 | #include