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  }