diff options
Diffstat (limited to 'internal/vocab/reader_test.go')
| -rw-r--r-- | internal/vocab/reader_test.go | 124 |
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") + } +} |
