--- /dev/null
+/*\r
+ * Copyright 2000-2011 JetBrains s.r.o.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+package jetbrains.buildServer.nuget.tests.agent;\r
+\r
+import jetbrains.buildServer.RunBuildException;\r
+import jetbrains.buildServer.agent.BuildFinishedStatus;\r
+import jetbrains.buildServer.agent.BuildProgressLogger;\r
+import jetbrains.buildServer.nuget.agent.install.LocateNuGetConfigBuildProcess;\r
+import jetbrains.buildServer.nuget.agent.install.PackagesInstallParameters;\r
+import jetbrains.buildServer.nuget.tests.util.BuildProcessTestCase;\r
+import jetbrains.buildServer.util.FileUtil;\r
+import org.jmock.Expectations;\r
+import org.jmock.Mockery;\r
+import org.testng.annotations.BeforeMethod;\r
+import org.testng.annotations.Test;\r
+\r
+import java.io.File;\r
+\r
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 07.07.11 20:49\r
+ */\r
+public class LocateNuGetConfigBuildProcessTest extends BuildProcessTestCase {\r
+ private File myRoot;\r
+ private Mockery m;\r
+ private BuildProgressLogger log;\r
+ private PackagesInstallParameters ps;\r
+ private LocateNuGetConfigBuildProcess.Callback cb;\r
+ private LocateNuGetConfigBuildProcess proc;\r
+\r
+ @BeforeMethod\r
+ @Override\r
+ protected void setUp() throws Exception {\r
+ super.setUp();\r
+ myRoot = createTempDir();\r
+ m = new Mockery();\r
+ log = m.mock(BuildProgressLogger.class);\r
+ ps = m.mock(PackagesInstallParameters.class);\r
+ cb = m.mock(LocateNuGetConfigBuildProcess.Callback.class);\r
+ proc = new LocateNuGetConfigBuildProcess(ps, log, cb);\r
+ }\r
+\r
+ @Test\r
+ public void test_no_solutionFile() throws RunBuildException {\r
+ m.checking(new Expectations() {{\r
+ allowing(ps).getSolutionFile();\r
+ will(returnValue(new File(myRoot, "foo.sln")));\r
+ }});\r
+\r
+ assertRunException(proc, "Failed to find");\r
+ m.assertIsSatisfied();\r
+ }\r
+\r
+ @Test\r
+ public void test_only_solutionFile() throws RunBuildException {\r
+ final File sln = new File(myRoot, "foo.sln");\r
+\r
+ FileUtil.writeFile(sln, "Fake solution file");\r
+ m.checking(new Expectations() {{\r
+ allowing(ps).getSolutionFile();\r
+ will(returnValue(sln));\r
+ }});\r
+\r
+ assertRunException(proc, "Failed to find repositories.config");\r
+ m.assertIsSatisfied();\r
+ }\r
+\r
+ @Test\r
+ public void test_solutionFile_packages_empty() throws RunBuildException {\r
+ final File sln = new File(myRoot, "foo.sln");\r
+ final File packages = new File(sln, "../packages");\r
+ packages.mkdirs();\r
+\r
+ FileUtil.writeFile(sln, "Fake solution file");\r
+ m.checking(new Expectations() {{\r
+ allowing(ps).getSolutionFile();\r
+ will(returnValue(sln));\r
+ }});\r
+\r
+ assertRunException(proc, "Failed to find repositories.config");\r
+ m.assertIsSatisfied();\r
+ }\r
+\r
+ @Test\r
+ public void test_solutionFile_repositories_config_empty() throws RunBuildException {\r
+ final File sln = new File(myRoot, "foo.sln");\r
+ final File packages = new File(sln.getParentFile(), "packages");\r
+ packages.mkdirs();\r
+ final File repositories = new File(packages, "repositories.config");\r
+\r
+ FileUtil.writeFile(repositories, "<foo />");\r
+\r
+ FileUtil.writeFile(sln, "Fake solution file");\r
+ m.checking(new Expectations() {{\r
+ allowing(ps).getSolutionFile();\r
+ will(returnValue(sln));\r
+\r
+ allowing(log).message(with(new StartsWithMatcher("Found packages folder: ")));\r
+ allowing(log).message(with(new StartsWithMatcher("Found list of packages.config files: ")));\r
+ allowing(log).warning(with(new StartsWithMatcher("No packages.config files were found under solution.")));\r
+ }});\r
+\r
+ assertRunSuccessfully(proc, BuildFinishedStatus.FINISHED_SUCCESS);\r
+ m.assertIsSatisfied();\r
+ }\r
+ @Test\r
+ public void test_solutionFile_repositories_config_empty2() throws RunBuildException {\r
+ final File sln = new File(myRoot, "foo.sln");\r
+ final File packages = new File(sln.getParentFile(), "packages");\r
+ packages.mkdirs();\r
+ final File repositories = new File(packages, "repositories.config");\r
+\r
+ FileUtil.writeFile(repositories, "<foo /");\r
+\r
+ FileUtil.writeFile(sln, "Fake solution file");\r
+ m.checking(new Expectations() {{\r
+ allowing(ps).getSolutionFile();\r
+ will(returnValue(sln));\r
+\r
+ allowing(log).message(with(new StartsWithMatcher("Found packages folder: ")));\r
+ allowing(log).message(with(new StartsWithMatcher("Found list of packages.config files: ")));\r
+ allowing(log).warning(with(new StartsWithMatcher("No packages.config files were found under solution.")));\r
+ }});\r
+\r
+ assertRunException(proc, "Failed to parse repositories.config at ");\r
+ m.assertIsSatisfied();\r
+ }\r
+\r
+ @Test\r
+ public void test_solutionFile_repositories_config_no_packages_config() throws RunBuildException {\r
+ final File sln = new File(myRoot, "foo.sln");\r
+ final File packages = new File(sln.getParentFile(), "packages");\r
+ packages.mkdirs();\r
+ final File repositories = new File(packages, "repositories.config");\r
+\r
+ FileUtil.writeFile(repositories,\r
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +\r
+ "<repositories>\n" +\r
+ " <repository path=\"..\\Mvc\\packages.config\" />\n" +\r
+ " <repository path=\"c:\\Mvc2\\packages.config\" />\n" +\r
+ "</repositories>");\r
+\r
+ FileUtil.writeFile(sln, "Fake solution file");\r
+ m.checking(new Expectations() {{\r
+ allowing(ps).getSolutionFile();\r
+ will(returnValue(sln));\r
+\r
+ oneOf(cb).onPackagesConfigFound(new File(myRoot, "Mvc/packages.config"), packages);\r
+ oneOf(cb).onPackagesConfigFound(new File("c:\\Mvc2/packages.config"), packages);\r
+\r
+ allowing(log).message(with(new StartsWithMatcher("Found packages folder: ")));\r
+ allowing(log).message(with(new StartsWithMatcher("Found list of packages.config files: ")));\r
+ allowing(log).warning(with(new StartsWithMatcher("No packages.config files were found under solution.")));\r
+ }});\r
+\r
+ assertRunSuccessfully(proc, BuildFinishedStatus.FINISHED_SUCCESS);\r
+ m.assertIsSatisfied();\r
+ }\r
+\r
+}\r
--- /dev/null
+/*\r
+ * Copyright 2000-2011 JetBrains s.r.o.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+package jetbrains.buildServer.nuget.tests.agent;\r
+\r
+import org.hamcrest.BaseMatcher;\r
+import org.hamcrest.Description;\r
+import org.jetbrains.annotations.NotNull;\r
+\r
+/**\r
+* Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+* Date: 08.07.11 1:15\r
+*/\r
+public class StartsWithMatcher extends BaseMatcher<String> {\r
+ private final String myPrefix;\r
+\r
+ StartsWithMatcher(@NotNull final String prefix) {\r
+ myPrefix = prefix;\r
+ }\r
+\r
+ public boolean matches(Object o) {\r
+ return o instanceof String && ((String) o).startsWith(myPrefix);\r
+ }\r
+\r
+ public void describeTo(Description description) {\r
+ description.appendText("String starts with ").appendValue(myPrefix);\r
+ }\r
+}\r
\r
package jetbrains.buildServer.nuget.tests.util;\r
\r
-import jetbrains.buildServer.BaseTestCase;\r
import jetbrains.buildServer.RunBuildException;\r
import jetbrains.buildServer.agent.BuildFinishedStatus;\r
import jetbrains.buildServer.agent.BuildProcess;\r
-import jetbrains.buildServer.util.StringUtil;\r
+import jetbrains.buildServer.nuget.tests.LoggingTestCase;\r
import org.jetbrains.annotations.NotNull;\r
import org.jetbrains.annotations.Nullable;\r
import org.testng.Assert;\r
-import org.testng.annotations.BeforeMethod;\r
import org.testng.annotations.DataProvider;\r
\r
import java.util.ArrayList;\r
* Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
* Date: 07.07.11 20:08\r
*/\r
-public class BuildProcessTestCase extends BaseTestCase {\r
- private List<String> myLog;\r
-\r
- protected synchronized void log(@NotNull String message) {\r
- myLog.add(message);\r
- }\r
-\r
- @BeforeMethod\r
- @Override\r
- protected void setUp() throws Exception {\r
- super.setUp();\r
- myLog = new ArrayList<String>();\r
- }\r
+public class BuildProcessTestCase extends LoggingTestCase {\r
\r
@DataProvider(name = "buildFinishStatuses")\r
public Object[][] buildStatuses() {\r
proc.waitFor();\r
Assert.fail("Exception expected");\r
} catch (RunBuildException e) {\r
- Assert.assertEquals(message, e.getMessage());\r
+ Assert.assertTrue(e.getMessage().contains(message), e.toString());\r
}\r
}\r
\r
- protected void assertLog(String... gold) {\r
- String actual = StringUtil.join(myLog, "\n");\r
- String expected = StringUtil.join(gold, "\n");\r
- Assert.assertEquals(actual, expected);\r
- }\r
-\r
/**\r
* Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
* Date: 07.07.11 20:07\r