diff --git a/README.md b/README.md index 3a173cf..62710ac 100644 --- a/README.md +++ b/README.md @@ -27,9 +27,15 @@ ## 🏞️ Overview Wolf Quake is a parser for Quake 3 Arena log files. + You can find a log file: [file](https://gist.github.com/cloudwalk-tests/be1b636e58abff14088c8b5309f575d8) -### Usage +## :scroll: Documentation + +Documentation can be found in: +[DOCUMENTATION](https://nicolasauler.github.io/wolf_quake) + +## :computer_mouse: Usage ```shell Quake 3 log parser @@ -46,10 +52,203 @@ Options: -V, --version Print version ``` -## :scroll: Documentation +### Examples +#### Txt report -Documentation can be found in: -[DOCUMENTATION](https://nicolasauler.github.io/wolf_quake) +```console +foo@bar:~$ wolf_quake -f text -o report.txt games.log +``` + +```shell +╭────────┬──────────────────┬─────────────────┬──────────────────╮ +│ │ │ │ │ +│ │ Total game kills │ Kill Rank │ Death Causes │ +│ │ │ (Player: Score) │ (Cause: Count) │ +│ │ │ │ │ +├────────┼──────────────────┼─────────────────┼──────────────────┤ +│ │ │ │ │ +│ Game 1 │ 1 │ Player1: -1 │ TriggerHurt: 1 │ +│ │ │ │ │ +├────────┼──────────────────┼─────────────────┼──────────────────┤ +│ │ │ │ │ +│ │ │ Player2: 1 │ Rocket Splash: 1 │ +│ Game 2 │ 2 │ │ │ +│ │ │ Player1: -1 │ TriggerHurt: 1 │ +│ │ │ │ │ +╰────────┴──────────────────┴─────────────────┴──────────────────╯ +``` + +#### Html report + +```console +foo@bar:~$ wolf_quake -f html -o report.html games.log +``` + +Not really formatted how it should be due to rendering in markdown, but you can open +[report.html](./examples/qgames_report.html) to see the actual result in your browser. + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ +

+

+ +

+

+ +

+
+
+
+

+ +

+

+Total game kills +

+

+ +

+
+
+
+

+ +

+

+Kill Rank +

+

+(Player: Score) +

+

+ +

+
+
+
+

+ +

+

+Death Causes +

+

+(Cause: Count) +

+

+ +

+
+
+
+

+Game 1 +

+
+
+
+

+1 +

+
+
+
+

+ +

+

+Player1: -1 +

+

+ +

+
+
+
+

+ +

+

+TriggerHurt: 1 +

+

+ +

+
+
+
+

+Game 2 +

+
+
+
+

+2 +

+
+
+
+

+ +

+

+Player2: 1 +

+

+ +

+

+Player1: -1 +

+

+ +

+
+
+
+

+ +

+

+Rocket Splash: 1 +

+

+ +

+

+TriggerHurt: 1 +

+

+ +

+
+
## 🦺 Security and 💻 Software @@ -60,9 +259,9 @@ Current status: - [x] Enviroment setup: CI, local and github - [x] Happy path log parsing and tests - [x] Bug handling in original log file -- [x] CLI -- [ ] Integration tests -- [ ] Documentation +- [x] CLI and tests +- [x] Documentation +- [ ] Better docs.rs reference documentation For testing, Wolf Quake uses the [proptest](https://docs.rs/proptest/latest/proptest/) crate, which is kind of a more purpose-oriented fuzzy testing tool. diff --git a/static/qgames.log b/examples/qgames.log similarity index 100% rename from static/qgames.log rename to examples/qgames.log diff --git a/examples/qgames_report.html b/examples/qgames_report.html new file mode 100644 index 0000000..a055dee --- /dev/null +++ b/examples/qgames_report.html @@ -0,0 +1,2024 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ +

+

+ +

+

+ +

+
+
+
+

+ +

+

+ Total game kills +

+

+ +

+
+
+
+

+ +

+

+ Kill Rank +

+

+ (Player: Score) +

+

+ +

+
+
+
+

+ +

+

+ Death Causes +

+

+ (Cause: Count) +

+

+ +

+
+
+
+

+ Game 1 +

+
+
+
+

+ 0 +

+
+
+
+

+ +

+

+ Isgalamido: 0 +

+

+ +

+
+
+
+

+ +

+
+
+
+

+ Game 2 +

+
+
+
+

+ 11 +

+
+
+
+

+ +

+

+ Mocinha: 0 +

+

+ +

+

+ Isgalamido: -5 +

+

+ +

+
+
+
+

+ +

+

+ TriggerHurt: 7 +

+

+ +

+

+ Rocket Splash: 3 +

+

+ +

+

+ Falling: 1 +

+

+ +

+
+
+
+

+ Game 3 +

+
+
+
+

+ 4 +

+
+
+
+

+ +

+

+ Isgalamido: 1 +

+

+ +

+

+ Dono da Bola: -1 +

+

+ +

+

+ Zeh: -2 +

+

+ +

+
+
+
+

+ +

+

+ TriggerHurt: 2 +

+

+ +

+

+ Rocket: 1 +

+

+ +

+

+ Falling: 1 +

+

+ +

+
+
+
+

+ Game 4 +

+
+
+
+

+ 105 +

+
+
+
+

+ +

+

+ Zeh: 20 +

+

+ +

+

+ Isgalamido: 19 +

+

+ +

+

+ Dono da Bola: 13 +

+

+ +

+

+ Assasinu Credi: 13 +

+

+ +

+
+
+
+

+ +

+

+ Rocket Splash: 51 +

+

+ +

+

+ Rocket: 20 +

+

+ +

+

+ Falling: 11 +

+

+ +

+

+ TriggerHurt: 9 +

+

+ +

+

+ Railgun: 8 +

+

+ +

+

+ Machinegun: 4 +

+

+ +

+

+ Shotgun: 2 +

+

+ +

+
+
+
+

+ Game 5 +

+
+
+
+

+ 14 +

+
+
+
+

+ +

+

+ Isgalamido: 2 +

+

+ +

+

+ Zeh: 1 +

+

+ +

+

+ Assasinu Credi: 1 +

+

+ +

+

+ Zeh: 0 +

+

+ +

+
+
+
+

+ +

+

+ TriggerHurt: 5 +

+

+ +

+

+ Rocket: 4 +

+

+ +

+

+ Rocket Splash: 4 +

+

+ +

+

+ Railgun: 1 +

+

+ +

+
+
+
+

+ Game 6 +

+
+
+
+

+ 29 +

+
+
+
+

+ +

+

+ Oootsimo: 8 +

+

+ +

+

+ Zeh: 7 +

+

+ +

+

+ Isgalamido: 3 +

+

+ +

+

+ Dono da Bola: 2 +

+

+ +

+

+ Assasinu Credi: 1 +

+

+ +

+

+ Mal: 0 +

+

+ +

+
+
+
+

+ +

+

+ Rocket Splash: 13 +

+

+ +

+

+ Rocket: 5 +

+

+ +

+

+ Shotgun: 4 +

+

+ +

+

+ TriggerHurt: 3 +

+

+ +

+

+ Railgun: 2 +

+

+ +

+

+ Machinegun: 1 +

+

+ +

+

+ Falling: 1 +

+

+ +

+
+
+
+

+ Game 7 +

+
+
+
+

+ 130 +

+
+
+
+

+ +

+

+ Assasinu Credi: 22 +

+

+ +

+

+ Oootsimo: 20 +

+

+ +

+

+ Isgalamido: 16 +

+

+ +

+

+ Dono da Bola: 12 +

+

+ +

+

+ Zeh: 9 +

+

+ +

+

+ Chessus: 0 +

+

+ +

+

+ Mal: -3 +

+

+ +

+
+
+
+

+ +

+

+ Rocket Splash: 49 +

+

+ +

+

+ Rocket: 29 +

+

+ +

+

+ TriggerHurt: 20 +

+

+ +

+

+ Railgun: 9 +

+

+ +

+

+ Machinegun: 9 +

+

+ +

+

+ Shotgun: 7 +

+

+ +

+

+ Falling: 7 +

+

+ +

+
+
+
+

+ Game 8 +

+
+
+
+

+ 89 +

+
+
+
+

+ +

+

+ Isgalamido: 20 +

+

+ +

+

+ Oootsimo: 16 +

+

+ +

+

+ Zeh: 12 +

+

+ +

+

+ Assasinu Credi: 10 +

+

+ +

+

+ Dono da Bola: 3 +

+

+ +

+

+ Mal: -2 +

+

+ +

+
+
+
+

+ +

+

+ Rocket Splash: 39 +

+

+ +

+

+ Rocket: 18 +

+

+ +

+

+ Railgun: 12 +

+

+ +

+

+ TriggerHurt: 9 +

+

+ +

+

+ Falling: 6 +

+

+ +

+

+ Machinegun: 4 +

+

+ +

+

+ Shotgun: 1 +

+

+ +

+
+
+
+

+ Game 9 +

+
+
+
+

+ 67 +

+
+
+
+

+ +

+

+ Zeh: 12 +

+

+ +

+

+ Chessus: 11 +

+

+ +

+

+ Assasinu Credi: 10 +

+

+ +

+

+ Oootsimo: 9 +

+

+ +

+

+ Mal: 3 +

+

+ +

+

+ Dono da Bola: 0 +

+

+ +

+
+
+
+

+ +

+

+ Rocket Splash: 25 +

+

+ +

+

+ Rocket: 17 +

+

+ +

+

+ Railgun: 10 +

+

+ +

+

+ TriggerHurt: 8 +

+

+ +

+

+ Machinegun: 3 +

+

+ +

+

+ Falling: 3 +

+

+ +

+

+ Shotgun: 1 +

+

+ +

+
+
+
+

+ Game 10 +

+
+
+
+

+ 60 +

+
+
+
+

+ +

+

+ Zeh: 7 +

+

+ +

+

+ Isgalamido: 6 +

+

+ +

+

+ Chessus: 5 +

+

+ +

+

+ Dono da Bola: 3 +

+

+ +

+

+ Assasinu Credi: 3 +

+

+ +

+

+ Mal: 1 +

+

+ +

+

+ Oootsimo: -1 +

+

+ +

+
+
+
+

+ +

+

+ Telefrag: 25 +

+

+ +

+

+ TriggerHurt: 17 +

+

+ +

+

+ Railgun: 7 +

+

+ +

+

+ Rocket: 4 +

+

+ +

+

+ Bfg Splash: 2 +

+

+ +

+

+ Bfg: 2 +

+

+ +

+

+ Machinegun: 1 +

+

+ +

+

+ Rocket Splash: 1 +

+

+ +

+

+ Crush: 1 +

+

+ +

+
+
+
+

+ Game 11 +

+
+
+
+

+ 20 +

+
+
+
+

+ +

+

+ Isgalamido: 5 +

+

+ +

+

+ Oootsimo: 4 +

+

+ +

+

+ Zeh: 0 +

+

+ +

+

+ Mal: 0 +

+

+ +

+

+ Chessus: 0 +

+

+ +

+

+ Dono da Bola: -2 +

+

+ +

+

+ Assasinu Credi: -3 +

+

+ +

+
+
+
+

+ +

+

+ TriggerHurt: 7 +

+

+ +

+

+ Rocket Splash: 4 +

+

+ +

+

+ Railgun: 4 +

+

+ +

+

+ Bfg Splash: 3 +

+

+ +

+

+ Machinegun: 1 +

+

+ +

+

+ Crush: 1 +

+

+ +

+
+
+
+

+ Game 12 +

+
+
+
+

+ 160 +

+
+
+
+

+ +

+

+ Isgalamido: 26 +

+

+ +

+

+ Assasinu Credi: 20 +

+

+ +

+

+ Zeh: 13 +

+

+ +

+

+ Chessus: 13 +

+

+ +

+

+ Oootsimo: 13 +

+

+ +

+

+ Dono da Bola: 3 +

+

+ +

+

+ Mal: -6 +

+

+ +

+
+
+
+

+ +

+

+ Railgun: 38 +

+

+ +

+

+ TriggerHurt: 37 +

+

+ +

+

+ Rocket Splash: 35 +

+

+ +

+

+ Rocket: 25 +

+

+ +

+

+ Bfg Splash: 8 +

+

+ +

+

+ Bfg: 8 +

+

+ +

+

+ Machinegun: 7 +

+

+ +

+

+ Falling: 2 +

+

+ +

+
+
+
+

+ Game 13 +

+
+
+
+

+ 6 +

+
+
+
+

+ +

+

+ Zeh: 2 +

+

+ +

+

+ Oootsimo: 2 +

+

+ +

+

+ Mal: 0 +

+

+ +

+

+ Chessus: 0 +

+

+ +

+

+ Assasinu Credi: 0 +

+

+ +

+

+ Isgalamido: -1 +

+

+ +

+

+ Dono da Bola: -1 +

+

+ +

+
+
+
+

+ +

+

+ TriggerHurt: 2 +

+

+ +

+

+ Bfg Splash: 1 +

+

+ +

+

+ Rocket Splash: 1 +

+

+ +

+

+ Rocket: 1 +

+

+ +

+

+ Bfg: 1 +

+

+ +

+
+
+
+

+ Game 14 +

+
+
+
+

+ 122 +

+
+
+
+

+ +

+

+ Isgalamido: 22 +

+

+ +

+

+ Oootsimo: 9 +

+

+ +

+

+ Chessus: 7 +

+

+ +

+

+ Assasinu Credi: 7 +

+

+ +

+

+ Zeh: 5 +

+

+ +

+

+ Dono da Bola: 2 +

+

+ +

+

+ Mal: -2 +

+

+ +

+
+
+
+

+ +

+

+ TriggerHurt: 31 +

+

+ +

+

+ Rocket Splash: 24 +

+

+ +

+

+ Rocket: 23 +

+

+ +

+

+ Railgun: 20 +

+

+ +

+

+ Bfg Splash: 10 +

+

+ +

+

+ Falling: 5 +

+

+ +

+

+ Bfg: 5 +

+

+ +

+

+ Machinegun: 4 +

+

+ +

+
+
+
+

+ Game 15 +

+
+
+
+

+ 3 +

+
+
+
+

+ +

+

+ Dono da Bola: 0 +

+

+ +

+

+ Assasinu Credi: 0 +

+

+ +

+

+ Assasinu Credi: 0 +

+

+ +

+

+ Oootsimo: 0 +

+

+ +

+

+ Isgalamido: -3 +

+

+ +

+
+
+
+

+ +

+

+ TriggerHurt: 3 +

+

+ +

+
+
+
+

+ Game 16 +

+
+
+
+

+ 0 +

+
+
+
+

+ +

+

+ Dono da Bola: 0 +

+

+ +

+

+ Isgalamido: 0 +

+

+ +

+

+ Zeh: 0 +

+

+ +

+

+ Assasinu Credi: 0 +

+

+ +

+

+ Oootsimo: 0 +

+

+ +

+
+
+
+

+ +

+
+
+
+

+ Game 17 +

+
+
+
+

+ 13 +

+
+
+
+

+ +

+

+ Oootsimo: 1 +

+

+ +

+

+ Isgalamido: 0 +

+

+ +

+

+ Zeh: 0 +

+

+ +

+

+ Mal: -1 +

+

+ +

+

+ Dono da Bola: -2 +

+

+ +

+

+ Assasinu Credi: -3 +

+

+ +

+
+
+
+

+ +

+

+ TriggerHurt: 6 +

+

+ +

+

+ Falling: 3 +

+

+ +

+

+ Rocket Splash: 2 +

+

+ +

+

+ Railgun: 2 +

+

+ +

+
+
+
+

+ Game 18 +

+
+
+
+

+ 7 +

+
+
+
+

+ +

+

+ Zeh: 2 +

+

+ +

+

+ Assasinu Credi: 2 +

+

+ +

+

+ Isgalamido: 1 +

+

+ +

+

+ Oootsimo: 0 +

+

+ +

+

+ Dono da Bola: -1 +

+

+ +

+

+ Mal: -1 +

+

+ +

+
+
+
+

+ +

+

+ Rocket Splash: 4 +

+

+ +

+

+ Falling: 1 +

+

+ +

+

+ TriggerHurt: 1 +

+

+ +

+

+ Rocket: 1 +

+

+ +

+
+
+
+

+ Game 19 +

+
+
+
+

+ 95 +

+
+
+
+

+ +

+

+ Zeh: 20 +

+

+ +

+

+ Isgalamido: 14 +

+

+ +

+

+ Dono da Bola: 14 +

+

+ +

+

+ Oootsimo: 10 +

+

+ +

+

+ Assasinu Credi: 9 +

+

+ +

+

+ Mal: 2 +

+

+ +

+
+
+
+

+ +

+

+ Rocket Splash: 32 +

+

+ +

+

+ Rocket: 27 +

+

+ +

+

+ TriggerHurt: 12 +

+

+ +

+

+ Railgun: 10 +

+

+ +

+

+ Machinegun: 7 +

+

+ +

+

+ Shotgun: 6 +

+

+ +

+

+ Falling: 1 +

+

+ +

+
+
+
+

+ Game 20 +

+
+
+
+

+ 3 +

+
+
+
+

+ +

+

+ Dono da Bola: 2 +

+

+ +

+

+ Oootsimo: 1 +

+

+ +

+

+ Isgalamido: 0 +

+

+ +

+

+ Zeh: 0 +

+

+ +

+

+ Assasinu Credi: 0 +

+

+ +

+

+ Mal: 0 +

+

+ +

+
+
+
+

+ +

+

+ Rocket Splash: 2 +

+

+ +

+

+ Rocket: 1 +

+

+ +

+
+
+
+

+ Game 21 +

+
+
+
+

+ 131 +

+
+
+
+

+ +

+

+ Oootsimo: 22 +

+

+ +

+

+ Zeh: 19 +

+

+ +

+

+ Assasinu Credi: 19 +

+

+ +

+

+ Isgalamido: 17 +

+

+ +

+

+ Dono da Bola: 14 +

+

+ +

+

+ Mal: 6 +

+

+ +

+
+
+
+

+ +

+

+ Rocket Splash: 60 +

+

+ +

+

+ Rocket: 37 +

+

+ +

+

+ TriggerHurt: 14 +

+

+ +

+

+ Railgun: 9 +

+

+ +

+

+ Machinegun: 4 +

+

+ +

+

+ Shotgun: 4 +

+

+ +

+

+ Falling: 3 +

+

+ +

+
+
diff --git a/examples/qgames_report.txt b/examples/qgames_report.txt new file mode 100644 index 0000000..cef34b3 --- /dev/null +++ b/examples/qgames_report.txt @@ -0,0 +1,302 @@ +╭─────────┬──────────────────┬────────────────────┬───────────────────╮ +│ │ │ │ │ +│ │ Total game kills │ Kill Rank │ Death Causes │ +│ │ │ (Player: Score) │ (Cause: Count) │ +│ │ │ │ │ +├─────────┼──────────────────┼────────────────────┼───────────────────┤ +│ │ │ │ │ +│ Game 1 │ 0 │ Isgalamido: 0 │ │ +│ │ │ │ │ +├─────────┼──────────────────┼────────────────────┼───────────────────┤ +│ │ │ │ │ +│ │ │ │ TriggerHurt: 7 │ +│ │ │ Mocinha: 0 │ │ +│ Game 2 │ 11 │ │ Rocket Splash: 3 │ +│ │ │ Isgalamido: -5 │ │ +│ │ │ │ Falling: 1 │ +│ │ │ │ │ +├─────────┼──────────────────┼────────────────────┼───────────────────┤ +│ │ │ │ │ +│ │ │ Isgalamido: 1 │ TriggerHurt: 2 │ +│ │ │ │ │ +│ Game 3 │ 4 │ Dono da Bola: -1 │ Rocket: 1 │ +│ │ │ │ │ +│ │ │ Zeh: -2 │ Falling: 1 │ +│ │ │ │ │ +├─────────┼──────────────────┼────────────────────┼───────────────────┤ +│ │ │ │ │ +│ │ │ │ Rocket Splash: 51 │ +│ │ │ │ │ +│ │ │ │ Rocket: 20 │ +│ │ │ Zeh: 20 │ │ +│ │ │ │ Falling: 11 │ +│ │ │ Isgalamido: 19 │ │ +│ Game 4 │ 105 │ │ TriggerHurt: 9 │ +│ │ │ Assasinu Credi: 13 │ │ +│ │ │ │ Railgun: 8 │ +│ │ │ Dono da Bola: 13 │ │ +│ │ │ │ Machinegun: 4 │ +│ │ │ │ │ +│ │ │ │ Shotgun: 2 │ +│ │ │ │ │ +├─────────┼──────────────────┼────────────────────┼───────────────────┤ +│ │ │ │ │ +│ │ │ Isgalamido: 2 │ TriggerHurt: 5 │ +│ │ │ │ │ +│ │ │ Assasinu Credi: 1 │ Rocket: 4 │ +│ Game 5 │ 14 │ │ │ +│ │ │ Zeh: 1 │ Rocket Splash: 4 │ +│ │ │ │ │ +│ │ │ Zeh: 0 │ Railgun: 1 │ +│ │ │ │ │ +├─────────┼──────────────────┼────────────────────┼───────────────────┤ +│ │ │ │ │ +│ │ │ │ Rocket Splash: 13 │ +│ │ │ Oootsimo: 8 │ │ +│ │ │ │ Rocket: 5 │ +│ │ │ Zeh: 7 │ │ +│ │ │ │ Shotgun: 4 │ +│ │ │ Isgalamido: 3 │ │ +│ Game 6 │ 29 │ │ TriggerHurt: 3 │ +│ │ │ Dono da Bola: 2 │ │ +│ │ │ │ Railgun: 2 │ +│ │ │ Assasinu Credi: 1 │ │ +│ │ │ │ Machinegun: 1 │ +│ │ │ Mal: 0 │ │ +│ │ │ │ Falling: 1 │ +│ │ │ │ │ +├─────────┼──────────────────┼────────────────────┼───────────────────┤ +│ │ │ │ │ +│ │ │ Assasinu Credi: 22 │ Rocket Splash: 49 │ +│ │ │ │ │ +│ │ │ Oootsimo: 20 │ Rocket: 29 │ +│ │ │ │ │ +│ │ │ Isgalamido: 16 │ TriggerHurt: 20 │ +│ │ │ │ │ +│ Game 7 │ 130 │ Dono da Bola: 12 │ Railgun: 9 │ +│ │ │ │ │ +│ │ │ Zeh: 9 │ Machinegun: 9 │ +│ │ │ │ │ +│ │ │ Chessus: 0 │ Shotgun: 7 │ +│ │ │ │ │ +│ │ │ Mal: -3 │ Falling: 7 │ +│ │ │ │ │ +├─────────┼──────────────────┼────────────────────┼───────────────────┤ +│ │ │ │ │ +│ │ │ │ Rocket Splash: 39 │ +│ │ │ Isgalamido: 20 │ │ +│ │ │ │ Rocket: 18 │ +│ │ │ Oootsimo: 16 │ │ +│ │ │ │ Railgun: 12 │ +│ │ │ Zeh: 12 │ │ +│ Game 8 │ 89 │ │ TriggerHurt: 9 │ +│ │ │ Assasinu Credi: 10 │ │ +│ │ │ │ Falling: 6 │ +│ │ │ Dono da Bola: 3 │ │ +│ │ │ │ Machinegun: 4 │ +│ │ │ Mal: -2 │ │ +│ │ │ │ Shotgun: 1 │ +│ │ │ │ │ +├─────────┼──────────────────┼────────────────────┼───────────────────┤ +│ │ │ │ │ +│ │ │ │ Rocket Splash: 25 │ +│ │ │ Zeh: 12 │ │ +│ │ │ │ Rocket: 17 │ +│ │ │ Chessus: 11 │ │ +│ │ │ │ Railgun: 10 │ +│ │ │ Assasinu Credi: 10 │ │ +│ Game 9 │ 67 │ │ TriggerHurt: 8 │ +│ │ │ Oootsimo: 9 │ │ +│ │ │ │ Machinegun: 3 │ +│ │ │ Mal: 3 │ │ +│ │ │ │ Falling: 3 │ +│ │ │ Dono da Bola: 0 │ │ +│ │ │ │ Shotgun: 1 │ +│ │ │ │ │ +├─────────┼──────────────────┼────────────────────┼───────────────────┤ +│ │ │ │ │ +│ │ │ │ Telefrag: 25 │ +│ │ │ │ │ +│ │ │ Zeh: 7 │ TriggerHurt: 17 │ +│ │ │ │ │ +│ │ │ Isgalamido: 6 │ Railgun: 7 │ +│ │ │ │ │ +│ │ │ Chessus: 5 │ Rocket: 4 │ +│ │ │ │ │ +│ Game 10 │ 60 │ Assasinu Credi: 3 │ Bfg Splash: 2 │ +│ │ │ │ │ +│ │ │ Dono da Bola: 3 │ Bfg: 2 │ +│ │ │ │ │ +│ │ │ Mal: 1 │ Rocket Splash: 1 │ +│ │ │ │ │ +│ │ │ Oootsimo: -1 │ Machinegun: 1 │ +│ │ │ │ │ +│ │ │ │ Crush: 1 │ +│ │ │ │ │ +├─────────┼──────────────────┼────────────────────┼───────────────────┤ +│ │ │ │ │ +│ │ │ Isgalamido: 5 │ │ +│ │ │ │ TriggerHurt: 7 │ +│ │ │ Oootsimo: 4 │ │ +│ │ │ │ Rocket Splash: 4 │ +│ │ │ Chessus: 0 │ │ +│ │ │ │ Railgun: 4 │ +│ Game 11 │ 20 │ Mal: 0 │ │ +│ │ │ │ Bfg Splash: 3 │ +│ │ │ Zeh: 0 │ │ +│ │ │ │ Machinegun: 1 │ +│ │ │ Dono da Bola: -2 │ │ +│ │ │ │ Crush: 1 │ +│ │ │ Assasinu Credi: -3 │ │ +│ │ │ │ │ +├─────────┼──────────────────┼────────────────────┼───────────────────┤ +│ │ │ │ │ +│ │ │ │ Railgun: 38 │ +│ │ │ Isgalamido: 26 │ │ +│ │ │ │ TriggerHurt: 37 │ +│ │ │ Assasinu Credi: 20 │ │ +│ │ │ │ Rocket Splash: 35 │ +│ │ │ Oootsimo: 13 │ │ +│ │ │ │ Rocket: 25 │ +│ Game 12 │ 160 │ Chessus: 13 │ │ +│ │ │ │ Bfg Splash: 8 │ +│ │ │ Zeh: 13 │ │ +│ │ │ │ Bfg: 8 │ +│ │ │ Dono da Bola: 3 │ │ +│ │ │ │ Machinegun: 7 │ +│ │ │ Mal: -6 │ │ +│ │ │ │ Falling: 2 │ +│ │ │ │ │ +├─────────┼──────────────────┼────────────────────┼───────────────────┤ +│ │ │ │ │ +│ │ │ Oootsimo: 2 │ │ +│ │ │ │ │ +│ │ │ Zeh: 2 │ TriggerHurt: 2 │ +│ │ │ │ │ +│ │ │ Assasinu Credi: 0 │ Rocket: 1 │ +│ │ │ │ │ +│ Game 13 │ 6 │ Chessus: 0 │ Rocket Splash: 1 │ +│ │ │ │ │ +│ │ │ Mal: 0 │ Bfg Splash: 1 │ +│ │ │ │ │ +│ │ │ Dono da Bola: -1 │ Bfg: 1 │ +│ │ │ │ │ +│ │ │ Isgalamido: -1 │ │ +│ │ │ │ │ +├─────────┼──────────────────┼────────────────────┼───────────────────┤ +│ │ │ │ │ +│ │ │ │ TriggerHurt: 31 │ +│ │ │ Isgalamido: 22 │ │ +│ │ │ │ Rocket Splash: 24 │ +│ │ │ Oootsimo: 9 │ │ +│ │ │ │ Rocket: 23 │ +│ │ │ Assasinu Credi: 7 │ │ +│ │ │ │ Railgun: 20 │ +│ Game 14 │ 122 │ Chessus: 7 │ │ +│ │ │ │ Bfg Splash: 10 │ +│ │ │ Zeh: 5 │ │ +│ │ │ │ Falling: 5 │ +│ │ │ Dono da Bola: 2 │ │ +│ │ │ │ Bfg: 5 │ +│ │ │ Mal: -2 │ │ +│ │ │ │ Machinegun: 4 │ +│ │ │ │ │ +├─────────┼──────────────────┼────────────────────┼───────────────────┤ +│ │ │ │ │ +│ │ │ Assasinu Credi: 0 │ │ +│ │ │ │ │ +│ │ │ Assasinu Credi: 0 │ │ +│ │ │ │ │ +│ Game 15 │ 3 │ Oootsimo: 0 │ TriggerHurt: 3 │ +│ │ │ │ │ +│ │ │ Dono da Bola: 0 │ │ +│ │ │ │ │ +│ │ │ Isgalamido: -3 │ │ +│ │ │ │ │ +├─────────┼──────────────────┼────────────────────┼───────────────────┤ +│ │ │ │ │ +│ │ │ Assasinu Credi: 0 │ │ +│ │ │ │ │ +│ │ │ Oootsimo: 0 │ │ +│ │ │ │ │ +│ Game 16 │ 0 │ Zeh: 0 │ │ +│ │ │ │ │ +│ │ │ Isgalamido: 0 │ │ +│ │ │ │ │ +│ │ │ Dono da Bola: 0 │ │ +│ │ │ │ │ +├─────────┼──────────────────┼────────────────────┼───────────────────┤ +│ │ │ │ │ +│ │ │ Oootsimo: 1 │ │ +│ │ │ │ │ +│ │ │ Zeh: 0 │ TriggerHurt: 6 │ +│ │ │ │ │ +│ │ │ Isgalamido: 0 │ Falling: 3 │ +│ Game 17 │ 13 │ │ │ +│ │ │ Mal: -1 │ Rocket Splash: 2 │ +│ │ │ │ │ +│ │ │ Dono da Bola: -2 │ Railgun: 2 │ +│ │ │ │ │ +│ │ │ Assasinu Credi: -3 │ │ +│ │ │ │ │ +├─────────┼──────────────────┼────────────────────┼───────────────────┤ +│ │ │ │ │ +│ │ │ Assasinu Credi: 2 │ │ +│ │ │ │ │ +│ │ │ Zeh: 2 │ Rocket Splash: 4 │ +│ │ │ │ │ +│ │ │ Isgalamido: 1 │ Rocket: 1 │ +│ Game 18 │ 7 │ │ │ +│ │ │ Oootsimo: 0 │ Falling: 1 │ +│ │ │ │ │ +│ │ │ Mal: -1 │ TriggerHurt: 1 │ +│ │ │ │ │ +│ │ │ Dono da Bola: -1 │ │ +│ │ │ │ │ +├─────────┼──────────────────┼────────────────────┼───────────────────┤ +│ │ │ │ │ +│ │ │ │ Rocket Splash: 32 │ +│ │ │ Zeh: 20 │ │ +│ │ │ │ Rocket: 27 │ +│ │ │ Dono da Bola: 14 │ │ +│ │ │ │ TriggerHurt: 12 │ +│ │ │ Isgalamido: 14 │ │ +│ Game 19 │ 95 │ │ Railgun: 10 │ +│ │ │ Oootsimo: 10 │ │ +│ │ │ │ Machinegun: 7 │ +│ │ │ Assasinu Credi: 9 │ │ +│ │ │ │ Shotgun: 6 │ +│ │ │ Mal: 2 │ │ +│ │ │ │ Falling: 1 │ +│ │ │ │ │ +├─────────┼──────────────────┼────────────────────┼───────────────────┤ +│ │ │ │ │ +│ │ │ Dono da Bola: 2 │ │ +│ │ │ │ │ +│ │ │ Oootsimo: 1 │ │ +│ │ │ │ │ +│ │ │ Mal: 0 │ Rocket Splash: 2 │ +│ Game 20 │ 3 │ │ │ +│ │ │ Assasinu Credi: 0 │ Rocket: 1 │ +│ │ │ │ │ +│ │ │ Zeh: 0 │ │ +│ │ │ │ │ +│ │ │ Isgalamido: 0 │ │ +│ │ │ │ │ +├─────────┼──────────────────┼────────────────────┼───────────────────┤ +│ │ │ │ │ +│ │ │ │ Rocket Splash: 60 │ +│ │ │ Oootsimo: 22 │ │ +│ │ │ │ Rocket: 37 │ +│ │ │ Assasinu Credi: 19 │ │ +│ │ │ │ TriggerHurt: 14 │ +│ │ │ Zeh: 19 │ │ +│ Game 21 │ 131 │ │ Railgun: 9 │ +│ │ │ Isgalamido: 17 │ │ +│ │ │ │ Shotgun: 4 │ +│ │ │ Dono da Bola: 14 │ │ +│ │ │ │ Machinegun: 4 │ +│ │ │ Mal: 6 │ │ +│ │ │ │ Falling: 3 │ +│ │ │ │ │ +╰─────────┴──────────────────┴────────────────────┴───────────────────╯ diff --git a/examples/simpletest.log b/examples/simpletest.log new file mode 100644 index 0000000..5f7147e --- /dev/null +++ b/examples/simpletest.log @@ -0,0 +1,20 @@ + 0:00 ------------------------------------------------------------ + 0:00 InitGame: \sv_floodProtect\1\sv_maxPing\0\sv_minPing\0\sv_maxRate\10000\sv_minRate\0\sv_hostname\Code Miner Server\g_gametype\0\sv_privateClients\2\sv_maxclients\16\sv_allowDownload\0\dmflags\0\fraglimit\20\timelimit\15\g_maxGameClients\0\capturelimit\8\version\ioq3 1.36 linux-x86_64 Apr 12 2009\protocol\68\mapname\q3dm17\gamename\baseq3\g_needpass\0 + 20:34 ClientConnect: 2 + 20:34 ClientUserinfoChanged: 2 n\Player1\t\0\model\\xian/default\hmodel\xian/default\g_redteam\\g_blueteam\\c1\4\c2\5\hc\100\w\0\l\0\tt\0\tl\0 + 20:37 ClientBegin: 2 + 20:37 Kill: 1022 2 22: killed Player1 by MOD_TRIGGER_HURT + 20:37 ShutdownGame: + 20:37 ------------------------------------------------------------ + 20:37 ------------------------------------------------------------ + 0:00 InitGame: \sv_floodProtect\1\sv_maxPing\0\sv_minPing\0\sv_maxRate\10000\sv_minRate\0\sv_hostname\Code Miner Server\g_gametype\0\sv_privateClients\2\sv_maxclients\16\sv_allowDownload\0\dmflags\0\fraglimit\20\timelimit\15\g_maxGameClients\0\capturelimit\8\version\ioq3 1.36 linux-x86_64 Apr 12 2009\protocol\68\mapname\q3dm17\gamename\baseq3\g_needpass\0 + 20:34 ClientConnect: 2 + 20:34 ClientUserinfoChanged: 2 n\Player1\t\0\model\\xian/default\hmodel\xian/default\g_redteam\\g_blueteam\\c1\4\c2\5\hc\100\w\0\l\0\tt\0\tl\0 + 20:37 ClientBegin: 2 + 20:34 ClientConnect: 3 + 20:34 ClientUserinfoChanged: 3 n\Player2\t\0\model\\xian/default\hmodel\xian/default\g_redteam\\g_blueteam\\c1\4\c2\5\hc\100\w\0\l\0\tt\0\tl\0 + 20:37 ClientBegin: 3 + 20:37 Kill: 1022 2 22: killed Player1 by MOD_TRIGGER_HURT + 20:37 Kill: 3 2 7: Player2 killed Player1 by MOD_ROCKET_SPLASH + 20:37 ShutdownGame: + 20:37 ------------------------------------------------------------ diff --git a/src/main.rs b/src/main.rs index eaee609..17e91fa 100644 --- a/src/main.rs +++ b/src/main.rs @@ -50,3 +50,61 @@ fn main() { Err(err) => eprintln!("Could not generate report: {err}"), } } + +#[cfg(test)] +mod tests { + use self::cli::{ReportFormat, ReportType}; + + use super::*; + + #[test] + fn pseudo_integration_test_imitating_main() { + let log_str = concat!( +" 0:00 ------------------------------------------------------------\n", +" 0:00 InitGame: \\sv_floodProtect\\1\\sv_maxPing\\0\\sv_minPing\\0\\sv_maxRate\\10000\\sv_minRate\\0\\sv_hostname\\Code Miner Server\\g_gametype\\0\\sv_privateClients\\2\\sv_maxclients\\16\\sv_allowDownload\\0\\dmflags\\0\\fraglimit\\20\\timelimit\\15\\g_maxGameClients\\0\\capturelimit\\8\\version\\ioq3 1.36 linux-x86_64 Apr 12 2009\\protocol\\68\\mapname\\q3dm17\\gamename\\baseq3\\g_needpass\\0\n", +" 20:34 ClientConnect: 2\n", +" 20:34 ClientUserinfoChanged: 2 n\\Player1\\t\\0\\model\\\\xian/default\\hmodel\\xian/default\\g_redteam\\\\g_blueteam\\\\c1\\4\\c2\\5\\hc\\100\\w\\0\\l\\0\\tt\\0\\tl\\0\n", +" 20:37 ClientBegin: 2\n", +" 20:37 Kill: 1022 2 22: killed Player1 by MOD_TRIGGER_HURT\n", +" 20:37 ShutdownGame:\n", +" 20:37 ------------------------------------------------------------\n", +" 20:37 ------------------------------------------------------------\n", +" 0:00 InitGame: \\sv_floodProtect\\1\\sv_maxPing\\0\\sv_minPing\\0\\sv_maxRate\\10000\\sv_minRate\\0\\sv_hostname\\Code Miner Server\\g_gametype\\0\\sv_privateClients\\2\\sv_maxclients\\16\\sv_allowDownload\\0\\dmflags\\0\\fraglimit\\20\\timelimit\\15\\g_maxGameClients\\0\\capturelimit\\8\\version\\ioq3 1.36 linux-x86_64 Apr 12 2009\\protocol\\68\\mapname\\q3dm17\\gamename\\baseq3\\g_needpass\\0\n", +" 20:34 ClientConnect: 2\n", +" 20:34 ClientUserinfoChanged: 2 n\\Player1\\t\\0\\model\\\\xian/default\\hmodel\\xian/default\\g_redteam\\\\g_blueteam\\\\c1\\4\\c2\\5\\hc\\100\\w\\0\\l\\0\\tt\\0\\tl\\0\n", +" 20:37 ClientBegin: 2\n", +" 20:34 ClientConnect: 3\n", +" 20:34 ClientUserinfoChanged: 3 n\\Player2\\t\\0\\model\\\\xian/default\\hmodel\\xian/default\\g_redteam\\\\g_blueteam\\\\c1\\4\\c2\\5\\hc\\100\\w\\0\\l\\0\\tt\\0\\tl\\0\n", +" 20:37 ClientBegin: 3\n", +" 20:37 Kill: 1022 2 22: killed Player1 by MOD_TRIGGER_HURT\n", +" 20:37 Kill: 3 2 7: Player2 killed Player1 by MOD_ROCKET_SPLASH\n", +" 20:37 Kill: 3 2 7: Player2 killed Player1 by MOD_ROCKET_SPLASH\n", +" 20:37 ShutdownGame:\n", +" 20:37 ------------------------------------------------------------", + ); + + let games = scan_file(&log_str).unwrap(); + let result = get_report(&games, &ReportType::All, &ReportFormat::Text).unwrap(); + + let expected = concat!( + "╭────────┬──────────────────┬─────────────────┬──────────────────╮\n", + "│ │ │ │ │\n", + "│ │ Total game kills │ Kill Rank │ Death Causes │\n", + "│ │ │ (Player: Score) │ (Cause: Count) │\n", + "│ │ │ │ │\n", + "├────────┼──────────────────┼─────────────────┼──────────────────┤\n", + "│ │ │ │ │\n", + "│ Game 1 │ 1 │ Player1: -1 │ TriggerHurt: 1 │\n", + "│ │ │ │ │\n", + "├────────┼──────────────────┼─────────────────┼──────────────────┤\n", + "│ │ │ │ │\n", + "│ │ │ Player2: 2 │ Rocket Splash: 2 │\n", + "│ Game 2 │ 3 │ │ │\n", + "│ │ │ Player1: -1 │ TriggerHurt: 1 │\n", + "│ │ │ │ │\n", + "╰────────┴──────────────────┴─────────────────┴──────────────────╯", + ); + + assert_eq!(result.to_string(), expected); + } +}