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