comparison UnitTestsSources/ZipTests.cpp @ 967:dfc076546821

add suffix Tests to unit test sources
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 27 Jun 2014 15:36:38 +0200
parents UnitTestsSources/Zip.cpp@84513f2ee1f3
children 46bca019587e
comparison
equal deleted inserted replaced
966:886652370ff2 967:dfc076546821
1 /**
2 * Orthanc - A Lightweight, RESTful DICOM Store
3 * Copyright (C) 2012-2014 Medical Physics Department, CHU of Liege,
4 * 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
76
77
78 namespace Orthanc
79 {
80 // The namespace is necessary
81 // http://code.google.com/p/googletest/wiki/AdvancedGuide#Private_Class_Members
82
83 TEST(HierarchicalZipWriter, Index)
84 {
85 HierarchicalZipWriter::Index i;
86 ASSERT_EQ("hello", i.OpenFile("hello"));
87 ASSERT_EQ("hello-2", i.OpenFile("hello"));
88 ASSERT_EQ("coucou", i.OpenFile("coucou"));
89 ASSERT_EQ("hello-3", i.OpenFile("hello"));
90
91 i.OpenDirectory("coucou");
92
93 ASSERT_EQ("coucou-2/world", i.OpenFile("world"));
94 ASSERT_EQ("coucou-2/world-2", i.OpenFile("world"));
95
96 i.OpenDirectory("world");
97
98 ASSERT_EQ("coucou-2/world-3/hello", i.OpenFile("hello"));
99 ASSERT_EQ("coucou-2/world-3/hello-2", i.OpenFile("hello"));
100
101 i.CloseDirectory();
102
103 ASSERT_EQ("coucou-2/world-4", i.OpenFile("world"));
104
105 i.CloseDirectory();
106
107 ASSERT_EQ("coucou-3", i.OpenFile("coucou"));
108
109 ASSERT_THROW(i.CloseDirectory(), OrthancException);
110 }
111
112
113 TEST(HierarchicalZipWriter, Filenames)
114 {
115 ASSERT_EQ("trE hell", HierarchicalZipWriter::Index::KeepAlphanumeric(" ÊtrE hellô "));
116
117 // The "^" character is considered as a space in DICOM
118 ASSERT_EQ("Hel lo world", HierarchicalZipWriter::Index::KeepAlphanumeric(" Hel^^ ^\r\n\t^^lo \t <world> "));
119 }
120 }
121
122
123 TEST(HierarchicalZipWriter, Basic)
124 {
125 static const std::string SPACES = " ";
126
127 HierarchicalZipWriter w("UnitTestsResults/hello2.zip");
128
129 w.SetCompressionLevel(0);
130
131 // Inside "/"
132 w.OpenFile("hello");
133 w.Write(SPACES + "hello\n");
134 w.OpenFile("hello");
135 w.Write(SPACES + "hello-2\n");
136 w.OpenDirectory("hello");
137
138 // Inside "/hello-3"
139 w.OpenFile("hello");
140 w.Write(SPACES + "hello\n");
141 w.OpenDirectory("hello");
142
143 w.SetCompressionLevel(9);
144
145 // Inside "/hello-3/hello-2"
146 w.OpenFile("hello");
147 w.Write(SPACES + "hello\n");
148 w.OpenFile("hello");
149 w.Write(SPACES + "hello-2\n");
150 w.CloseDirectory();
151
152 // Inside "/hello-3"
153 w.OpenFile("hello");
154 w.Write(SPACES + "hello-3\n");
155
156 /**
157
158 TO CHECK THE CONTENT OF THE "hello2.zip" FILE:
159
160 # unzip -v hello2.zip
161
162 => There must be 6 files. The first 3 files must have a negative
163 compression ratio.
164
165 **/
166 }