1 /*
2  * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License").
5  * You may not use this file except in compliance with the License.
6  * A copy of the License is located at
7  *
8  *  http://aws.amazon.com/apache2.0
9  *
10  * or in the "license" file accompanying this file. This file is distributed
11  * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12  * express or implied. See the License for the specific language governing
13  * permissions and limitations under the License.
14  */
15 
16 package software.amazon.smithy.go.codegen;
17 
18 import static org.hamcrest.MatcherAssert.assertThat;
19 
20 import java.util.List;
21 import org.hamcrest.MatcherAssert;
22 import org.hamcrest.Matchers;
23 import org.junit.jupiter.api.Test;
24 import software.amazon.smithy.codegen.core.SymbolDependency;
25 
26 public class GoDependencyTest {
27     @Test
testStandardLibraryDependency()28     public void testStandardLibraryDependency() {
29         GoDependency dependency = GoDependency.builder()
30                 .type(GoDependency.Type.STANDARD_LIBRARY)
31                 .importPath("net/http")
32                 .version("1.14")
33                 .build();
34         List<SymbolDependency> symbolDependencies = dependency.getDependencies();
35         assertThat(symbolDependencies.size(), Matchers.equalTo(1));
36         SymbolDependency symbolDependency = symbolDependencies.get(0);
37 
38         assertThat(symbolDependency.getDependencyType(), Matchers.equalTo("stdlib"));
39         assertThat(symbolDependency.getPackageName(), Matchers.equalTo(""));
40         assertThat(symbolDependency.getVersion(), Matchers.equalTo("1.14"));
41     }
42 
43     @Test
testSingleDependency()44     public void testSingleDependency() {
45         GoDependency dependency = GoDependency.builder()
46                 .type(GoDependency.Type.DEPENDENCY)
47                 .sourcePath("github.com/aws/smithy-go")
48                 .importPath("github.com/aws/smithy-go/middleware")
49                 .version("1.2.3")
50                 .build();
51         List<SymbolDependency> symbolDependencies = dependency.getDependencies();
52         assertThat(symbolDependencies.size(), Matchers.equalTo(1));
53         SymbolDependency symbolDependency = symbolDependencies.get(0);
54 
55         assertThat(symbolDependency.getDependencyType(), Matchers.equalTo("dependency"));
56         assertThat(symbolDependency.getPackageName(), Matchers.equalTo("github.com/aws/smithy-go"));
57         assertThat(symbolDependency.getVersion(), Matchers.equalTo("1.2.3"));
58     }
59 
60     @Test
testDependencyWithDependencies()61     public void testDependencyWithDependencies() {
62         GoDependency dependency = GoDependency.builder()
63                 .type(GoDependency.Type.DEPENDENCY)
64                 .sourcePath("github.com/aws/aws-sdk-go-v2")
65                 .importPath("github.com/aws/aws-sdk-go-v2/aws/middleware")
66                 .version("1.2.3")
67                 .addDependency(GoDependency.builder()
68                         .type(GoDependency.Type.DEPENDENCY)
69                         .sourcePath("github.com/aws/smithy-go")
70                         .importPath("github.com/aws/smithy-go/middleware")
71                         .version("3.4.5")
72                         .build())
73                 .build();
74         List<SymbolDependency> symbolDependencies = dependency.getDependencies();
75         assertThat(symbolDependencies.size(), Matchers.equalTo(2));
76         assertThat(symbolDependencies, Matchers.containsInAnyOrder(
77                 Matchers.equalTo(SymbolDependency.builder()
78                         .dependencyType("dependency")
79                         .packageName("github.com/aws/aws-sdk-go-v2")
80                         .version("1.2.3")
81                         .build()),
82                 Matchers.equalTo(SymbolDependency.builder()
83                         .dependencyType("dependency")
84                         .packageName("github.com/aws/smithy-go")
85                         .version("3.4.5")
86                         .build())
87         ));
88     }
89 
90     @Test
testDependencyWithNestedDependencies()91     public void testDependencyWithNestedDependencies() {
92         GoDependency dependency = GoDependency.builder()
93                 .type(GoDependency.Type.DEPENDENCY)
94                 .sourcePath("github.com/aws/aws-sdk-go-v2")
95                 .importPath("github.com/aws/aws-sdk-go-v2/aws/middleware")
96                 .version("1.2.3")
97                 .addDependency(GoDependency.builder()
98                         .type(GoDependency.Type.DEPENDENCY)
99                         .sourcePath("github.com/aws/smithy-go")
100                         .importPath("github.com/aws/smithy-go/middleware")
101                         .version("3.4.5")
102                         .addDependency(GoDependency.builder()
103                                 .type(GoDependency.Type.DEPENDENCY)
104                                 .sourcePath("github.com/awslabs/smithy-go-extensions")
105                                 .importPath("github.com/awslabs/smithy-go-extensions/foobar")
106                                 .version("6.7.8")
107                                 .addDependency(GoDependency.builder()
108                                         .type(GoDependency.Type.STANDARD_LIBRARY)
109                                         .importPath("net/http")
110                                         .version("1.14")
111                                         .build())
112                                 .addDependency(GoDependency.builder()
113                                         .type(GoDependency.Type.STANDARD_LIBRARY)
114                                         .importPath("time")
115                                         .version("1.14")
116                                         .build())
117                                 .build())
118                         .build())
119                 .build();
120 
121         List<SymbolDependency> symbolDependencies = dependency.getDependencies();
122         assertThat(symbolDependencies.size(), Matchers.equalTo(4));
123         assertThat(symbolDependencies, Matchers.containsInAnyOrder(
124                 Matchers.equalTo(SymbolDependency.builder()
125                         .dependencyType("dependency")
126                         .packageName("github.com/aws/aws-sdk-go-v2")
127                         .version("1.2.3")
128                         .build()),
129                 Matchers.equalTo(SymbolDependency.builder()
130                         .dependencyType("dependency")
131                         .packageName("github.com/aws/smithy-go")
132                         .version("3.4.5")
133                         .build()),
134                 Matchers.equalTo(SymbolDependency.builder()
135                         .dependencyType("dependency")
136                         .packageName("github.com/awslabs/smithy-go-extensions")
137                         .version("6.7.8")
138                         .build()),
139                 Matchers.equalTo(SymbolDependency.builder()
140                         .dependencyType("stdlib")
141                         .packageName("")
142                         .version("1.14")
143                         .build())
144         ));
145     }
146 }
147