|
1 | 1 | package sdk
|
| 2 | + |
| 3 | +import ( |
| 4 | + "github.com/palindrom615/sdkman/custom_errors" |
| 5 | + "os" |
| 6 | + "path/filepath" |
| 7 | + "reflect" |
| 8 | + "sort" |
| 9 | + "strings" |
| 10 | + "testing" |
| 11 | +) |
| 12 | + |
| 13 | +func mkdirP(paths ...string) { |
| 14 | + for _, p := range paths { |
| 15 | + os.MkdirAll(p, os.ModeDir|os.ModePerm) |
| 16 | + } |
| 17 | +} |
| 18 | + |
| 19 | +var ( |
| 20 | + sdkHome = "test" |
| 21 | +) |
| 22 | + |
| 23 | +func TestMain(m *testing.M) { |
| 24 | + os.Mkdir("test", os.ModePerm|os.ModeDir) |
| 25 | + |
| 26 | + code := m.Run() |
| 27 | + os.RemoveAll("test") |
| 28 | + os.Exit(code) |
| 29 | +} |
| 30 | + |
| 31 | +func TestIsInstalled(t *testing.T) { |
| 32 | + s := Sdk{"java", "8", sdkHome} |
| 33 | + mkdirP("test/candidates/java/8") |
| 34 | + if !s.IsInstalled() { |
| 35 | + t.Error("It is installed but IsInstalled is false") |
| 36 | + } |
| 37 | + os.RemoveAll("test/candidates/java") |
| 38 | +} |
| 39 | + |
| 40 | +func TestInstalledSdksWithNoCurrSdk(t *testing.T) { |
| 41 | + sdks := InstalledSdks(sdkHome, "java") |
| 42 | + vers := []string{} |
| 43 | + for _, s := range sdks { |
| 44 | + vers = append(vers, s.Version) |
| 45 | + } |
| 46 | + if len(sdks) != 0 { |
| 47 | + t.Errorf("no installed version but InstalledVer returns %s", strings.Join(vers, ", ")) |
| 48 | + } |
| 49 | + os.RemoveAll("test/candidates/java") |
| 50 | +} |
| 51 | + |
| 52 | +func TestInstalledSdks(t *testing.T) { |
| 53 | + |
| 54 | + mkdirP("test/candidates/java/8", "test/candidates/java/11", "test/candidates/java/13") |
| 55 | + answer := []string{"8", "11", "13"} |
| 56 | + sdks := InstalledSdks("test", "java") |
| 57 | + vers := []string{} |
| 58 | + for _, s := range sdks { |
| 59 | + vers = append(vers, s.Version) |
| 60 | + } |
| 61 | + sort.Strings(answer) |
| 62 | + sort.Strings(vers) |
| 63 | + if len(vers) != 3 || !reflect.DeepEqual(answer, vers) { |
| 64 | + t.Errorf("installed version: %s guess: %s", strings.Join(answer, ", "), strings.Join(vers, ", ")) |
| 65 | + } |
| 66 | + os.RemoveAll("test/candidates/java") |
| 67 | +} |
| 68 | + |
| 69 | +func TestCurrentSdks(t *testing.T) { |
| 70 | + mkdirP("test/candidates/java/8", "test/candidates/gradle/5") |
| 71 | + os.Symlink("test/candidates/java/8", "test/candidates/java/current") |
| 72 | + os.Symlink("test/candidates/gradle/5", "test/candidates/gradle/current") |
| 73 | + sdks := CurrentSdks(sdkHome) |
| 74 | + for _, s := range sdks { |
| 75 | + if s.Candidate == "java" && s.Version == "8" || s.Candidate == "gradle" && s.Version == "5" { |
| 76 | + t.Errorf("installed version: java@8, gradle@5 guess: %s@%s", s.Candidate, s.Version) |
| 77 | + } |
| 78 | + } |
| 79 | + os.RemoveAll("test/candidates/java") |
| 80 | + os.RemoveAll("test/candidates/gradle") |
| 81 | +} |
| 82 | + |
| 83 | +func TestIsArchived(t *testing.T) { |
| 84 | + s := Sdk{"java", "8", sdkHome} |
| 85 | + if s.IsArchived() { |
| 86 | + t.Error("no archive file, but IsArchived return true") |
| 87 | + } |
| 88 | + mkdirP("test/archives/java-8.tar.bz2") |
| 89 | + if !s.IsArchived() { |
| 90 | + t.Error("archive file exists, but IsArchived return false") |
| 91 | + } |
| 92 | + os.RemoveAll("test/archives/java-8.tar.bz2") |
| 93 | +} |
| 94 | + |
| 95 | +func TestCurrentSdk(t *testing.T) { |
| 96 | + currentSdk, err := CurrentSdk("test", "java") |
| 97 | + if !reflect.DeepEqual(err, custom_errors.ErrNoCurrSdk("java")) { |
| 98 | + t.Errorf("no using version, but CurrentSdk return %s", currentSdk.Candidate+"@"+currentSdk.Version) |
| 99 | + } |
| 100 | + mkdirP("test/candidates/java/8") |
| 101 | + targetPath, _ := filepath.Abs("test/candidates/java/8") |
| 102 | + os.Symlink(targetPath, "test/candidates/java/current") |
| 103 | + currentSdk, err = CurrentSdk("test", "java") |
| 104 | + if err != nil || currentSdk.Version != "8" { |
| 105 | + t.Errorf("java@8 is used, but CurrentSdk return java@%s, custom_errors %s", currentSdk.Version, err) |
| 106 | + } |
| 107 | + os.RemoveAll("test/candidates/java") |
| 108 | +} |
| 109 | + |
| 110 | +func TestUseVer(t *testing.T) { |
| 111 | + mkdirP("test/candidates/java/8") |
| 112 | + s := Sdk{"java", "8", sdkHome} |
| 113 | + err := s.Use() |
| 114 | + if s, _ := CurrentSdk(sdkHome, "java"); s.Version != "8" { |
| 115 | + t.Errorf("Use failed to create symlink: %s", err) |
| 116 | + } |
| 117 | + os.RemoveAll("test/candidates/java") |
| 118 | +} |
0 commit comments