github.com/XML-Comp/XML-Comp@v0.0.42-0.20180719122048-292fe466b944/comparer/comparer_test.go (about) 1 package comparer 2 3 import ( 4 "bufio" 5 "fmt" 6 "io/ioutil" 7 "os" 8 "path/filepath" 9 "reflect" 10 "strings" 11 "testing" 12 ) 13 14 var wd, _ = os.Getwd() 15 16 func TestCompareFolder(t *testing.T) { 17 tests := []struct { 18 name string 19 PathA string 20 PathB string 21 wantErr bool 22 }{ 23 { 24 name: "no dir", 25 PathA: "fakeDir1", 26 PathB: "fakeDir2", 27 wantErr: true, 28 }, 29 { 30 name: "valid paths", 31 PathA: filepath.Join(wd, "testPaths", "Original"), 32 PathB: filepath.Join(wd, "testPaths", "Translation"), 33 wantErr: false, 34 }, 35 { 36 name: "valid Dirs should add new dirs", 37 PathA: filepath.Join(wd, "testPaths", "English"), 38 PathB: filepath.Join(wd, "testPaths", "Translation"), 39 wantErr: false, 40 }, 41 } 42 for _, test := range tests { 43 err := Compare(test.PathA, test.PathB) 44 if (err != nil) != test.wantErr { 45 t.Errorf("Compare() error = %v, want error %v", err, test.wantErr) 46 } 47 } 48 defer os.Remove(filepath.Join(wd, "testPaths", "Translation", "Dir1")) 49 defer os.Remove(filepath.Join(wd, "testPaths", "Translation", "dir")) 50 } 51 52 func TestReadFile(t *testing.T) { 53 DocType = "xml" 54 type args struct { 55 file string 56 path string 57 } 58 tests := []struct { 59 name string 60 args args 61 want map[string]string 62 wantErr bool 63 }{ 64 { 65 name: "read file", 66 args: args{ 67 file: "File01.xml", 68 path: filepath.Join(wd, "testPaths", "Original"), 69 }, 70 want: map[string]string{"<linha1>": "TEste", "<linha2>": "teste", "<linha3>": "teste"}, 71 wantErr: false, 72 }, 73 { 74 name: "cant read invalid file", 75 args: args{ 76 file: "inexistant.xml", 77 path: filepath.Join(wd, "testPaths", "Original"), 78 }, 79 wantErr: true, 80 }, 81 { 82 name: "cant read empty file name/path", 83 wantErr: true, 84 }, 85 } 86 for _, tt := range tests { 87 t.Run(tt.name, func(t *testing.T) { 88 got, err := readFile(tt.args.file, tt.args.path) 89 if (err != nil) != tt.wantErr { 90 t.Errorf("readFile() error = %v, wantErr %v", err, tt.wantErr) 91 } 92 if !reflect.DeepEqual(got, tt.want) { 93 t.Errorf("readFile() = %v, want %v", got, tt.want) 94 } 95 }) 96 } 97 } 98 99 func TestFindMissing(t *testing.T) { 100 type args struct { 101 original map[string]string 102 translation map[string]string 103 } 104 tests := []struct { 105 name string 106 args args 107 want map[string]string 108 }{ 109 { 110 name: "find missing Tags", 111 args: args{ 112 original: map[string]string{"<linha 1>": "", "<linha 2>": "", "<linha 3>": "teste"}, 113 translation: map[string]string{"<linha 1>": "", "<linha 2>": ""}, 114 }, 115 want: map[string]string{"<linha 3>": "teste"}, 116 }, 117 } 118 for _, tt := range tests { 119 t.Run(tt.name, func(t *testing.T) { 120 if got := findMissing(tt.args.original, tt.args.translation); !reflect.DeepEqual(got, tt.want) { 121 t.Errorf("findMissing() = %v, want %v", got, tt.want) 122 } 123 }) 124 } 125 } 126 127 func TestReadFiles(t *testing.T) { 128 tests := []struct { 129 name string 130 orgF string 131 trltF string 132 wantErr bool 133 }{ 134 { 135 name: "testing equal files", 136 orgF: filepath.Join("testPaths", "Original", "File01.xml"), 137 trltF: filepath.Join("testPaths", "Translation", "File01.xml"), 138 wantErr: false, 139 }, 140 { 141 name: "testing no such original file", 142 orgF: filepath.Join("testPaths", "Original", "invalid.xml"), 143 wantErr: true, 144 }, 145 { 146 name: "invalid translation path", 147 orgF: filepath.Join("xayah", "fake"), 148 wantErr: true, 149 }, 150 } 151 for _, tt := range tests { 152 t.Run(tt.name, func(t *testing.T) { 153 if err := readFiles(filepath.Join(wd, tt.orgF), filepath.Join(wd, tt.trltF)); (err != nil) != tt.wantErr { 154 t.Errorf("name: %s\nreadFiles() error = %v, wantErr %v", tt.name, err, tt.wantErr) 155 } 156 }) 157 } 158 } 159 160 func TestReadFilesWithOutdatedTags(t *testing.T) { 161 tests := []struct { 162 name string 163 orgF string 164 trltF string 165 wantErr bool 166 }{ 167 { 168 name: "testing equal files", 169 orgF: filepath.Join("testPaths", "Original", "File03.xml"), 170 trltF: filepath.Join("testPaths", "Translation", "File03.xml"), 171 wantErr: false, 172 }, 173 } 174 for _, tt := range tests { 175 t.Run(tt.name, func(t *testing.T) { 176 if err := readFiles(filepath.Join(wd, tt.orgF), filepath.Join(wd, tt.trltF)); (err != nil) != tt.wantErr { 177 t.Errorf("readFiles() error = %v, wantErr %v", err, tt.wantErr) 178 } 179 }) 180 } 181 f, err := os.Open(filepath.Join(wd, tests[0].trltF)) 182 if err != nil { 183 t.Error(err) 184 } 185 defer f.Close() 186 scanner := bufio.NewScanner(f) 187 var outdated bool 188 for scanner.Scan() { 189 if strings.Contains(scanner.Text(), "OUTDATED") { 190 outdated = true 191 } 192 } 193 if !outdated { 194 t.Error("File File03.xml should have a outdated tag") 195 } 196 err = ioutil.WriteFile(filepath.Join(wd, "testPaths", "Translation", "File03.xml"), []byte("<linha4></linha4>"), 0644) 197 if err != nil { 198 t.Error(err) 199 } 200 } 201 202 func TestCheckTransDir(t *testing.T) { 203 os.Chdir("..") 204 wd, _ := os.Getwd() 205 tests := []struct { 206 name string 207 originalDir string 208 translationDir string 209 wantErr bool 210 }{ 211 { 212 name: "test translation has no dir1", 213 originalDir: filepath.Join(wd, "English", "Dir1"), 214 translationDir: filepath.Join(wd, "Translation"), 215 wantErr: false, 216 }, 217 // local: shows no err 218 // had to remove this, bc it should return nil 219 // but on CI when it calls os.Open(...), somehow it 220 // shows an error of "no such file or directory" 221 // and tests return another after that: (on mkdir call) 222 // "checkTransDir() error = mkdir Dir1: file exists, wantErr false" 223 // { 224 // name: "test same name dirs should pass", 225 // originalDir: filepath.Join(wd, "English", "Dir1"), 226 // translationDir: filepath.Join(wd, "English"), 227 // wantErr: true, 228 // }, 229 { 230 name: "test fake dirs should err", 231 originalDir: filepath.Join(wd, "English", "Dir1"), 232 translationDir: filepath.Join(wd, "kai'sa"), 233 wantErr: true, 234 }, 235 } 236 for _, tt := range tests { 237 if err := checkTransDirExists(tt.originalDir, tt.translationDir); (err != nil) != tt.wantErr { 238 t.Errorf("\nname: %s\ndir: %s\ncheckTransDir() error = %v, wantErr %v", tt.name, tt.translationDir, err, tt.wantErr) 239 } 240 } 241 err := os.Remove(filepath.Join(wd, "Translation", "Dir1")) 242 if err != nil { 243 t.Errorf("Error = %v", err) 244 } 245 } 246 247 func Test_writeToFileMissingTags(t *testing.T) { 248 type args struct { 249 trltF string 250 missingTags map[string]string 251 outdated bool 252 } 253 f, err := ioutil.TempFile("", "") 254 if err != nil { 255 t.Error(err) 256 } 257 defer os.Remove(f.Name()) 258 tests := []struct { 259 name string 260 args args 261 wantErr bool 262 }{ 263 { 264 name: "cant open invalid translation file", 265 args: args{ 266 trltF: filepath.Join("testPaths", "Translation", "garen.txt"), 267 }, 268 wantErr: true, 269 }, 270 { 271 name: "writes correctly tags and ignores if it's a commentary or doctype description", 272 args: args{ 273 trltF: f.Name(), 274 missingTags: map[string]string{ 275 fmt.Sprintf("<%v", pathSep): "", 276 "<!-": "", 277 "<ezreal>": "", 278 "<minerva>": "", 279 "<robo>": "", 280 }, 281 }, 282 wantErr: false, 283 }, 284 { 285 name: "should pass on empty element in map", 286 args: args{ 287 trltF: f.Name(), 288 missingTags: map[string]string{"": ""}, 289 }, 290 wantErr: false, 291 }, 292 } 293 for _, tt := range tests { 294 t.Run(tt.name, func(t *testing.T) { 295 if err = writeToFileMissingTags(tt.args.trltF, tt.args.missingTags, tt.args.outdated); (err != nil) != tt.wantErr { 296 t.Errorf("name: %s\n writeToFileMissingTags() error = %v, wantErr %v", tt.name, err, tt.wantErr) 297 } 298 err = ioutil.WriteFile(f.Name(), []byte(""), 0644) 299 if err != nil { 300 t.Error(err) 301 } 302 }) 303 } 304 } 305 306 func Test_ReadFiles(t *testing.T) { 307 tests := []struct { 308 name string 309 orgF string 310 trltF string 311 wantErr bool 312 }{ 313 { 314 name: "test inexistant translation file", 315 wantErr: true, 316 }, 317 } 318 for _, tt := range tests { 319 t.Run(tt.name, func(t *testing.T) { 320 if err := readFiles(tt.orgF, tt.trltF); (err != nil) != tt.wantErr { 321 t.Errorf("readFiles() error = %v, wantErr %v", err, tt.wantErr) 322 } 323 }) 324 } 325 }