001: package net.sourceforge.cruisecontrol;
002:
003: import junit.framework.TestCase;
004: import net.sourceforge.cruisecontrol.testutil.TestUtil;
005: import net.sourceforge.cruisecontrol.util.IO;
006: import net.sourceforge.cruisecontrol.util.Util;
007:
008: import java.io.File;
009:
010: /**
011: * @author <a href="mailto:jeffjensen@upstairstechnology.com">Jeff Jensen </a>
012: */
013: public class BuildStatusTest extends TestCase {
014: private static final boolean MULTIPLE_PROJECT_MODE = false;
015: private static final boolean SINGLE_PROJECT_MODE = true;
016: private static final String PROJECT_NAME = "testProject";
017: private static final String STATUS_FILENAME = "buildStatus.txt";
018: private static final String TEXT = "the test status";
019: private static final String TIME = "12/17/2005 20:11:25";
020:
021: private static final String XML_LOGGER_DATA = TIME + " ["
022: + PROJECT_NAME + "]\n";
023: private static final String XML_LOGGER_TEXT = "<br>"
024: + XML_LOGGER_DATA;
025:
026: private static final String PLAIN_TEXT = TEXT + "\n" + TIME + "\n";
027: private static final String PLAIN_WITH_LOGGER = TEXT + "\n" + TIME
028: + XML_LOGGER_TEXT;
029:
030: private static final String HTML_TEXT = TEXT + "\n<br/>" + TIME
031: + "\n<br/>";
032: private static final String HTML_WITH_LOGGER = HTML_TEXT
033: + XML_LOGGER_DATA + "<br/>";
034:
035: private File logDir;
036:
037: private final TestUtil.FilesToDelete filesToDelete = new TestUtil.FilesToDelete();
038:
039: protected void setUp() throws Exception {
040: // make base log dir
041: logDir = new File("testresults/");
042: if (!logDir.exists()) {
043: assertTrue("Failed to create test result dir", Util
044: .doMkDirs(logDir));
045: filesToDelete.add(logDir);
046: }
047:
048: // make multi project log dir
049: File projectLogDir = new File(logDir, PROJECT_NAME + "/");
050: if (!projectLogDir.exists()) {
051: assertTrue("Failed to create project log dir", Util
052: .doMkDirs(projectLogDir));
053: filesToDelete.add(logDir);
054: }
055:
056: // for single project
057: File file = new File(logDir, STATUS_FILENAME);
058: prepareFile(file, PLAIN_WITH_LOGGER);
059:
060: // for multi project
061: file = new File(projectLogDir, STATUS_FILENAME);
062: prepareFile(file, PLAIN_WITH_LOGGER);
063: }
064:
065: protected void tearDown() throws Exception {
066: filesToDelete.delete();
067: }
068:
069: public void testStatusFileNotFound() {
070: String status = BuildStatus.getStatusHtml(SINGLE_PROJECT_MODE,
071: logDir.getAbsolutePath(), PROJECT_NAME,
072: "badfilename.txt", BuildStatus.READ_ALL_LINES);
073: assertEquals("(build status file not found)", status);
074: status = BuildStatus.getStatusHtml(MULTIPLE_PROJECT_MODE,
075: logDir.getAbsolutePath(), PROJECT_NAME,
076: "badfilename.txt", BuildStatus.READ_ALL_LINES);
077: assertEquals("(build status file not found)", status);
078: }
079:
080: public void testShouldThrowExceptionWithDirectory() {
081: try {
082: BuildStatus.getStatusHtml(SINGLE_PROJECT_MODE, logDir
083: .getAbsolutePath(), null, PROJECT_NAME,
084: BuildStatus.READ_ALL_LINES);
085: fail("Expected exception for build status file not found.");
086: } catch (CruiseControlWebAppException expected) {
087: assertTrue(expected.getMessage().indexOf("is a directory") > 0);
088: }
089: }
090:
091: public void testGetCurrentStatusSingleProject() {
092: coreTestPlain("status only: ", SINGLE_PROJECT_MODE,
093: BuildStatus.READ_ONLY_STATUS_LINES, PLAIN_TEXT);
094: coreTestHtml("status only: ", SINGLE_PROJECT_MODE,
095: BuildStatus.READ_ONLY_STATUS_LINES, HTML_TEXT);
096:
097: coreTestPlain("all lines: ", SINGLE_PROJECT_MODE,
098: BuildStatus.READ_ALL_LINES, PLAIN_TEXT
099: + XML_LOGGER_DATA);
100: coreTestHtml("all lines: ", SINGLE_PROJECT_MODE,
101: BuildStatus.READ_ALL_LINES, HTML_WITH_LOGGER);
102: }
103:
104: public void testGetCurrentStatusMultiProject() {
105: coreTestPlain("status only: ", MULTIPLE_PROJECT_MODE,
106: BuildStatus.READ_ONLY_STATUS_LINES, PLAIN_TEXT);
107: coreTestHtml("status only: ", MULTIPLE_PROJECT_MODE,
108: BuildStatus.READ_ONLY_STATUS_LINES, HTML_TEXT);
109:
110: coreTestPlain("all lines: ", MULTIPLE_PROJECT_MODE,
111: BuildStatus.READ_ALL_LINES, PLAIN_TEXT
112: + XML_LOGGER_DATA);
113: coreTestHtml("all lines: ", MULTIPLE_PROJECT_MODE,
114: BuildStatus.READ_ALL_LINES, HTML_WITH_LOGGER);
115: }
116:
117: private void coreTestPlain(String msg, boolean isSingleProject,
118: int readLines, String expected) {
119: String actual = BuildStatus.getStatusPlain(isSingleProject,
120: logDir.getAbsolutePath(), PROJECT_NAME,
121: STATUS_FILENAME, readLines);
122: assertEquals("plain:" + msg, expected, actual);
123: }
124:
125: private void coreTestHtml(String msg, boolean isSingleProject,
126: int readLines, String expected) {
127: String actual = BuildStatus.getStatusHtml(isSingleProject,
128: logDir.getAbsolutePath(), PROJECT_NAME,
129: STATUS_FILENAME, readLines);
130: assertEquals("html:" + msg, expected, actual);
131: }
132:
133: private void prepareFile(File file, String body)
134: throws CruiseControlException {
135: IO.write(file, body);
136: filesToDelete.add(file);
137: }
138: }
|