kcl-lang.io/kpm@v0.8.7-0.20240520061008-9fc4c5efc8c7/pkg/package/toml_test.go (about) 1 package pkg 2 3 import ( 4 "fmt" 5 "os" 6 "path/filepath" 7 "testing" 8 9 "github.com/BurntSushi/toml" 10 "github.com/stretchr/testify/assert" 11 12 "kcl-lang.io/kpm/pkg/utils" 13 ) 14 15 const testTomlDir = "test_data_toml" 16 17 func TestMarshalTOML(t *testing.T) { 18 modfile := ModFile{ 19 Pkg: Package{ 20 Name: "MyKcl", 21 Edition: "v0.0.1", 22 Version: "v0.0.1", 23 Include: []string{"src/", "README.md", "LICENSE"}, 24 Exclude: []string{"target/", ".git/", "*.log"}, 25 }, 26 Dependencies: Dependencies{ 27 make(map[string]Dependency), 28 }, 29 } 30 31 dep := Dependency{ 32 Name: "MyKcl1", 33 FullName: "MyKcl1_v0.0.2", 34 Source: Source{ 35 Git: &Git{ 36 Url: "https://github.com/test/MyKcl1.git", 37 Tag: "v0.0.2", 38 }, 39 }, 40 } 41 42 ociDep := Dependency{ 43 Name: "MyOciKcl1", 44 FullName: "MyOciKcl1_0.0.1", 45 Version: "0.0.1", 46 Source: Source{ 47 Oci: &Oci{ 48 Tag: "0.0.1", 49 }, 50 }, 51 } 52 53 modfile.Dependencies.Deps["MyOciKcl1_0.0.1"] = ociDep 54 modfile.Dependencies.Deps["MyKcl1_v0.0.2"] = dep 55 56 got_data := modfile.MarshalTOML() 57 58 expected_data, _ := os.ReadFile(filepath.Join(getTestDir(testTomlDir), "expected.toml")) 59 expected_toml := utils.RmNewline(string(expected_data)) 60 61 reversed_expected_data, _ := os.ReadFile(filepath.Join(getTestDir(testTomlDir), "expected_reversed.toml")) 62 reversed_expected_toml := utils.RmNewline(string(reversed_expected_data)) 63 fmt.Printf("expected_toml: '%q'\n", expected_toml) 64 fmt.Printf("reversed_expected_toml: '%q'\n", reversed_expected_toml) 65 fmt.Printf("modfile: '%q'\n", got_data) 66 fmt.Printf("expected_toml == got_data: '%t'\n", expected_toml == got_data) 67 fmt.Printf("reversed_expected_toml == got_data: '%t'\n", reversed_expected_toml == got_data) 68 assert.Equal(t, (utils.RmNewline(expected_toml) == utils.RmNewline(got_data)) || 69 (utils.RmNewline(reversed_expected_toml) == utils.RmNewline(got_data)), true, "got data is ", expected_toml, reversed_expected_toml, got_data) 70 } 71 72 func TestUnMarshalTOML(t *testing.T) { 73 modfile := ModFile{} 74 expected_data, _ := os.ReadFile(filepath.Join(getTestDir(testTomlDir), "expected.toml")) 75 76 _ = toml.Unmarshal(expected_data, &modfile) 77 fmt.Printf("modfile: %v\n", modfile) 78 79 assert.Equal(t, modfile.Pkg.Name, "MyKcl") 80 assert.Equal(t, modfile.Pkg.Edition, "v0.0.1") 81 assert.Equal(t, modfile.Pkg.Version, "v0.0.1") 82 assert.Equal(t, modfile.Pkg.Include, []string{"src/", "README.md", "LICENSE"}) 83 assert.Equal(t, modfile.Pkg.Exclude, []string{"target/", ".git/", "*.log"}) 84 assert.Equal(t, len(modfile.Dependencies.Deps), 2) 85 assert.NotEqual(t, modfile.Dependencies.Deps["MyKcl1"], nil) 86 assert.Equal(t, modfile.Dependencies.Deps["MyKcl1"].Name, "MyKcl1") 87 assert.Equal(t, modfile.Dependencies.Deps["MyKcl1"].FullName, "MyKcl1_v0.0.2") 88 assert.NotEqual(t, modfile.Dependencies.Deps["MyKcl1"].Source.Git, nil) 89 assert.Equal(t, modfile.Dependencies.Deps["MyKcl1"].Source.Git.Url, "https://github.com/test/MyKcl1.git") 90 assert.Equal(t, modfile.Dependencies.Deps["MyKcl1"].Source.Git.Tag, "v0.0.2") 91 92 assert.NotEqual(t, modfile.Dependencies.Deps["MyOciKcl1"], nil) 93 assert.Equal(t, modfile.Dependencies.Deps["MyOciKcl1"].Name, "MyOciKcl1") 94 assert.Equal(t, modfile.Dependencies.Deps["MyOciKcl1"].FullName, "MyOciKcl1_0.0.1") 95 assert.NotEqual(t, modfile.Dependencies.Deps["MyOciKcl1"].Source.Oci, nil) 96 assert.Equal(t, modfile.Dependencies.Deps["MyOciKcl1"].Source.Oci.Tag, "0.0.1") 97 } 98 99 func TestMarshalLockToml(t *testing.T) { 100 dep := Dependency{ 101 Name: "MyKcl1", 102 FullName: "MyKcl1_v0.0.2", 103 Version: "v0.0.2", 104 Sum: "hjkasdahjksdasdhjk", 105 Source: Source{ 106 Git: &Git{ 107 Url: "https://github.com/test/MyKcl1.git", 108 Tag: "v0.0.2", 109 }, 110 }, 111 } 112 113 ociDep := Dependency{ 114 Name: "MyOciKcl1", 115 FullName: "MyOciKcl1_0.0.1", 116 Version: "0.0.1", 117 Sum: "hjkasdahjksdasdhjk", 118 Source: Source{ 119 Oci: &Oci{ 120 Reg: "test_reg", 121 Repo: "test_repo", 122 Tag: "0.0.1", 123 }, 124 }, 125 } 126 127 deps := Dependencies{ 128 make(map[string]Dependency), 129 } 130 131 deps.Deps[dep.Name] = dep 132 deps.Deps[ociDep.Name] = ociDep 133 tomlStr, _ := deps.MarshalLockTOML() 134 expected_data, _ := os.ReadFile(filepath.Join(getTestDir(testTomlDir), "expected_lock.toml")) 135 expected_toml := string(expected_data) 136 assert.Equal(t, utils.RmNewline(expected_toml), utils.RmNewline(tomlStr)) 137 } 138 139 func TestUnmarshalLockToml(t *testing.T) { 140 deps := Dependencies{ 141 make(map[string]Dependency), 142 } 143 144 expected_data, _ := os.ReadFile(filepath.Join(getTestDir(testTomlDir), "expected_lock.toml")) 145 expected_toml := string(expected_data) 146 _ = deps.UnmarshalLockTOML(expected_toml) 147 148 assert.Equal(t, len(deps.Deps), 2) 149 assert.NotEqual(t, deps.Deps["MyKcl1"], nil) 150 assert.Equal(t, deps.Deps["MyKcl1"].Name, "MyKcl1") 151 assert.Equal(t, deps.Deps["MyKcl1"].FullName, "MyKcl1_v0.0.2") 152 assert.Equal(t, deps.Deps["MyKcl1"].Version, "v0.0.2") 153 assert.Equal(t, deps.Deps["MyKcl1"].Sum, "hjkasdahjksdasdhjk") 154 assert.NotEqual(t, deps.Deps["MyKcl1"].Source.Git, nil) 155 assert.Equal(t, deps.Deps["MyKcl1"].Source.Git.Url, "https://github.com/test/MyKcl1.git") 156 assert.Equal(t, deps.Deps["MyKcl1"].Source.Git.Tag, "v0.0.2") 157 158 assert.NotEqual(t, deps.Deps["MyOciKcl1"], nil) 159 assert.Equal(t, deps.Deps["MyOciKcl1"].Name, "MyOciKcl1") 160 assert.Equal(t, deps.Deps["MyOciKcl1"].FullName, "MyOciKcl1_0.0.1") 161 assert.Equal(t, deps.Deps["MyOciKcl1"].Version, "0.0.1") 162 assert.Equal(t, deps.Deps["MyOciKcl1"].Sum, "hjkasdahjksdasdhjk") 163 assert.NotEqual(t, deps.Deps["MyOciKcl1"].Source.Oci, nil) 164 assert.Equal(t, deps.Deps["MyOciKcl1"].Source.Oci.Reg, "test_reg") 165 assert.Equal(t, deps.Deps["MyOciKcl1"].Source.Oci.Repo, "test_repo") 166 assert.Equal(t, deps.Deps["MyOciKcl1"].Source.Oci.Tag, "0.0.1") 167 } 168 169 func TestUnMarshalTOMLWithProfile(t *testing.T) { 170 modfile, err := LoadModFile(getTestDir("test_profile")) 171 assert.Equal(t, err, nil) 172 assert.Equal(t, modfile.Pkg.Name, "kpm") 173 assert.Equal(t, modfile.Pkg.Version, "0.0.1") 174 assert.Equal(t, modfile.Pkg.Edition, "0.0.1") 175 assert.Equal(t, *modfile.Profiles.Entries, []string{"main.k", "xxx/xxx/dir", "test.yaml"}) 176 } 177 178 func TestUnMarshalOciUrl(t *testing.T) { 179 testDataDir := getTestDir("test_oci_url") 180 181 testCases := []struct { 182 Name string 183 DepName string 184 DepFullName string 185 DepVersion string 186 DepSourceReg string 187 DepSourceRepo string 188 DepSourceTag string 189 }{ 190 {"unmarshal_0", "oci_pkg_name", "oci_pkg_name_0.0.1", "0.0.1", "ghcr.io", "test/helloworld", "0.0.1"}, 191 {"unmarshal_1", "oci_pkg_name", "oci_pkg_name_0.0.1", "0.0.1", "localhost:5001", "test/helloworld", "0.0.1"}, 192 } 193 194 for _, tc := range testCases { 195 modfile, err := LoadModFile(filepath.Join(testDataDir, tc.Name)) 196 assert.Equal(t, err, nil) 197 assert.Equal(t, len(modfile.Dependencies.Deps), 1) 198 assert.Equal(t, modfile.Dependencies.Deps["oci_pkg_name"].Name, tc.DepName) 199 assert.Equal(t, modfile.Dependencies.Deps["oci_pkg_name"].FullName, tc.DepFullName) 200 assert.Equal(t, modfile.Dependencies.Deps["oci_pkg_name"].Version, tc.DepVersion) 201 assert.Equal(t, modfile.Dependencies.Deps["oci_pkg_name"].Source.Oci.Reg, tc.DepSourceReg) 202 assert.Equal(t, modfile.Dependencies.Deps["oci_pkg_name"].Source.Oci.Repo, tc.DepSourceRepo) 203 assert.Equal(t, modfile.Dependencies.Deps["oci_pkg_name"].Source.Oci.Tag, tc.DepVersion) 204 } 205 } 206 207 func TestMarshalOciUrl(t *testing.T) { 208 testDataDir := getTestDir("test_oci_url") 209 210 expectPkgPath := filepath.Join(testDataDir, "marshal_0", "kcl_mod_bk") 211 gotPkgPath := filepath.Join(testDataDir, "marshal_0", "kcl_mod_tmp") 212 213 expect, err := LoadModFile(expectPkgPath) 214 assert.Equal(t, err, nil) 215 216 err = os.MkdirAll(gotPkgPath, 0755) 217 assert.Equal(t, err, nil) 218 gotFile, _ := os.Create(filepath.Join(gotPkgPath, "kcl.mod")) 219 220 defer func() { 221 err = gotFile.Close() 222 assert.Equal(t, err, nil) 223 err = os.RemoveAll(gotPkgPath) 224 assert.Equal(t, err, nil) 225 }() 226 227 modfile := ModFile{ 228 Pkg: Package{ 229 Name: "marshal_0", 230 Edition: "v0.9.0", 231 Version: "0.0.1", 232 }, 233 Dependencies: Dependencies{ 234 make(map[string]Dependency), 235 }, 236 } 237 238 ociDep := Dependency{ 239 Name: "oci_pkg", 240 FullName: "oci_pkg_0.0.1", 241 Version: "0.0.1", 242 Source: Source{ 243 Oci: &Oci{ 244 Tag: "0.0.1", 245 }, 246 }, 247 } 248 249 modfile.Dependencies.Deps["oci_pkg_0.0.1"] = ociDep 250 251 got_data := modfile.MarshalTOML() 252 _, err = gotFile.WriteString(got_data) 253 assert.Equal(t, err, nil) 254 255 got, err := LoadModFile(gotPkgPath) 256 assert.Equal(t, err, nil) 257 258 assert.Equal(t, expect.Pkg.Name, got.Pkg.Name) 259 assert.Equal(t, expect.Pkg.Edition, got.Pkg.Edition) 260 assert.Equal(t, expect.Pkg.Version, got.Pkg.Version) 261 assert.Equal(t, len(expect.Dependencies.Deps), len(got.Dependencies.Deps)) 262 assert.Equal(t, expect.Dependencies.Deps["oci_pkg"].Name, got.Dependencies.Deps["oci_pkg"].Name) 263 assert.Equal(t, expect.Dependencies.Deps["oci_pkg"].FullName, got.Dependencies.Deps["oci_pkg"].FullName) 264 assert.Equal(t, expect.Dependencies.Deps["oci_pkg"].Source.Oci.Reg, got.Dependencies.Deps["oci_pkg"].Source.Oci.Reg) 265 assert.Equal(t, expect.Dependencies.Deps["oci_pkg"].Source.Oci.Repo, got.Dependencies.Deps["oci_pkg"].Source.Oci.Repo) 266 assert.Equal(t, expect.Dependencies.Deps["oci_pkg"].Source.Oci.Tag, got.Dependencies.Deps["oci_pkg"].Source.Oci.Tag) 267 assert.Equal(t, expect.Dependencies.Deps["oci_pkg"].Source.IntoOciUrl(), got.Dependencies.Deps["oci_pkg"].Source.IntoOciUrl()) 268 } 269 270 func TestMarshalOciUrlIntoFile(t *testing.T) { 271 testDataDir := getTestDir("test_oci_url") 272 273 testCases := []string{"marshal_1", "marshal_2", "marshal_3"} 274 275 for _, tc := range testCases { 276 readKclModPath := filepath.Join(testDataDir, tc) 277 expectPath := filepath.Join(readKclModPath, "expect.mod") 278 279 readKclModFile, err := LoadModFile(readKclModPath) 280 assert.Equal(t, err, nil) 281 writeKclModFileContents := readKclModFile.MarshalTOML() 282 expectKclModFileContents, err := os.ReadFile(expectPath) 283 assert.Equal(t, err, nil) 284 285 assert.Equal(t, utils.RmNewline(string(expectKclModFileContents)), utils.RmNewline(writeKclModFileContents)) 286 } 287 }