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
;
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
;
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
);
28 public void testPath() throws IOException
{
29 Path p
= new Path("dir/file");
31 assertEquals(p
, new Path(is
));
35 public void testFileEntry() throws IOException
{
36 Entry e
= new FileEntry(42, "file", "content");
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());
48 public void testDoesNotWriteEntryParent() throws IOException
{
49 Entry parent
= new DirectoryEntry(null, null);
50 Entry e
= new FileEntry(42, "file", "content");
55 assertNull(Entry
.read(is
).getParent());
59 public void tesEmptyDirectoryEntry() throws IOException
{
60 Entry e
= new DirectoryEntry(13, "name");
63 Entry result
= Entry
.read(is
);
65 assertEquals(DirectoryEntry
.class, result
.getClass());
66 assertEquals(13, result
.getObjectId());
67 assertEquals("name", result
.getName());
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"));
77 subDir
.addChild(new FileEntry(2, "f2", "2"));
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());
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"));
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());
121 public void testCreateFileChange() throws IOException
{
122 Change c
= new CreateFileChange(p("file"), "content");
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());
133 public void testCreateDirectoryChange() throws IOException
{
134 Change c
= new CreateDirectoryChange(p("dir"));
137 Change result
= Change
.read(is
);
138 assertEquals(CreateDirectoryChange
.class, result
.getClass());
139 assertEquals(p("dir"), ((CreateDirectoryChange
)result
).getPath());
143 public void testDeleteChange() throws IOException
{
144 Change c
= new DeleteChange(p("entry"));
147 Change result
= Change
.read(is
);
148 assertEquals(DeleteChange
.class, result
.getClass());
150 assertEquals(p("entry"), ((DeleteChange
)result
).getPath());
151 assertNull(((DeleteChange
)result
).getAffectedEntry());
155 public void testAppliedDeleteChange() throws IOException
{
156 Change c
= new DeleteChange(p("entry"));
158 c
.applyTo(new Snapshot() {
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"));
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());