(no message)
[fedora-idea.git] / LocalVcs / test / com / intellij / localvcs / SerializationTest.java
blob1a3b3f3392794d3bbb62b95ce58503f7c1c6a5e4
1 package com.intellij.localvcs;
3 import java.io.DataInputStream;
4 import java.io.DataOutputStream;
5 import java.io.IOException;
6 import java.io.PipedInputStream;
7 import java.io.PipedOutputStream;
8 import java.util.List;
10 import org.junit.Before;
11 import org.junit.Test;
13 public class SerializationTest extends TestCase {
14 // todo replace DataStreams with ObjectStreams and remove checks for null
15 private DataOutputStream os;
16 private DataInputStream is;
18 @Before
19 public void setUpStreams() throws IOException {
20 PipedOutputStream pos = new PipedOutputStream();
21 PipedInputStream pis = new PipedInputStream(pos);
23 os = new DataOutputStream(pos);
24 is = new DataInputStream(pis);
27 @Test
28 public void testPath() throws IOException {
29 Path p = new Path("dir/file");
30 p.write(os);
31 assertEquals(p, new Path(is));
34 @Test
35 public void testFileEntry() throws IOException {
36 Entry e = new FileEntry(42, "file", "content");
37 e.write(os);
39 Entry result = Entry.read(is);
41 assertEquals(FileEntry.class, result.getClass());
42 assertEquals(42, result.getObjectId());
43 assertEquals("file", result.getName());
44 assertEquals("content", result.getContent());
47 @Test
48 public void testDoesNotWriteEntryParent() throws IOException {
49 Entry parent = new DirectoryEntry(null, null);
50 Entry e = new FileEntry(42, "file", "content");
52 parent.addChild(e);
53 e.write(os);
55 assertNull(Entry.read(is).getParent());
58 @Test
59 public void tesEmptyDirectoryEntry() throws IOException {
60 Entry e = new DirectoryEntry(13, "name");
61 e.write(os);
63 Entry result = Entry.read(is);
65 assertEquals(DirectoryEntry.class, result.getClass());
66 assertEquals(13, result.getObjectId());
67 assertEquals("name", result.getName());
70 @Test
71 public void testDirectoryEntryWithChildren() throws IOException {
72 Entry dir = new DirectoryEntry(13, "dir");
73 Entry subDir = new DirectoryEntry(66, "subdir");
75 dir.addChild(new FileEntry(1, "f1", "1"));
76 dir.addChild(subDir);
77 subDir.addChild(new FileEntry(2, "f2", "2"));
79 dir.write(os);
81 Entry result = Entry.read(is);
82 List<Entry> children = result.getChildren();
84 assertEquals(2, children.size());
86 assertEquals(FileEntry.class, children.get(0).getClass());
87 assertEquals("f1", children.get(0).getName());
89 assertEquals(DirectoryEntry.class, children.get(1).getClass());
90 assertEquals("subdir", children.get(1).getName());
91 assertEquals(1, children.get(1).getChildren().size());
92 assertEquals("f2", children.get(1).getChildren().get(0).getName());
95 @Test
96 public void testRootEntryWithChildren() throws IOException {
97 RootEntry e = new RootEntry();
98 e.addChild(new FileEntry(1, "file", ""));
99 e.addChild(new DirectoryEntry(2, "dir"));
101 e.write(os);
103 // todo maby we should read RootEntry with Entry.read() too?
104 Entry result = new RootEntry(is);
106 assertEquals(RootEntry.class, result.getClass());
107 assertNull(result.getObjectId());
108 assertNull(result.getName());
110 List<Entry> children = result.getChildren();
111 assertEquals(2, children.size());
113 assertEquals(FileEntry.class, children.get(0).getClass());
114 assertEquals("file", children.get(0).getName());
116 assertEquals(DirectoryEntry.class, children.get(1).getClass());
117 assertEquals("dir", children.get(1).getName());
120 @Test
121 public void testCreateFileChange() throws IOException {
122 Change c = new CreateFileChange(p("file"), "content");
123 c.write(os);
125 Change result = Change.read(is);
126 assertEquals(CreateFileChange.class, result.getClass());
128 assertEquals(p("file"), ((CreateFileChange)result).getPath());
129 assertEquals("content", ((CreateFileChange)result).getContent());
132 @Test
133 public void testCreateDirectoryChange() throws IOException {
134 Change c = new CreateDirectoryChange(p("dir"));
135 c.write(os);
137 Change result = Change.read(is);
138 assertEquals(CreateDirectoryChange.class, result.getClass());
139 assertEquals(p("dir"), ((CreateDirectoryChange)result).getPath());
142 @Test
143 public void testDeleteChange() throws IOException {
144 Change c = new DeleteChange(p("entry"));
145 c.write(os);
147 Change result = Change.read(is);
148 assertEquals(DeleteChange.class, result.getClass());
150 assertEquals(p("entry"), ((DeleteChange)result).getPath());
151 assertNull(((DeleteChange)result).getAffectedEntry());
154 @Test
155 public void testAppliedDeleteChange() throws IOException {
156 Change c = new DeleteChange(p("entry"));
158 c.applyTo(new Snapshot() {
159 @Override
160 public Entry getEntry(Path path) {
161 Entry e = new DirectoryEntry(1, "entry");
162 e.addChild(new FileEntry(2, "file", ""));
163 e.addChild(new DirectoryEntry(3, "dir"));
164 return e;
168 c.write(os);
170 Entry result = ((DeleteChange)Change.read(is)).getAffectedEntry();
172 assertEquals(DirectoryEntry.class, result.getClass());
173 assertEquals("entry", result.getName());
175 assertEquals(2, result.getChildren().size());
176 assertEquals("file", result.getChildren().get(0).getName());
177 assertEquals("dir", result.getChildren().get(1).getName());