comparison UnitTestsSources/ZipTests.cpp @ 1364:111e23bb4904 query-retrieve

integration mainline->query-retrieve
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 21 May 2015 16:58:30 +0200
parents 6e7e5ed91c2d
children b1291df2f780
comparison
equal deleted inserted replaced
953:f894be6e7cc1 1364:111e23bb4904
1 /**
2 * Orthanc - A Lightweight, RESTful DICOM Store
3 * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
4 * Department, University Hospital of Liege, Belgium
5 *
6 * This program is free software: you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation, either version 3 of the
9 * License, or (at your option) any later version.
10 *
11 * In addition, as a special exception, the copyright holders of this
12 * program give permission to link the code of its release with the
13 * OpenSSL project's "OpenSSL" library (or with modified versions of it
14 * that use the same license as the "OpenSSL" library), and distribute
15 * the linked executables. You must obey the GNU General Public License
16 * in all respects for all of the code used other than "OpenSSL". If you
17 * modify file(s) with this exception, you may extend this exception to
18 * your version of the file(s), but you are not obligated to do so. If
19 * you do not wish to do so, delete this exception statement from your
20 * version. If you delete this exception statement from all source files
21 * in the program, then also delete it here.
22 *
23 * This program is distributed in the hope that it will be useful, but
24 * WITHOUT ANY WARRANTY; without even the implied warranty of
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
26 * General Public License for more details.
27 *
28 * You should have received a copy of the GNU General Public License
29 * along with this program. If not, see <http://www.gnu.org/licenses/>.
30 **/
31
32
33 #include "PrecompiledHeadersUnitTests.h"
34 #include "gtest/gtest.h"
35
36 #include "../Core/OrthancException.h"
37 #include "../Core/Compression/ZipWriter.h"
38 #include "../Core/Compression/HierarchicalZipWriter.h"
39 #include "../Core/Toolbox.h"
40
41
42 using namespace Orthanc;
43
44 TEST(ZipWriter, Basic)
45 {
46 Orthanc::ZipWriter w;
47 w.SetOutputPath("UnitTestsResults/hello.zip");
48 w.Open();
49 w.OpenFile("world/hello");
50 w.Write("Hello world");
51 }
52
53
54 TEST(ZipWriter, Basic64)
55 {
56 Orthanc::ZipWriter w;
57 w.SetOutputPath("UnitTestsResults/hello64.zip");
58 w.SetZip64(true);
59 w.Open();
60 w.OpenFile("world/hello");
61 w.Write("Hello world");
62 }
63
64
65 TEST(ZipWriter, Exceptions)
66 {
67 Orthanc::ZipWriter w;
68 ASSERT_THROW(w.Open(), Orthanc::OrthancException);
69 w.SetOutputPath("UnitTestsResults/hello3.zip");
70 w.Open();
71 ASSERT_THROW(w.Write("hello world"), Orthanc::OrthancException);
72 }
73
74
75 TEST(ZipWriter, Append)
76 {
77 {
78 Orthanc::ZipWriter w;
79 w.SetAppendToExisting(false);
80 w.SetOutputPath("UnitTestsResults/append.zip");
81 w.Open();
82 w.OpenFile("world/hello");
83 w.Write("Hello world 1");
84 }
85
86 {
87 Orthanc::ZipWriter w;
88 w.SetAppendToExisting(true);
89 w.SetOutputPath("UnitTestsResults/append.zip");
90 w.Open();
91 w.OpenFile("world/appended");
92 w.Write("Hello world 2");
93 }
94 }
95
96
97
98
99
100 namespace Orthanc
101 {
102 // The namespace is necessary
103 // http://code.google.com/p/googletest/wiki/AdvancedGuide#Private_Class_Members
104
105 TEST(HierarchicalZipWriter, Index)
106 {
107 HierarchicalZipWriter::Index i;
108 ASSERT_EQ("hello", i.OpenFile("hello"));
109 ASSERT_EQ("hello-2", i.OpenFile("hello"));
110 ASSERT_EQ("coucou", i.OpenFile("coucou"));
111 ASSERT_EQ("hello-3", i.OpenFile("hello"));
112
113 i.OpenDirectory("coucou");
114
115 ASSERT_EQ("coucou-2/world", i.OpenFile("world"));
116 ASSERT_EQ("coucou-2/world-2", i.OpenFile("world"));
117
118 i.OpenDirectory("world");
119
120 ASSERT_EQ("coucou-2/world-3/hello", i.OpenFile("hello"));
121 ASSERT_EQ("coucou-2/world-3/hello-2", i.OpenFile("hello"));
122
123 i.CloseDirectory();
124
125 ASSERT_EQ("coucou-2/world-4", i.OpenFile("world"));
126
127 i.CloseDirectory();
128
129 ASSERT_EQ("coucou-3", i.OpenFile("coucou"));
130
131 ASSERT_THROW(i.CloseDirectory(), OrthancException);
132 }
133
134
135 TEST(HierarchicalZipWriter, Filenames)
136 {
137 ASSERT_EQ("trE hell", HierarchicalZipWriter::Index::KeepAlphanumeric(" ÊtrE hellô "));
138
139 // The "^" character is considered as a space in DICOM
140 ASSERT_EQ("Hel lo world", HierarchicalZipWriter::Index::KeepAlphanumeric(" Hel^^ ^\r\n\t^^lo \t <world> "));
141 }
142 }
143
144
145 TEST(HierarchicalZipWriter, Basic)
146 {
147 static const std::string SPACES = " ";
148
149 HierarchicalZipWriter w("UnitTestsResults/hello2.zip");
150
151 w.SetCompressionLevel(0);
152
153 // Inside "/"
154 w.OpenFile("hello");
155 w.Write(SPACES + "hello\n");
156 w.OpenFile("hello");
157 w.Write(SPACES + "hello-2\n");
158 w.OpenDirectory("hello");
159
160 // Inside "/hello-3"
161 w.OpenFile("hello");
162 w.Write(SPACES + "hello\n");
163 w.OpenDirectory("hello");
164
165 w.SetCompressionLevel(9);
166
167 // Inside "/hello-3/hello-2"
168 w.OpenFile("hello");
169 w.Write(SPACES + "hello\n");
170 w.OpenFile("hello");
171 w.Write(SPACES + "hello-2\n");
172 w.CloseDirectory();
173
174 // Inside "/hello-3"
175 w.OpenFile("hello");
176 w.Write(SPACES + "hello-3\n");
177
178 /**
179
180 TO CHECK THE CONTENT OF THE "hello2.zip" FILE:
181
182 # unzip -v hello2.zip
183
184 => There must be 6 files. The first 3 files must have a negative
185 compression ratio.
186
187 **/
188 }