github.com/osievert/jfrog-cli-core@v1.2.7/artifactory/utils/dotnet/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 testdataDir := filepath.Join(pwd, "testdata") 40 41 tests := []struct { 42 name string 43 slnPath string 44 expected []string 45 }{ 46 {"oneproject", filepath.Join(testdataDir, "oneproject.sln"), []string{`Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfig", "packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}" 47 EndProject`}}, 48 {"multiProjects", filepath.Join(testdataDir, "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 TestParseProjectLine(t *testing.T) { 69 tests := []struct { 70 name string 71 projectLine string 72 expectedProjFilePath 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 {"vbproj", `Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfig", "packagesconfig/packagesconfig.vbproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}" 82 EndProject`, filepath.Join("jfrog", "path", "test", "packagesconfig", "packagesconfig.vbproj"), "packagesconfig"}, 83 } 84 85 path := filepath.Join("jfrog", "path", "test") 86 for _, test := range tests { 87 t.Run(test.name, func(t *testing.T) { 88 projectName, projFilePath, err := parseProjectLine(test.projectLine, path) 89 if err != nil { 90 t.Error(err) 91 } 92 if projFilePath != test.expectedProjFilePath { 93 t.Error(fmt.Sprintf("Expected %s, got %s", test.expectedProjFilePath, projFilePath)) 94 } 95 if projectName != test.expectedProjectName { 96 t.Error(fmt.Sprintf("Expected %s, got %s", test.expectedProjectName, projectName)) 97 } 98 }) 99 } 100 } 101 102 func TestGetProjectsFromSlns(t *testing.T) { 103 pwd, err := os.Getwd() 104 if err != nil { 105 t.Error(err) 106 } 107 108 testdataDir := filepath.Join(pwd, "testdata") 109 tests := []struct { 110 name string 111 solution solution 112 expectedProjects []string 113 }{ 114 {"withoutSlnFile", solution{path: testdataDir, slnFile: "", projects: nil}, []string{`Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfigmulti", "packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}" 115 EndProject`, `Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfiganothermulti", "test\packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}" 116 EndProject`, `Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfig", "packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}" 117 EndProject`}, 118 }, 119 {"withSlnFile", solution{path: testdataDir, slnFile: "oneproject.sln", projects: nil}, []string{`Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "packagesconfig", "packagesconfig.csproj", "{D1FFA0DC-0ACC-4108-ADC1-2A71122C09AF}" 120 EndProject`}, 121 }, 122 } 123 124 for _, test := range tests { 125 t.Run(test.name, func(t *testing.T) { 126 results, err := test.solution.getProjectsFromSlns() 127 if err != nil { 128 t.Error(err) 129 } 130 replaceCarriageSign(results) 131 132 if !reflect.DeepEqual(test.expectedProjects, results) { 133 t.Error(fmt.Sprintf("Expected %s, got %s", test.expectedProjects, results)) 134 } 135 }) 136 } 137 } 138 139 // If running on Windows, replace \r\n with \n. 140 func replaceCarriageSign(results []string) { 141 if runtime.GOOS == "windows" { 142 for i, result := range results { 143 results[i] = strings.Replace(result, "\r\n", "\n", -1) 144 } 145 } 146 }