add new ant paths matcher
[teamcity/dotNetPackagesSupport.git] / nuget-tests / src / jetbrains / buildServer / nuget / tests / agent / MatchFilesBuildProcessTest.java
1 /*\r
2  * Copyright 2000-2011 JetBrains s.r.o.\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  * http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 package jetbrains.buildServer.nuget.tests.agent;\r
18 \r
19 import com.intellij.openapi.util.SystemInfo;\r
20 import jetbrains.buildServer.RunBuildException;\r
21 import jetbrains.buildServer.agent.AgentRunningBuild;\r
22 import jetbrains.buildServer.agent.BuildFinishedStatus;\r
23 import jetbrains.buildServer.agent.BuildRunnerContext;\r
24 import jetbrains.buildServer.nuget.agent.parameters.NuGetPublishParameters;\r
25 import jetbrains.buildServer.nuget.agent.runner.publish.MatchFilesBuildProcess;\r
26 import jetbrains.buildServer.nuget.tests.Strings;\r
27 import jetbrains.buildServer.nuget.tests.util.BuildProcessTestCase;\r
28 import jetbrains.buildServer.util.FileUtil;\r
29 import org.jmock.Expectations;\r
30 import org.jmock.Mockery;\r
31 import org.testng.annotations.BeforeMethod;\r
32 import org.testng.annotations.Test;\r
33 \r
34 import java.io.File;\r
35 import java.util.ArrayList;\r
36 import java.util.List;\r
37 \r
38 /**\r
39  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
40  * Date: 21.07.11 20:38\r
41  */\r
42 public class MatchFilesBuildProcessTest extends BuildProcessTestCase {\r
43   private Mockery m;\r
44 \r
45   private MatchFilesBuildProcess match;\r
46   private AgentRunningBuild build;\r
47   private BuildRunnerContext ctx;\r
48   private NuGetPublishParameters params;\r
49   private MatchFilesBuildProcess.Callback cb;\r
50   private File root;\r
51   private List<String> files;\r
52 \r
53   @BeforeMethod\r
54   @Override\r
55   protected void setUp() throws Exception {\r
56     super.setUp();\r
57 \r
58     m = new Mockery();\r
59     files = new ArrayList<String>();\r
60     build = m.mock(AgentRunningBuild.class);\r
61     ctx = m.mock(BuildRunnerContext.class);\r
62     params = m.mock(NuGetPublishParameters.class);\r
63     cb = m.mock(MatchFilesBuildProcess.Callback.class);\r
64 \r
65     match = new MatchFilesBuildProcess(ctx, params, cb);\r
66     root = createTempDir();\r
67 \r
68     m.checking(new Expectations() {{\r
69       allowing(params).getFiles();\r
70       will(returnValue(files));\r
71       allowing(ctx).getBuild();\r
72       will(returnValue(build));\r
73       allowing(build).getCheckoutDirectory();\r
74       will(returnValue(root));\r
75     }});\r
76   }\r
77 \r
78   @Test\r
79   public void test_match_relative_file() throws RunBuildException {\r
80     final File dest = new File(root, "aaa.txt");\r
81     FileUtil.writeFile(dest, "some content");\r
82 \r
83     m.checking(new Expectations() {{\r
84       oneOf(cb).fileFound(dest);\r
85     }});\r
86 \r
87     files.add("aaa.txt");\r
88     assertRunSuccessfully(match, BuildFinishedStatus.FINISHED_SUCCESS);\r
89 \r
90     m.assertIsSatisfied();\r
91   }\r
92 \r
93   @Test\r
94   public void test_match_relative_file_worng_symbols() throws RunBuildException {\r
95     final File dest = new File(root, "aaa.txt");\r
96     FileUtil.writeFile(dest, "some content");\r
97 \r
98     m.checking(new Expectations() {{\r
99       oneOf(cb).fileFound(dest);\r
100     }});\r
101 \r
102     files.add("aaa.txt");\r
103     files.add(Strings.EXOTIC);\r
104     assertRunSuccessfully(match, BuildFinishedStatus.FINISHED_SUCCESS);\r
105 \r
106     m.assertIsSatisfied();\r
107   }\r
108 \r
109   @Test\r
110   public void test_match_relative_file_windows_slashes() throws RunBuildException {\r
111     if (!SystemInfo.isWindows) return;\r
112     final File dest = new File(root, "a/b/c/d/e/aaa.txt");\r
113     FileUtil.createParentDirs(dest);\r
114     FileUtil.writeFile(dest, "some content");\r
115 \r
116     m.checking(new Expectations() {{\r
117       oneOf(cb).fileFound(dest);\r
118     }});\r
119 \r
120     files.add("a\\b\\c\\d\\e\\aaa.txt");\r
121     assertRunSuccessfully(match, BuildFinishedStatus.FINISHED_SUCCESS);\r
122 \r
123     m.assertIsSatisfied();\r
124   }\r
125 \r
126   @Test\r
127   public void test_match_relative_file_slashes() throws RunBuildException {\r
128     if (!SystemInfo.isWindows) return;\r
129     final File dest = new File(root, "a/b/c/d/e/aaa.txt");\r
130     FileUtil.createParentDirs(dest);\r
131     FileUtil.writeFile(dest, "some content");\r
132 \r
133     m.checking(new Expectations() {{\r
134       oneOf(cb).fileFound(dest);\r
135     }});\r
136 \r
137     files.add("a/b/c/d/e/aaa.txt");\r
138     assertRunSuccessfully(match, BuildFinishedStatus.FINISHED_SUCCESS);\r
139 \r
140     m.assertIsSatisfied();\r
141   }\r
142 \r
143   @Test\r
144   public void test_match_relative_file_wildcard() throws RunBuildException {\r
145     final File dest = new File(root, "q/e/r/t/aaa.txt");\r
146     FileUtil.createParentDirs(dest);\r
147     FileUtil.writeFile(dest, "some content");\r
148 \r
149     m.checking(new Expectations() {{\r
150       oneOf(cb).fileFound(dest);\r
151     }});\r
152 \r
153     files.add("**/*.txt");\r
154     assertRunSuccessfully(match, BuildFinishedStatus.FINISHED_SUCCESS);\r
155 \r
156     m.assertIsSatisfied();\r
157   }\r
158 \r
159   @Test\r
160   public void test_match_relative_file_wildcard3() throws RunBuildException {\r
161     final File dest = new File(root, "q/e/r/t/aaa.txt");\r
162     FileUtil.createParentDirs(dest);\r
163     FileUtil.writeFile(dest, "some content");\r
164 \r
165     final File dest2 = new File(root, "q/v/i/k/abbb.txt");\r
166     FileUtil.createParentDirs(dest2);\r
167     FileUtil.writeFile(dest2, "some content");\r
168 \r
169     m.checking(new Expectations() {{\r
170       oneOf(cb).fileFound(dest);\r
171       oneOf(cb).fileFound(dest2);\r
172     }});\r
173 \r
174     files.add("**/*a.txt");\r
175     files.add("**/*b.txt");\r
176     assertRunSuccessfully(match, BuildFinishedStatus.FINISHED_SUCCESS);\r
177 \r
178     m.assertIsSatisfied();\r
179   }\r
180 \r
181   @Test\r
182   public void test_match_relative_file_wildcard2() throws RunBuildException {\r
183     final File dest = new File(root, "q/e/r/t/aaa.txt");\r
184     FileUtil.createParentDirs(dest);\r
185     FileUtil.writeFile(dest, "some content");\r
186 \r
187     final File dest2 = new File(root, "q/e/p/t/aaa.txt");\r
188     FileUtil.createParentDirs(dest2);\r
189     FileUtil.writeFile(dest2, "some content");\r
190 \r
191     final File dest3 = new File(root, "q/e/p/z/bbb.txt");\r
192     FileUtil.createParentDirs(dest3);\r
193     FileUtil.writeFile(dest3, "some content");\r
194 \r
195     m.checking(new Expectations() {{\r
196       oneOf(cb).fileFound(dest);\r
197       oneOf(cb).fileFound(dest2);\r
198     }});\r
199 \r
200     files.add("**/a*.txt");\r
201     assertRunSuccessfully(match, BuildFinishedStatus.FINISHED_SUCCESS);\r
202 \r
203     m.assertIsSatisfied();\r
204   }\r
205 \r
206 \r
207   @Test\r
208   public void test_match_fullPath_file() throws RunBuildException {\r
209     final File dest = new File(root, "aaa.txt");\r
210     FileUtil.writeFile(dest, "some content");\r
211 \r
212     m.checking(new Expectations() {{\r
213       oneOf(cb).fileFound(dest);\r
214     }});\r
215 \r
216     files.add(FileUtil.getCanonicalFile(dest).getPath());\r
217     assertRunSuccessfully(match, BuildFinishedStatus.FINISHED_SUCCESS);\r
218 \r
219     m.assertIsSatisfied();\r
220   }\r
221 \r
222   @Test\r
223   public void test_match_full_file_wildcard3() throws RunBuildException {\r
224     final File dest = new File(root, "q/e/r/t/aaa.txt");\r
225     FileUtil.createParentDirs(dest);\r
226     FileUtil.writeFile(dest, "some content");\r
227 \r
228     m.checking(new Expectations() {{\r
229       oneOf(cb).fileFound(dest);\r
230     }});\r
231 \r
232     files.add(dest.getParentFile() + "/*");\r
233     assertRunSuccessfully(match, BuildFinishedStatus.FINISHED_SUCCESS);\r
234 \r
235     m.assertIsSatisfied();\r
236   }\r
237 \r
238 \r
239   @Test\r
240   public void test_match_fullPath_file2() throws RunBuildException {\r
241     final File dest = new File(root, "a/b/c/aaa.txt");\r
242     FileUtil.createParentDirs(dest);\r
243     FileUtil.writeFile(dest, "some content");\r
244 \r
245     m.checking(new Expectations() {{\r
246       oneOf(cb).fileFound(dest);\r
247     }});\r
248 \r
249     files.add(FileUtil.getCanonicalFile(dest).getPath());\r
250     assertRunSuccessfully(match, BuildFinishedStatus.FINISHED_SUCCESS);\r
251 \r
252     m.assertIsSatisfied();\r
253   }\r
254 \r
255   @Test\r
256   public void test_match_no_files() {\r
257     final File dest = new File(root, "aaa.txt");\r
258     FileUtil.writeFile(dest, "some content");\r
259 \r
260     assertRunException(match, "Failed to find files to publish matching");\r
261 \r
262     m.assertIsSatisfied();\r
263   }\r
264 }\r