/*************************GO-LICENSE-START********************************* * Copyright 2014 ThoughtWorks, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *************************GO-LICENSE-END***********************************/ package com.thoughtworks.go.domain.materials.svn; import java.util.List; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; import org.junit.Test; public class SvnExternalParserTest { @Test public void shouldParseOneLineSvnExternalOnCurrentFolderForSvn14() { String svnExternals = "http://10.18.3.171:8080/svn/connect4/trunk - CSharp http://10.18.3.171:8080/svn/CSharpProject/trunk\n"; List<SvnExternal> externals = new SvnExternalParser().parse(svnExternals, "http://10.18.3.171:8080/svn/connect4/trunk", "http://10.18.3.171:8080/svn"); assertThat(externals.get(0), is(new SvnExternal("CSharp", "http://10.18.3.171:8080/svn/CSharpProject/trunk"))); } @Test public void shouldParseOneLineSvnExternalOnMultipleLevelFolderForSvn14() { String svnExternals = "http://10.18.3.171:8080/svn/connect4/trunk/dir1/dir2 - externals-2 http://10.18.3.171:8080/svn/CSharpProject/trunk/\n"; List<SvnExternal> externals = new SvnExternalParser().parse(svnExternals, "http://10.18.3.171:8080/svn/connect4/trunk", "http://10.18.3.171:8080/svn"); assertThat(externals.get(0), is(new SvnExternal("dir1/dir2/externals-2", "http://10.18.3.171:8080/svn/CSharpProject/trunk/"))); } @Test public void shouldParseMultipleLineSvnExternalForSvn14() { String svnExternals = "http://10.18.3.171:8080/svn/connect4/trunk - externals-2 http://10.18.3.171:8080/svn/CSharpProject/trunk/\n" + "dir1 http://10.18.3.171:8080/svn/CSharpProject/trunk"; List<SvnExternal> externals = new SvnExternalParser().parse(svnExternals, "http://10.18.3.171:8080/svn/connect4/trunk", "http://10.18.3.171:8080/svn"); assertThat(externals.get(0), is(new SvnExternal("externals-2", "http://10.18.3.171:8080/svn/CSharpProject/trunk/"))); assertThat(externals.get(1), is(new SvnExternal("dir1", "http://10.18.3.171:8080/svn/CSharpProject/trunk"))); } @Test public void shouldParseMultipleSvnExternalsForSvn14() { String svnExternals = "http://10.18.3.171:8080/svn/connect4/trunk - externals-2 http://10.18.3.171:8080/svn/CSharpProject/trunk\n" + "dir1 http://10.18.3.171:8080/svn/CSharpProject/trunk\n" + "\n" + "http://10.18.3.171:8080/svn/connect4/trunk/dir2 - externals-2 http://10.18.3.171:8080/svn/CSharpProject/trunk\n" + "dir3 http://10.18.3.171:8080/svn/CSharpProject/trunk\n"; List<SvnExternal> externals = new SvnExternalParser().parse(svnExternals, "http://10.18.3.171:8080/svn/connect4/trunk", "http://10.18.3.171:8080/svn"); assertThat(externals.get(0), is(new SvnExternal("externals-2", "http://10.18.3.171:8080/svn/CSharpProject/trunk"))); assertThat(externals.get(1), is(new SvnExternal("dir1", "http://10.18.3.171:8080/svn/CSharpProject/trunk"))); assertThat(externals.get(2), is(new SvnExternal("dir2/externals-2", "http://10.18.3.171:8080/svn/CSharpProject/trunk"))); assertThat(externals.get(3), is(new SvnExternal("dir2/dir3", "http://10.18.3.171:8080/svn/CSharpProject/trunk"))); } @Test public void shouldParseOneLineSvnExternalOnCurrentFolderForSvn15() { String svnExternals = "http://10.18.3.171:8080/svn/connect4/trunk - http://10.18.3.171:8080/svn/CSharpProject/trunk externals-2 \n"; List<SvnExternal> externals = new SvnExternalParser().parse(svnExternals, "http://10.18.3.171:8080/svn/connect4/trunk", "http://10.18.3.171:8080/svn"); assertThat(externals.get(0), is(new SvnExternal("externals-2", "http://10.18.3.171:8080/svn/CSharpProject/trunk"))); } @Test public void shouldParseOneLineSvnExternalOnMultipleLevelFolderForSvn15() { String svnExternals = "http://10.18.3.171:8080/svn/connect4/trunk/dir1/dir2 - http://10.18.3.171:8080/svn/CSharpProject/trunk externals-2 \n"; List<SvnExternal> externals = new SvnExternalParser().parse(svnExternals, "http://10.18.3.171:8080/svn/connect4/trunk", "http://10.18.3.171:8080/svn"); assertThat(externals.get(0), is(new SvnExternal("dir1/dir2/externals-2", "http://10.18.3.171:8080/svn/CSharpProject/trunk"))); } @Test public void shouldParseMultipleLineSvnExternalForSvn15() { String svnExternals = "http://10.18.3.171:8080/svn/connect4/trunk - http://10.18.3.171:8080/svn/CSharpProject/trunk/ externals-2 \n" + "http://10.18.3.171:8080/svn/CSharpProject/trunk dir1 "; List<SvnExternal> externals = new SvnExternalParser().parse(svnExternals, "http://10.18.3.171:8080/svn/connect4/trunk", "http://10.18.3.171:8080/svn"); assertThat(externals.get(0), is(new SvnExternal("externals-2", "http://10.18.3.171:8080/svn/CSharpProject/trunk/"))); assertThat(externals.get(1), is(new SvnExternal("dir1", "http://10.18.3.171:8080/svn/CSharpProject/trunk"))); } @Test public void shouldParseMultipleSvnExternalsForSvn15() { String svnExternals = "http://10.18.3.171:8080/svn/connect4/trunk - http://10.18.3.171:8080/svn/CSharpProject/trunk externals-2 \n" + "http://10.18.3.171:8080/svn/CSharpProject/trunk dir1 \n" + "\n" + "http://10.18.3.171:8080/svn/connect4/trunk/dir2 - svn://10.18.3.171:8080/svn/CSharpProject/trunk externals-2 \n" + "svn://10.18.3.171:8080/svn/CSharpProject/trunk dir3 \n"; List<SvnExternal> externals = new SvnExternalParser().parse(svnExternals, "http://10.18.3.171:8080/svn/connect4/trunk", "http://10.18.3.171:8080/svn"); assertThat(externals.get(0), is(new SvnExternal("externals-2", "http://10.18.3.171:8080/svn/CSharpProject/trunk"))); assertThat(externals.get(1), is(new SvnExternal("dir1", "http://10.18.3.171:8080/svn/CSharpProject/trunk"))); assertThat(externals.get(2), is(new SvnExternal("dir2/externals-2", "svn://10.18.3.171:8080/svn/CSharpProject/trunk"))); assertThat(externals.get(3), is(new SvnExternal("dir2/dir3", "svn://10.18.3.171:8080/svn/CSharpProject/trunk"))); } @Test public void shouldSupportFileProtocal() throws Exception { String svnExternals = "file:///tmp/repo/project/trunk - end2end file:///tmp/testSvnRepo-1246619674077/end2end"; List<SvnExternal> externals = new SvnExternalParser().parse(svnExternals, "file:///tmp/repo/project", "http://10.18.3.171:8080/svn"); assertThat(externals.get(0), is(new SvnExternal("trunk/end2end", "file:///tmp/testSvnRepo-1246619674077/end2end"))); } @Test public void shouldSupportUrlWithEncodedSpaces() throws Exception { String svnExternals = "file:///C:/Program%20Files/trunk - end2end file:///C:/Program%20Files/testSvnRepo-1246619674077/end2end"; List<SvnExternal> externals = new SvnExternalParser().parse(svnExternals, "file:///C:/Program%20Files", "http://10.18.3.171:8080/svn"); assertThat(externals.get(0), is(new SvnExternal("trunk/end2end", "file:///C:/Program%20Files/testSvnRepo-1246619674077/end2end"))); } @Test public void shouldParseMultipleSvnExternalsWithMixedFormat() { String svnExternals = "http://10.18.3.171:8080/svn/connect4/trunk/lib - http://10.18.3.171:8080/svn/CSharpProject/trunk/ externals-2 \n" + "\n" + "http://10.18.3.171:8080/svn/connect4/trunk - svn://10.18.3.171:8080/svn/CSharpProject/trunk/ externals-6\n" + "externals-x svn://10.18.3.171:8080/svn/CSharpProject/trunk/\n"; List<SvnExternal> externals = new SvnExternalParser().parse(svnExternals, "http://10.18.3.171:8080/svn/connect4/trunk", "http://10.18.3.171:8080/svn"); assertThat(externals.get(0), is(new SvnExternal("lib/externals-2", "http://10.18.3.171:8080/svn/CSharpProject/trunk/"))); assertThat(externals.get(1), is(new SvnExternal("externals-6", "svn://10.18.3.171:8080/svn/CSharpProject/trunk/"))); assertThat(externals.get(2), is(new SvnExternal("externals-x", "svn://10.18.3.171:8080/svn/CSharpProject/trunk/"))); } @Test public void shouldParseMultipleSvnExternalsWithSpace() { String svnExternals = "http://10.18.3.171:8080/svn/connect4/trunk/lib - http://10.18.3.171:8080/svn/CSharpProject/trunk/ externals-2 \n" + "\n" + "http://10.18.3.171:8080/svn/connect4/trunk - svn://10.18.3.171:8080/svn/CSharpProject/trunk/ externals-6\n" + " externals-x svn://10.18.3.171:8080/svn/CSharpProject/trunk/\n" + " svn://10.18.3.171:8080/svn/CSharpProject/trunk/ externals-y\n"; List<SvnExternal> externals = new SvnExternalParser().parse(svnExternals, "http://10.18.3.171:8080/svn/connect4/trunk", "http://10.18.3.171:8080/svn"); assertThat(externals.get(0), is(new SvnExternal("lib/externals-2", "http://10.18.3.171:8080/svn/CSharpProject/trunk/"))); assertThat(externals.get(1), is(new SvnExternal("externals-6", "svn://10.18.3.171:8080/svn/CSharpProject/trunk/"))); assertThat(externals.get(2), is(new SvnExternal("externals-x", "svn://10.18.3.171:8080/svn/CSharpProject/trunk/"))); assertThat(externals.get(3), is(new SvnExternal("externals-y", "svn://10.18.3.171:8080/svn/CSharpProject/trunk/"))); } @Test public void shouldParseSvnExternalWithOperativeRevisionForSvn14() { String svnExternals = "http://10.18.3.171:8080/svn/connect4/trunk/lib - externals-2 -r 2 http://10.18.3.171:8080/svn/CSharpProject/trunk/ \n" + "externals-6 -r3 svn://10.18.3.171:8080/svn/CSharpProject/trunk/ \n"; List<SvnExternal> externals = new SvnExternalParser().parse(svnExternals, "http://10.18.3.171:8080/svn/connect4/trunk", "http://10.18.3.171:8080/svn"); assertThat(externals.get(0), is(new SvnExternal("lib/externals-2", "http://10.18.3.171:8080/svn/CSharpProject/trunk/"))); assertThat(externals.get(1), is(new SvnExternal("lib/externals-6", "svn://10.18.3.171:8080/svn/CSharpProject/trunk/"))); } @Test public void shouldParseSvnExternalWithOperativeRevisionForSvn15() { String svnExternals = "http://10.18.3.171:8080/svn/connect4/trunk/lib - -r 2 http://10.18.3.171:8080/svn/CSharpProject/trunk/ externals-2 \n" + "-r3 svn://10.18.3.171:8080/svn/CSharpProject/trunk/ externals-6\n"; List<SvnExternal> externals = new SvnExternalParser().parse(svnExternals, "http://10.18.3.171:8080/svn/connect4/trunk", "http://10.18.3.171:8080/svn"); assertThat(externals.get(0), is(new SvnExternal("lib/externals-2", "http://10.18.3.171:8080/svn/CSharpProject/trunk/"))); assertThat(externals.get(1), is(new SvnExternal("lib/externals-6", "svn://10.18.3.171:8080/svn/CSharpProject/trunk/"))); } @Test public void shouldParseSvnExternalsWithRootSvn15AndAboveWithRootMatcherRelativePathsForSvn15() { String svnExternals = "http://10.18.3.171:8080/svn/externalstest - ^/repo1/trunk lib/repo1\n" + "^/repo2/trunk repo2\n" + "^/repo3/trunk app/repo3\n" + "^/repo4/trunk app/repo4"; List<SvnExternal> externals = new SvnExternalParser().parse(svnExternals, "http://10.18.3.171:8080/svn/externalstest", "http://10.18.3.171:8080/svn"); assertThat(externals.size(), is(4)); assertThat(externals.get(0), is(new SvnExternal("lib/repo1", "http://10.18.3.171:8080/svn/repo1/trunk"))); assertThat(externals.get(3), is(new SvnExternal("app/repo4", "http://10.18.3.171:8080/svn/repo4/trunk"))); } @Test public void shouldLeaveCaretsUntouchedUnlessAtFront() { String svnExternals = "http://10.18.3.171:8080/svn/externalstest - http://10.18.3.171:8080/svn/^/repo1/trunk lib/repo1\n" + "http://10.18.3.171:8080/svn/a^/repo1/trunk lib/repo1\n" + "http://10.18.3.171:8080/svn/^/repo2/trunk repo2\n"; List<SvnExternal> externals = new SvnExternalParser().parse(svnExternals, "http://10.18.3.171:8080/svn/externalstest", "http://10.18.3.171:8080/svn"); assertThat(externals.size(), is(3)); assertThat(externals.get(0), is(new SvnExternal("lib/repo1", "http://10.18.3.171:8080/svn/^/repo1/trunk"))); assertThat(externals.get(2), is(new SvnExternal("repo2", "http://10.18.3.171:8080/svn/^/repo2/trunk"))); } }