/*************************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.config.materials.perforce;
import static org.junit.Assert.assertThat;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.core.Is.is;
public class P4MaterialViewTest {
private static final String CLIENT_NAME = "cruise-ccedev01-mingle";
@Test public void shouldReplaceClientNameOnView() throws Exception {
P4MaterialView view = new P4MaterialView("//depot/... //something/...");
assertThat(view.viewUsing(CLIENT_NAME), containsString("//depot/... //cruise-ccedev01-mingle/..."));
}
@Test public void shouldNotrelyOnDepotInTheViews() throws Exception {
P4MaterialView view = new P4MaterialView("//SZOPT/... //MDYNYCMDCDEV03/SZOPT/...");
assertThat(view.viewUsing(CLIENT_NAME), containsString("//SZOPT/... //cruise-ccedev01-mingle/SZOPT/..."));
}
@Test public void shouldSetCorrectTabs() throws Exception {
String from = "\n"
+ " //depot/dir1/... //cws/...\n"
+ "//depot/dir1/... //cws/...\n"
+ "//foo/dir1/... //cws/...\n"
+ "//foo/dir2/... //cws/foo2/...\n"
+ " //depot/dir1/... //cws/...\r\n"
+ " //depot/dir1/... //cws/...\n"
+ "\t\t//depot/rel1/... //cws/release1/...";
String to = "\n"
+ "\t//depot/dir1/... //" + CLIENT_NAME + "/...\n"
+ "\t//depot/dir1/... //" + CLIENT_NAME + "/...\n"
+ "\t//foo/dir1/... //" + CLIENT_NAME + "/...\n"
+ "\t//foo/dir2/... //" + CLIENT_NAME + "/foo2/...\n"
+ "\t//depot/dir1/... //" + CLIENT_NAME + "/...\n"
+ "\t//depot/dir1/... //" + CLIENT_NAME + "/...\n"
+ "\t//depot/rel1/... //" + CLIENT_NAME + "/release1/...";
assertMapsTo(from, to);
}
@Test public void shouldSupportExcludedAndIncludeMappings() throws Exception {
String from = "//depot/dir1/... //cws/...\n"
+ "-//depot/dir1/exclude/... //cws/dir1/exclude/...\n"
+ "+//depot/dir1/include/... //cws/dir1/include/...";
String to = "\n"
+ "\t//depot/dir1/... //" + CLIENT_NAME + "/...\n"
+ "\t-//depot/dir1/exclude/... //" + CLIENT_NAME + "/dir1/exclude/...\n"
+ "\t+//depot/dir1/include/... //" + CLIENT_NAME + "/dir1/include/...";
assertMapsTo(from, to);
}
@Test public void shouldSupportMappingsWithSpecialCharacters() throws Exception {
String from = "//depot/dir1/old.* //cws/renamed/new.*\n"
+ "//depot/dir1/%1.%2 //cws/dir1/%2.%1\n"
+ "\t//foobar/dir1/%1.%2 //cws/dir1/%2.%1\n"
+ "\"-//depot/with spaces/...\" \"//cws/with spaces/...\"\n\n";
String to = "\n"
+ "\t//depot/dir1/old.* //" + CLIENT_NAME + "/renamed/new.*\n"
+ "\t//depot/dir1/%1.%2 //" + CLIENT_NAME + "/dir1/%2.%1\n"
+ "\t//foobar/dir1/%1.%2 //" + CLIENT_NAME + "/dir1/%2.%1\n"
+ "\t\"-//depot/with spaces/...\" \"//" + CLIENT_NAME + "/with spaces/...\"\n\n";
assertMapsTo(from, to);
}
@Test
public void shouldAddErrorsToTheErrorCollection() {
P4MaterialView view = new P4MaterialView("//depot/... //something/...");
view.addError("key", "some error");
assertThat(view.errors().on("key"), is("some error"));
}
private void assertMapsTo(String from, String to) {
P4MaterialView view = new P4MaterialView(from);
String actual = view.viewUsing(CLIENT_NAME);
assertThat(actual, is(to));
}
}