blob: 2d09fd7ed8c28c455e227fac1acc762e75f72061 [file] [log] [blame]
/*
* Copyright 2009 Google 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.
*/
package com.google.gwt.ant.taskdefs;
import com.google.gwt.ant.taskdefs.SvnInfo.Info;
import junit.framework.TestCase;
import java.io.File;
/**
* Tests for {@link SvnInfo}.
*/
public class SvnInfoTest extends TestCase {
/**
* The current directory.
*/
private static final File dir = new File(".");
/**
* A cached copy of 'git svn info' so we don't have to keep running it (makes
* the tests run faster).
*/
private static String gitSvnInfo = null;
/**
* Check that this is a valid git rev.
*/
private static void assertIsValidGitRev(String rev) {
assertNotNull(rev);
assertEquals(rev, 40, rev.length());
for (char ch : rev.toCharArray()) {
assertTrue(isHexDigit(ch));
}
}
private static String getGitSvnInfo() {
if (gitSvnInfo == null) {
gitSvnInfo = SvnInfo.getGitSvnInfo(dir);
}
return gitSvnInfo;
}
private static boolean isHexDigit(char ch) {
return (ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'F')
|| (ch >= 'a' && ch <= 'f');
}
/**
* Test that doesGitWorkingCopyMatchSvnRevision finishes.
*/
public void testDoesGitWorkingCopyMatchSvnRevision() {
if (SvnInfo.looksLikeGit(dir)) {
Info info = SvnInfo.parseInfo(getGitSvnInfo());
SvnInfo.doesGitWorkingCopyMatchSvnRevision(dir, info.revision);
}
}
/**
* Test that getGitRevForSvnRev returns a 40-character git hash.
*/
public void testGetGitRevForSvnRev() {
if (SvnInfo.looksLikeGit(dir)) {
Info info = SvnInfo.parseInfo(getGitSvnInfo());
String rev = SvnInfo.getGitRevForSvnRev(dir, info.revision);
assertIsValidGitRev(rev);
}
}
public void testGetGitStatus() {
if (SvnInfo.looksLikeGit(dir)) {
String status = SvnInfo.getGitStatus(dir);
assertNotNull(status);
assertTrue(!"".equals(status));
}
}
public void testGetGitSvnInfo() {
if (SvnInfo.looksLikeGit(dir)) {
String info = getGitSvnInfo();
assertNotNull(info);
assertTrue(!"".equals(info));
}
}
public void testGetGitSvnWorkingRev() {
if (SvnInfo.looksLikeGit(dir)) {
String rev = SvnInfo.getGitWorkingRev(dir);
assertIsValidGitRev(rev);
}
}
/**
* If this is an svn working copy, just verify that "svn info" succeeds and
* returns something.
*/
public void testGetSvnInfo() {
if (SvnInfo.looksLikeSvn(dir)) {
String info = SvnInfo.getSvnInfo(dir);
assertNotNull(info);
assertTrue(!"".equals(info));
}
}
/**
* If this is an svn working copy, just verify that "svnversion" succeeds and
* returns something.
*/
public void testGetSvnVersion() {
if (SvnInfo.looksLikeSvn(dir)) {
String version = SvnInfo.getSvnVersion(dir);
assertNotNull(version);
assertTrue(!"".equals(version));
}
}
/**
* Test that the correct info is parsed out of a canned result.
*/
public void testParseInfo() {
String svnInfo = "Path: .\n" + "URL: http://example.com/svn/tags/w00t\n"
+ "Repository Root: http://example.com/svn\n"
+ "Repository UUID: 00000000-0000-0000-0000-000000000000\n"
+ "Revision: 9999\n" + "Node Kind: directory\n" + "Schedule: normal\n"
+ "Last Changed Author: foo@example.com\n" + "Last Changed Rev: 8888\n"
+ "Last Changed Date: 2009-01-01 00:00:00 +0000 (Thu, 01 Jan 2009)\n";
Info info = SvnInfo.parseInfo(svnInfo);
assertEquals("tags/w00t", info.branch);
assertEquals("9999", info.revision);
}
/**
* Test that trailing slashes are removed correctly.
*/
public void testRemoveTrailingSlash() {
assertEquals("http://example.com/svn",
SvnInfo.removeTrailingSlash("http://example.com/svn"));
assertEquals("http://example.com/svn",
SvnInfo.removeTrailingSlash("http://example.com/svn/"));
}
}