github.com/jfrog/jfrog-cli-go@v1.22.1-0.20200318093948-4826ef344ffd/artifactory/utils/nuget/solution/solution_test.go (about) 1 package solution 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "github.com/jfrog/jfrog-client-go/artifactory/buildinfo" 7 "os" 8 "path/filepath" 9 "reflect" 10 "runtime" 11 "strings" 12 "testing" 13 ) 14 15 func TestEmptySolution(t *testing.T) { 16 solution, err := Load(".", "") 17 if err != nil { 18 t.Error(err) 19 } 20 21 expected := &buildinfo.BuildInfo{} 22 buildInfo, err := solution.BuildInfo("") 23 if err != nil { 24 t.Error("An error occurred while creating the build info object", err.Error()) 25 } 26 if !reflect.DeepEqual(buildInfo, expected) { 27 expectedString, _ := json.Marshal(expected) 28 buildInfoString, _ := json.Marshal(buildInfo) 29 t.Errorf("Expecting: \n%s \nGot: \n%s", expectedString, buildInfoString) 30 } 31 } 32 33 func TestParseSln(t *testing.T) { 34 pwd, err := os.Getwd() 35 if err != nil { 36 t.Error(err) 37 } 38 39 testsDataDir := filepath.Join(pwd, "testsdata") 40 41 tests := []struct { 42 name string 43 slnPath string 44 expected []string 45 }{ 46 {"oneproject", filepath.Join(testsDataDir, "oneproject.sln"), []string{`Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfig", "packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}" 47 EndProject`}}, 48 {"multiProjects", filepath.Join(testsDataDir, "multiprojects.sln"), []string{`Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfigmulti", "packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}" 49 EndProject`, `Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfiganothermulti", "test\packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}" 50 EndProject`}}, 51 } 52 for _, test := range tests { 53 t.Run(test.name, func(t *testing.T) { 54 results, err := parseSlnFile(test.slnPath) 55 if err != nil { 56 t.Error(err) 57 } 58 59 replaceCarriageSign(results) 60 61 if !reflect.DeepEqual(test.expected, results) { 62 t.Error(fmt.Sprintf("Expected %s, got %s", test.expected, results)) 63 } 64 }) 65 } 66 } 67 68 func TestParseProject(t *testing.T) { 69 tests := []struct { 70 name string 71 projectLine string 72 expectedCsprojPath string 73 expectedProjectName string 74 }{ 75 {"packagename", `Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagename", "packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}" 76 EndProject`, filepath.Join("jfrog", "path", "test", "packagesconfig.csproj"), "packagename"}, 77 {"withpath", `Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagename", "packagesconfig/packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}" 78 EndProject`, filepath.Join("jfrog", "path", "test", "packagesconfig", "packagesconfig.csproj"), "packagename"}, 79 {"sameprojectname", `Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfig", "packagesconfig/packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}" 80 EndProject`, filepath.Join("jfrog", "path", "test", "packagesconfig", "packagesconfig.csproj"), "packagesconfig"}, 81 } 82 83 path := filepath.Join("jfrog", "path", "test") 84 for _, test := range tests { 85 t.Run(test.name, func(t *testing.T) { 86 projectName, csprojPath, err := parseProject(test.projectLine, path) 87 if err != nil { 88 t.Error(err) 89 } 90 if csprojPath != test.expectedCsprojPath { 91 t.Error(fmt.Sprintf("Expected %s, got %s", test.expectedCsprojPath, csprojPath)) 92 } 93 if projectName != test.expectedProjectName { 94 t.Error(fmt.Sprintf("Expected %s, got %s", test.expectedProjectName, projectName)) 95 } 96 }) 97 } 98 } 99 100 func TestGetProjectsFromSlns(t *testing.T) { 101 pwd, err := os.Getwd() 102 if err != nil { 103 t.Error(err) 104 } 105 106 testsDataDir := filepath.Join(pwd, "testsdata") 107 tests := []struct { 108 name string 109 solution solution 110 expectedProjects []string 111 }{ 112 {"withoutSlnFile", solution{path: testsDataDir, slnFile: "", projects: nil}, []string{`Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfigmulti", "packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}" 113 EndProject`, `Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfiganothermulti", "test\packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}" 114 EndProject`, `Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfig", "packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}" 115 EndProject`}, 116 }, 117 {"withSlnFile", solution{path: testsDataDir, slnFile: "oneproject.sln", projects: nil}, []string{`Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfig", "packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}" 118 EndProject`}, 119 }, 120 } 121 122 for _, test := range tests { 123 t.Run(test.name, func(t *testing.T) { 124 results, err := test.solution.getProjectsFromSlns() 125 if err != nil { 126 t.Error(err) 127 } 128 replaceCarriageSign(results) 129 130 if !reflect.DeepEqual(test.expectedProjects, results) { 131 t.Error(fmt.Sprintf("Expected %s, got %s", test.expectedProjects, results)) 132 } 133 }) 134 } 135 } 136 137 // If running on Windows, replace \r\n with \n. 138 func replaceCarriageSign(results []string) { 139 if runtime.GOOS == "windows" { 140 for i, result := range results { 141 results[i] = strings.Replace(result, "\r\n", "\n", -1) 142 } 143 } 144 }