]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - tests/include/utils/ZipTest.php
Release 6.4.0
[Github/sugarcrm.git] / tests / include / utils / ZipTest.php
1 <?php
2 /*********************************************************************************
3  * SugarCRM Community Edition is a customer relationship management program developed by
4  * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
5  * 
6  * This program is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU Affero General Public License version 3 as published by the
8  * Free Software Foundation with the addition of the following permission added
9  * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
10  * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
11  * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
12  * 
13  * This program is distributed in the hope that it will be useful, but WITHOUT
14  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15  * FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
16  * details.
17  * 
18  * You should have received a copy of the GNU Affero General Public License along with
19  * this program; if not, see http://www.gnu.org/licenses or write to the Free
20  * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21  * 02110-1301 USA.
22  * 
23  * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
24  * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
25  * 
26  * The interactive user interfaces in modified source and object code versions
27  * of this program must display Appropriate Legal Notices, as required under
28  * Section 5 of the GNU Affero General Public License version 3.
29  * 
30  * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
31  * these Appropriate Legal Notices must retain the display of the "Powered by
32  * SugarCRM" logo. If the display of the logo is not reasonably feasible for
33  * technical reasons, the Appropriate Legal Notices must display the words
34  * "Powered by SugarCRM".
35  ********************************************************************************/
36
37
38 require_once('include/utils/zip_utils.php');
39 /**
40  * @ticket 40957
41  */
42 class ZipTest extends Sugar_PHPUnit_Framework_TestCase
43 {
44     public function setUp()
45     {
46         $this->testdir = sugar_cached("tests/include/utils/ziptest");
47         sugar_mkdir($this->testdir.'/testarchive',null,true);
48         sugar_touch($this->testdir.'/testarchive/testfile1.txt');
49         sugar_touch($this->testdir.'/testarchive/testfile2.txt');
50         sugar_touch($this->testdir.'/testarchive/testfile3.txt');
51         sugar_mkdir($this->testdir.'/testarchiveoutput',null,true);
52     }
53
54     public function tearDown()
55     {
56         if ( is_dir($this->testdir) )
57             rmdir_recursive($this->testdir);
58     }
59
60     public function testZipADirectory()
61         {
62                 zip_dir($this->testdir.'/testarchive',$this->testdir.'/testarchive.zip');
63
64                 $this->assertTrue(file_exists($this->testdir.'/testarchive.zip'));
65         }
66
67         public function testZipADirectoryFailsWhenDirectorySpecifedDoesNotExists()
68         {
69             $this->assertFalse(zip_dir($this->testdir.'/notatestarchive',$this->testdir.'/testarchive.zip'));
70         }
71
72         /**
73      * @depends testZipADirectory
74      */
75     public function testExtractEntireArchive()
76         {
77             zip_dir($this->testdir.'/testarchive',$this->testdir.'/testarchive.zip');
78                 unzip($this->testdir.'/testarchive.zip',$this->testdir.'/testarchiveoutput');
79
80             $this->assertTrue(file_exists($this->testdir.'/testarchiveoutput/testfile1.txt'));
81             $this->assertTrue(file_exists($this->testdir.'/testarchiveoutput/testfile2.txt'));
82             $this->assertTrue(file_exists($this->testdir.'/testarchiveoutput/testfile3.txt'));
83         }
84
85         /**
86      * @depends testZipADirectory
87      */
88     public function testExtractSingleFileFromAnArchive()
89         {
90             zip_dir($this->testdir.'/testarchive',$this->testdir.'/testarchive.zip');
91                 unzip_file($this->testdir.'/testarchive.zip','testfile1.txt',$this->testdir.'/testarchiveoutput');
92
93             $this->assertTrue(file_exists($this->testdir.'/testarchiveoutput/testfile1.txt'));
94             $this->assertFalse(file_exists($this->testdir.'/testarchiveoutput/testfile2.txt'));
95             $this->assertFalse(file_exists($this->testdir.'/testarchiveoutput/testfile3.txt'));
96         }
97
98         /**
99      * @depends testZipADirectory
100      */
101     public function testExtractTwoIndividualFilesFromAnArchive()
102         {
103             zip_dir($this->testdir.'/testarchive',$this->testdir.'/testarchive.zip');
104                 unzip_file($this->testdir.'/testarchive.zip',array('testfile2.txt','testfile3.txt'),$this->testdir.'/testarchiveoutput');
105
106             $this->assertFalse(file_exists($this->testdir.'/testarchiveoutput/testfile1.txt'));
107             $this->assertTrue(file_exists($this->testdir.'/testarchiveoutput/testfile2.txt'));
108             $this->assertTrue(file_exists($this->testdir.'/testarchiveoutput/testfile3.txt'));
109         }
110
111         public function testExtractFailsWhenArchiveDoesNotExist()
112         {
113             $this->assertFalse(unzip($this->testdir.'/testarchivenothere.zip',$this->testdir.'/testarchiveoutput'));
114         }
115
116         public function testExtractFailsWhenExtractDirectoryDoesNotExist()
117         {
118             $this->assertFalse(unzip($this->testdir.'/testarchive.zip',$this->testdir.'/testarchiveoutputnothere'));
119         }
120
121         public function testExtractFailsWhenFilesDoNotExistInArchive()
122         {
123             $this->assertFalse(unzip_file($this->testdir.'/testarchive.zip','testfile4.txt',$this->testdir.'/testarchiveoutput'));
124         }
125 }