summaryrefslogtreecommitdiff
path: root/internal/vocab/reader_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/vocab/reader_test.go')
-rw-r--r--internal/vocab/reader_test.go124
1 files changed, 124 insertions, 0 deletions
diff --git a/internal/vocab/reader_test.go b/internal/vocab/reader_test.go
new file mode 100644
index 0000000..ad43a07
--- /dev/null
+++ b/internal/vocab/reader_test.go
@@ -0,0 +1,124 @@
+package vocab
+
+import (
+ "os"
+ "path/filepath"
+ "reflect"
+ "testing"
+)
+
+func TestReadVocabularyFile(t *testing.T) {
+ t.Parallel()
+
+ tests := []struct {
+ name string
+ fileContent string
+ want []WordEntry
+ }{
+ {
+ name: "empty file",
+ fileContent: "",
+ want: nil,
+ },
+ {
+ name: "words with translations",
+ fileContent: "ябълка = apple\nкотка = cat\nкуче = dog",
+ want: []WordEntry{
+ {Word: "ябълка", Translation: "apple", NeedsTranslation: false, CardType: CardTypeTranslation},
+ {Word: "котка", Translation: "cat", NeedsTranslation: false, CardType: CardTypeTranslation},
+ {Word: "куче", Translation: "dog", NeedsTranslation: false, CardType: CardTypeTranslation},
+ },
+ },
+ {
+ name: "mixed format",
+ fileContent: `ябълка
+котка = cat
+куче
+хляб = bread`,
+ want: []WordEntry{
+ {Word: "ябълка", Translation: "", NeedsTranslation: false, CardType: CardTypeTranslation},
+ {Word: "котка", Translation: "cat", NeedsTranslation: false, CardType: CardTypeTranslation},
+ {Word: "куче", Translation: "", NeedsTranslation: false, CardType: CardTypeTranslation},
+ {Word: "хляб", Translation: "bread", NeedsTranslation: false, CardType: CardTypeTranslation},
+ },
+ },
+ {
+ name: "windows line endings",
+ fileContent: "ябълка\r\nкотка = cat\r\nкуче",
+ want: []WordEntry{
+ {Word: "ябълка", Translation: "", NeedsTranslation: false, CardType: CardTypeTranslation},
+ {Word: "котка", Translation: "cat", NeedsTranslation: false, CardType: CardTypeTranslation},
+ {Word: "куче", Translation: "", NeedsTranslation: false, CardType: CardTypeTranslation},
+ },
+ },
+ {
+ name: "multiple equals signs",
+ fileContent: "test = word = with = equals",
+ want: []WordEntry{
+ {Word: "test", Translation: "word = with = equals", NeedsTranslation: false, CardType: CardTypeTranslation},
+ },
+ },
+ {
+ name: "english only format",
+ fileContent: `= apple
+= cat
+= dog`,
+ want: []WordEntry{
+ {Word: "", Translation: "apple", NeedsTranslation: true, CardType: CardTypeTranslation},
+ {Word: "", Translation: "cat", NeedsTranslation: true, CardType: CardTypeTranslation},
+ {Word: "", Translation: "dog", NeedsTranslation: true, CardType: CardTypeTranslation},
+ },
+ },
+ {
+ name: "word definition format",
+ fileContent: `ябълка == плод
+котка == домашно животно`,
+ want: []WordEntry{
+ {Word: "ябълка", Translation: "плод", NeedsTranslation: false, CardType: CardTypeDefinition},
+ {Word: "котка", Translation: "домашно животно", NeedsTranslation: false, CardType: CardTypeDefinition},
+ },
+ },
+ {
+ name: "mixed formats",
+ fileContent: `ябълка = apple
+котка == домашно животно
+= dog
+стол`,
+ want: []WordEntry{
+ {Word: "ябълка", Translation: "apple", NeedsTranslation: false, CardType: CardTypeTranslation},
+ {Word: "котка", Translation: "домашно животно", NeedsTranslation: false, CardType: CardTypeDefinition},
+ {Word: "", Translation: "dog", NeedsTranslation: true, CardType: CardTypeTranslation},
+ {Word: "стол", Translation: "", NeedsTranslation: false, CardType: CardTypeTranslation},
+ },
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ t.Parallel()
+
+ tmpDir := t.TempDir()
+ tmpFile := filepath.Join(tmpDir, "vocab.txt")
+ if err := os.WriteFile(tmpFile, []byte(tt.fileContent), 0o644); err != nil {
+ t.Fatalf("write temp file: %v", err)
+ }
+
+ got, err := ReadVocabularyFile(tmpFile)
+ if err != nil {
+ t.Fatalf("ReadVocabularyFile() error = %v", err)
+ }
+ if !reflect.DeepEqual(got, tt.want) {
+ t.Fatalf("ReadVocabularyFile() = %#v, want %#v", got, tt.want)
+ }
+ })
+ }
+}
+
+func TestReadVocabularyFile_FileNotFound(t *testing.T) {
+ t.Parallel()
+
+ _, err := ReadVocabularyFile("/nonexistent/file.txt")
+ if err == nil {
+ t.Fatal("expected error for non-existent file")
+ }
+}