1st commit, making a pokedex lol
This commit is contained in:
commit
9bfdfb7f07
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
pokedexcli
|
||||||
|
repl.log
|
||||||
12
command_exit.go
Normal file
12
command_exit.go
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
func commandExit() error {
|
||||||
|
fmt.Println("Closing the Pokedex... Goodbye!")
|
||||||
|
os.Exit(0)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
15
command_help.go
Normal file
15
command_help.go
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
func commandHelp() error {
|
||||||
|
fmt.Print("Pokedex CLI - available commands:\n\n")
|
||||||
|
for _, v := range getCommands() {
|
||||||
|
fmt.Printf("%s %s\n", v.name, v.description)
|
||||||
|
}
|
||||||
|
fmt.Println()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
3
go.mod
Normal file
3
go.mod
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
module k3gtpi.jumpingcrab.com/go-learning/pokedexcli
|
||||||
|
|
||||||
|
go 1.24.5
|
||||||
67
repl.go
Normal file
67
repl.go
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
"bufio"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
type cliCommand struct {
|
||||||
|
name string
|
||||||
|
description string
|
||||||
|
callback func() error
|
||||||
|
}
|
||||||
|
|
||||||
|
var supportedCommands map[string]cliCommand
|
||||||
|
|
||||||
|
func startRepl() {
|
||||||
|
reader := bufio.NewScanner(os.Stdin)
|
||||||
|
fmt.Println("Welcome to the Pokedex!")
|
||||||
|
for {
|
||||||
|
// Print prompt
|
||||||
|
fmt.Printf("Pokedex > ")
|
||||||
|
reader.Scan()
|
||||||
|
|
||||||
|
words := cleanInput(reader.Text())
|
||||||
|
if len(words) == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
commandName := words[0]
|
||||||
|
|
||||||
|
command, valid := getCommands()[commandName]
|
||||||
|
if !valid {
|
||||||
|
fmt.Println("Unknown command.")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if err := command.callback(); err != nil {
|
||||||
|
fmt.Printf("Encountered error running command: %v\n", command.name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func cleanInput(text string) []string {
|
||||||
|
if len(text) == 0 {
|
||||||
|
fmt.Println("Input is empty!")
|
||||||
|
return []string{}
|
||||||
|
}
|
||||||
|
output := strings.ToLower(text)
|
||||||
|
words := strings.Fields(output)
|
||||||
|
return words
|
||||||
|
}
|
||||||
|
|
||||||
|
func getCommands() map[string]cliCommand{
|
||||||
|
return map[string]cliCommand{
|
||||||
|
"help": {
|
||||||
|
name: "help",
|
||||||
|
description: "Prints this help menu.",
|
||||||
|
callback: commandHelp,
|
||||||
|
},
|
||||||
|
"exit": {
|
||||||
|
name: "exit",
|
||||||
|
description: "Exits the Pokedex",
|
||||||
|
callback: commandExit,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
59
repl_test.go
Normal file
59
repl_test.go
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestCleanInput(t * testing.T) {
|
||||||
|
cases := []struct {
|
||||||
|
input string
|
||||||
|
expected []string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
input: " hello world ",
|
||||||
|
expected: []string{"hello", "world"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
input: "Charmander Bulbasaur PIKACHU",
|
||||||
|
expected: []string{"charmander", "bulbasaur", "pikachu"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
input: "",
|
||||||
|
expected: []string{},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
successCount := 0
|
||||||
|
failCount := 0
|
||||||
|
passed := true
|
||||||
|
|
||||||
|
for _, c := range cases {
|
||||||
|
output := cleanInput(c.input)
|
||||||
|
for i := range output {
|
||||||
|
word := output[i]
|
||||||
|
expectedWord := c.expected[i]
|
||||||
|
if word != expectedWord {
|
||||||
|
passed = false
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !passed {
|
||||||
|
t.Errorf(`
|
||||||
|
===================
|
||||||
|
Input: %v
|
||||||
|
Expected: %v
|
||||||
|
Output: %v
|
||||||
|
`, c.input, c.expected, output)
|
||||||
|
failCount++
|
||||||
|
} else {
|
||||||
|
fmt.Printf(`
|
||||||
|
===================
|
||||||
|
Input: %v
|
||||||
|
Expected: %v
|
||||||
|
Output: %v
|
||||||
|
`, c.input, c.expected, output)
|
||||||
|
successCount++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Printf("%d passed, %d failed", successCount, failCount)
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user