001: package com.ecyrd.jspwiki.providers;
002:
003: import junit.framework.*;
004: import java.io.*;
005: import java.util.*;
006: import com.ecyrd.jspwiki.*;
007:
008: /**
009: * Tests the RCSFileProvider. If you are getting strange errors, please check that you
010: * actually <i>have</i> RCS installed and in your path...
011: *
012: * @author jalkanen
013: *
014: * @since forever
015: */
016: public class RCSFileProviderTest extends TestCase {
017: public static final String NAME1 = "Test1";
018:
019: Properties props = new Properties();
020:
021: TestEngine engine;
022:
023: public RCSFileProviderTest(String s) {
024: super (s);
025: }
026:
027: public void setUp() throws Exception {
028: props.load(TestEngine
029: .findTestProperties("/jspwiki_rcs.properties"));
030:
031: engine = new TestEngine(props);
032: }
033:
034: /**
035: * Remove NAME1 + all RCS directories for it.
036: */
037: public void tearDown() {
038: String files = props
039: .getProperty(FileSystemProvider.PROP_PAGEDIR);
040:
041: File f = new File(files, NAME1 + FileSystemProvider.FILE_EXT);
042:
043: f.delete();
044:
045: f = new File(files + File.separator + "RCS", NAME1
046: + FileSystemProvider.FILE_EXT + ",v");
047:
048: f.delete();
049:
050: f = new File(files, "RCS");
051:
052: f.delete();
053: }
054:
055: /**
056: * Bug report by Anon: RCS under Windows 2k:
057: * <PRE>
058: * In getPageInfo of RCSFileProvider:
059: *
060: * Problem:
061: *
062: * With a longer rlog result, the break clause in the last "else if"
063: * breaks out of the reading loop before all the lines in the full
064: * rlog have been read in. This causes the process.wait() to hang.
065: *
066: * Suggested quick fix:
067: *
068: * Always read all the contents of the rlog, even if it is slower.
069: * </PRE>
070: *
071: */
072:
073: public void testMillionChanges() throws Exception {
074: String text = "";
075: String name = NAME1;
076: int maxver = 100; // Save 100 versions.
077:
078: for (int i = 0; i < maxver; i++) {
079: text = text + ".";
080: engine.saveText(name, text);
081: }
082:
083: WikiPage pageinfo = engine.getPage(NAME1);
084:
085: assertEquals("wrong version", maxver, pageinfo.getVersion());
086: // +2 comes from \r\n at the end of each file.
087: assertEquals("wrong text", maxver + 2, engine.getText(NAME1)
088: .length());
089: }
090:
091: /**
092: * Checks if migration from FileSystemProvider to VersioningFileProvider
093: * works by creating a dummy file without corresponding content in OLD/
094: */
095: public void testMigration() throws IOException {
096: String files = props
097: .getProperty(FileSystemProvider.PROP_PAGEDIR);
098:
099: File f = new File(files, NAME1 + FileSystemProvider.FILE_EXT);
100:
101: Writer out = new FileWriter(f);
102: FileUtil.copyContents(new StringReader("foobar"), out);
103: out.close();
104:
105: String res = engine.getText(NAME1);
106:
107: assertEquals("latest did not work", "foobar", res);
108:
109: res = engine.getText(NAME1, 1); // Should be the first version.
110:
111: assertEquals("fetch by direct version did not work", "foobar",
112: res);
113: }
114:
115: public void testGetByVersion() throws Exception {
116: String text = "diddo\r\n";
117:
118: engine.saveText(NAME1, text);
119:
120: WikiPage page = engine.getPage(NAME1, 1);
121:
122: assertEquals("name", NAME1, page.getName());
123: assertEquals("version", 1, page.getVersion());
124: }
125:
126: public void testGetByLatestVersion() throws Exception {
127: String text = "diddo\r\n";
128:
129: engine.saveText(NAME1, text);
130:
131: WikiPage page = engine.getPage(NAME1,
132: WikiProvider.LATEST_VERSION);
133:
134: assertEquals("name", NAME1, page.getName());
135: assertEquals("version", 1, page.getVersion());
136: }
137:
138: public void testDelete() throws Exception {
139: engine.saveText(NAME1, "v1");
140: engine.saveText(NAME1, "v2");
141: engine.saveText(NAME1, "v3");
142:
143: PageManager mgr = engine.getPageManager();
144: WikiPageProvider provider = mgr.getProvider();
145:
146: provider.deletePage(NAME1);
147:
148: String files = props
149: .getProperty(FileSystemProvider.PROP_PAGEDIR);
150:
151: File f = new File(files, NAME1 + FileSystemProvider.FILE_EXT);
152:
153: assertFalse("file exists", f.exists());
154:
155: f = new File(files + File.separator + "RCS", NAME1
156: + FileSystemProvider.FILE_EXT + ",v");
157:
158: assertFalse("RCS file exists", f.exists());
159: }
160:
161: public void testDeleteVersion() throws Exception {
162: engine.saveText(NAME1, "v1\r\n");
163: engine.saveText(NAME1, "v2\r\n");
164: engine.saveText(NAME1, "v3\r\n");
165:
166: PageManager mgr = engine.getPageManager();
167: WikiPageProvider provider = mgr.getProvider();
168:
169: provider.deleteVersion(NAME1, 2);
170:
171: List l = provider.getVersionHistory(NAME1);
172:
173: assertEquals("wrong # of versions", 2, l.size());
174:
175: assertEquals("v1", "v1\r\n", provider.getPageText(NAME1, 1));
176: assertEquals("v3", "v3\r\n", provider.getPageText(NAME1, 3));
177:
178: try {
179: provider.getPageText(NAME1, 2);
180: fail("v2");
181: } catch (NoSuchVersionException e) {
182: // This is expected
183: }
184: }
185:
186: public void testChangeNote() throws Exception {
187: WikiPage p = new WikiPage(engine, NAME1);
188: p.setAttribute(WikiPage.CHANGENOTE, "Test change");
189: WikiContext context = new WikiContext(engine, p);
190:
191: engine.saveText(context, "test");
192:
193: WikiPage p2 = engine.getPage(NAME1);
194:
195: assertEquals("Test change", p2
196: .getAttribute(WikiPage.CHANGENOTE));
197: }
198:
199: public void testChangeNoteOldVersion() throws Exception {
200: WikiPage p = new WikiPage(engine, NAME1);
201: WikiContext context = new WikiContext(engine, p);
202:
203: context.getPage().setAttribute(WikiPage.CHANGENOTE,
204: "Test change");
205: engine.saveText(context, "test");
206:
207: context.getPage().setAttribute(WikiPage.CHANGENOTE, "Change 2");
208: engine.saveText(context, "test2");
209:
210: WikiPage p2 = engine.getPage(NAME1, 1);
211:
212: assertEquals("Test change", p2
213: .getAttribute(WikiPage.CHANGENOTE));
214:
215: WikiPage p3 = engine.getPage(NAME1, 2);
216:
217: assertEquals("Change 2", p3.getAttribute(WikiPage.CHANGENOTE));
218: }
219:
220: public static Test suite() {
221: return new TestSuite(RCSFileProviderTest.class);
222: }
223: }
|