Mercurial > jhg
comparison test/org/tmatesoft/hg/test/TestByteChannel.java @ 388:b015f3918120
Work on FIXME: correct HgDataFile#workingCopy with tests; BasicSessionContext with property override; platform-specific options to internals
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Wed, 15 Feb 2012 22:57:56 +0100 |
parents | d5268ca7715b |
children | 12f668401613 |
comparison
equal
deleted
inserted
replaced
387:cdea37239b01 | 388:b015f3918120 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2011 TMate Software Ltd | 2 * Copyright (c) 2011-2012 TMate Software Ltd |
3 * | 3 * |
4 * This program is free software; you can redistribute it and/or modify | 4 * This program is free software; you can redistribute it and/or modify |
5 * it under the terms of the GNU General Public License as published by | 5 * it under the terms of the GNU General Public License as published by |
6 * the Free Software Foundation; version 2 of the License. | 6 * the Free Software Foundation; version 2 of the License. |
7 * | 7 * |
14 * the terms of a license other than GNU General Public License | 14 * the terms of a license other than GNU General Public License |
15 * contact TMate Software at support@hg4j.com | 15 * contact TMate Software at support@hg4j.com |
16 */ | 16 */ |
17 package org.tmatesoft.hg.test; | 17 package org.tmatesoft.hg.test; |
18 | 18 |
19 import static org.junit.Assert.assertArrayEquals; | 19 import static org.junit.Assert.*; |
20 | |
21 import java.io.File; | |
22 import java.io.FileWriter; | |
23 import java.io.IOException; | |
24 import java.util.Collections; | |
25 import java.util.Map; | |
20 | 26 |
21 import org.junit.Assert; | 27 import org.junit.Assert; |
22 import org.junit.Test; | 28 import org.junit.Test; |
29 import org.tmatesoft.hg.internal.BasicSessionContext; | |
23 import org.tmatesoft.hg.internal.ByteArrayChannel; | 30 import org.tmatesoft.hg.internal.ByteArrayChannel; |
31 import org.tmatesoft.hg.internal.Internals; | |
24 import org.tmatesoft.hg.repo.HgDataFile; | 32 import org.tmatesoft.hg.repo.HgDataFile; |
33 import org.tmatesoft.hg.repo.HgLookup; | |
25 import org.tmatesoft.hg.repo.HgRepository; | 34 import org.tmatesoft.hg.repo.HgRepository; |
26 | 35 |
27 /** | 36 /** |
28 * | 37 * |
29 * @author Artem Tikhomirov | 38 * @author Artem Tikhomirov |
82 // | 91 // |
83 // try once again to make sure metadata records/extracts correct offsets | 92 // try once again to make sure metadata records/extracts correct offsets |
84 dir_b.content(0, ch = new ByteArrayChannel()); | 93 dir_b.content(0, ch = new ByteArrayChannel()); |
85 assertArrayEquals("a \r\n".getBytes(), ch.toArray()); | 94 assertArrayEquals("a \r\n".getBytes(), ch.toArray()); |
86 } | 95 } |
96 | |
97 @Test | |
98 public void testWorkingCopyFileAccess() throws Exception { | |
99 final File repoDir = TestIncoming.initEmptyTempRepo("testWorkingCopyFileAccess"); | |
100 final Map<String, ?> props = Collections.singletonMap(Internals.CFG_PROPERTY_REVLOG_STREAM_CACHE, false); | |
101 repo = new HgLookup(new BasicSessionContext(props, null, null)).detect(repoDir); | |
102 File f1 = new File(repoDir, "file1"); | |
103 final String c1 = "First", c2 = "Second", c3 = "Third"; | |
104 ByteArrayChannel ch; | |
105 ExecHelper exec = new ExecHelper(new OutputParser.Stub(), repoDir); | |
106 // commit cset 0 | |
107 write(f1, c1); | |
108 exec.run("hg", "add"); | |
109 Assert.assertEquals(0, exec.getExitValue()); | |
110 exec.run("hg", "commit", "-m", "c0"); | |
111 Assert.assertEquals(0, exec.getExitValue()); | |
112 // commit cset 1 | |
113 write(f1, c2); | |
114 exec.run("hg", "commit", "-m", "c1"); | |
115 assertEquals(0, exec.getExitValue()); | |
116 // | |
117 // modify working copy | |
118 write(f1, c3); | |
119 // | |
120 HgDataFile df = repo.getFileNode(f1.getName()); | |
121 // 1. Shall take content of the file from the dir | |
122 df.workingCopy(ch = new ByteArrayChannel()); | |
123 assertArrayEquals(c3.getBytes(), ch.toArray()); | |
124 // 2. Shall supply working copy even if no local file is there | |
125 f1.delete(); | |
126 assertFalse(f1.exists()); | |
127 df = repo.getFileNode(f1.getName()); | |
128 df.workingCopy(ch = new ByteArrayChannel()); | |
129 assertArrayEquals(c2.getBytes(), ch.toArray()); | |
130 // | |
131 // 3. Shall extract revision of the file that corresponds actual parents (from dirstate) not the TIP as it was | |
132 exec.run("hg", "update", "-r", "0"); | |
133 assertEquals(0, exec.getExitValue()); | |
134 f1.delete(); | |
135 assertFalse(f1.exists()); | |
136 // there's no file and workingCopy shall do some extra work to find out actual revision to check out | |
137 df = repo.getFileNode(f1.getName()); | |
138 df.workingCopy(ch = new ByteArrayChannel()); | |
139 assertArrayEquals(c1.getBytes(), ch.toArray()); | |
140 } | |
141 | |
142 private static void write(File f, String content) throws IOException { | |
143 FileWriter fw = new FileWriter(f); | |
144 fw.write(content); | |
145 fw.close(); | |
146 } | |
87 } | 147 } |