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