xref: /aosp_15_r20/external/toybox/tests/unzip.test (revision cf5a6c84e2b8763fc1a7db14496fd4742913b199)
1*cf5a6c84SAndroid Build Coastguard Worker#!/bin/bash
2*cf5a6c84SAndroid Build Coastguard Worker
3*cf5a6c84SAndroid Build Coastguard Worker[ -f testing.sh ] && . testing.sh
4*cf5a6c84SAndroid Build Coastguard Worker
5*cf5a6c84SAndroid Build Coastguard Worker#testing "name" "command" "result" "infile" "stdin"
6*cf5a6c84SAndroid Build Coastguard Worker
7*cf5a6c84SAndroid Build Coastguard Worker# Note: since "master key", Android uses libziparchive for all zip file
8*cf5a6c84SAndroid Build Coastguard Worker# handling, and that scans the whole central directory immediately. Not only
9*cf5a6c84SAndroid Build Coastguard Worker# lookups by name but also iteration is implemented using the resulting hash
10*cf5a6c84SAndroid Build Coastguard Worker# table, meaning that any test that makes assumptions about iteration order
11*cf5a6c84SAndroid Build Coastguard Worker# will fail on Android.
12*cf5a6c84SAndroid Build Coastguard Worker
13*cf5a6c84SAndroid Build Coastguard Worker# unzip -l
14*cf5a6c84SAndroid Build Coastguard Workertesting "-l" "unzip -l $FILES/zip/example.zip d1/d2/x.txt && [ ! -f d1/d2/x.txt ] && echo okay" "\
15*cf5a6c84SAndroid Build Coastguard WorkerArchive:  $FILES/zip/example.zip\n\
16*cf5a6c84SAndroid Build Coastguard Worker  Length      Date    Time    Name\n\
17*cf5a6c84SAndroid Build Coastguard Worker---------  ---------- -----   ----\n\
18*cf5a6c84SAndroid Build Coastguard Worker     1024  2017-06-04 08:45   d1/d2/x.txt\n\
19*cf5a6c84SAndroid Build Coastguard Worker---------                     -------\n\
20*cf5a6c84SAndroid Build Coastguard Worker     1024                     1 file\n\
21*cf5a6c84SAndroid Build Coastguard Workerokay\n" "" ""
22*cf5a6c84SAndroid Build Coastguard Worker
23*cf5a6c84SAndroid Build Coastguard Worker# unzip -lq
24*cf5a6c84SAndroid Build Coastguard Workertesting "-lq" "unzip -lq $FILES/zip/example.zip d1/d2/x.txt && [ ! -f d1/d2/x.txt ] && echo okay" "\
25*cf5a6c84SAndroid Build Coastguard Worker  Length      Date    Time    Name\n\
26*cf5a6c84SAndroid Build Coastguard Worker---------  ---------- -----   ----\n\
27*cf5a6c84SAndroid Build Coastguard Worker     1024  2017-06-04 08:45   d1/d2/x.txt\n\
28*cf5a6c84SAndroid Build Coastguard Worker---------                     -------\n\
29*cf5a6c84SAndroid Build Coastguard Worker     1024                     1 file\n\
30*cf5a6c84SAndroid Build Coastguard Workerokay\n" "" ""
31*cf5a6c84SAndroid Build Coastguard Worker
32*cf5a6c84SAndroid Build Coastguard Worker# unzip -lv
33*cf5a6c84SAndroid Build Coastguard Workertesting "-lv" "unzip -lv $FILES/zip/example.zip d1/d2/x.txt && [ ! -f d1/d2/file ] && echo okay" "\
34*cf5a6c84SAndroid Build Coastguard WorkerArchive:  $FILES/zip/example.zip\n\
35*cf5a6c84SAndroid Build Coastguard Worker Length   Method    Size  Cmpr    Date    Time   CRC-32   Name\n\
36*cf5a6c84SAndroid Build Coastguard Worker--------  ------  ------- ---- ---------- ----- --------  ----\n\
37*cf5a6c84SAndroid Build Coastguard Worker    1024  Defl:N       11  99% 2017-06-04 08:45 48d7f063  d1/d2/x.txt\n\
38*cf5a6c84SAndroid Build Coastguard Worker--------          -------  ---                            -------\n\
39*cf5a6c84SAndroid Build Coastguard Worker    1024               11  99%                            1 file\n\
40*cf5a6c84SAndroid Build Coastguard Workerokay\n" "" ""
41*cf5a6c84SAndroid Build Coastguard Worker
42*cf5a6c84SAndroid Build Coastguard Worker# unzip -v
43*cf5a6c84SAndroid Build Coastguard Workertesting "-v" "unzip -v $FILES/zip/example.zip d1/d2/x.txt && [ ! -f d1/d2/file ] && echo okay" "\
44*cf5a6c84SAndroid Build Coastguard WorkerArchive:  $FILES/zip/example.zip\n\
45*cf5a6c84SAndroid Build Coastguard Worker Length   Method    Size  Cmpr    Date    Time   CRC-32   Name\n\
46*cf5a6c84SAndroid Build Coastguard Worker--------  ------  ------- ---- ---------- ----- --------  ----\n\
47*cf5a6c84SAndroid Build Coastguard Worker    1024  Defl:N       11  99% 2017-06-04 08:45 48d7f063  d1/d2/x.txt\n\
48*cf5a6c84SAndroid Build Coastguard Worker--------          -------  ---                            -------\n\
49*cf5a6c84SAndroid Build Coastguard Worker    1024               11  99%                            1 file\n\
50*cf5a6c84SAndroid Build Coastguard Workerokay\n" "" ""
51*cf5a6c84SAndroid Build Coastguard Worker
52*cf5a6c84SAndroid Build Coastguard Worker# unzip
53*cf5a6c84SAndroid Build Coastguard Workertesting "one file" "unzip -q $FILES/zip/example.zip d1/d2/a.txt && [ ! -f d1/d2/b.txt ] && cat d1/d2/a.txt" "a\n" "" ""
54*cf5a6c84SAndroid Build Coastguard Workerrm -rf d1
55*cf5a6c84SAndroid Build Coastguard Workertesting "all files" "unzip -q $FILES/zip/example.zip && [ -f d1/d2/a.txt ] && [ -f d1/d2/b.txt ] && [ -f d1/d2/c.txt ] && [ -f d1/d2/empty.txt ] && [ -f d1/d2/x.txt ] && [ -d d1/d2/dir ] && echo okay" "okay\n" "" ""
56*cf5a6c84SAndroid Build Coastguard Workerrm -rf d1
57*cf5a6c84SAndroid Build Coastguard Worker
58*cf5a6c84SAndroid Build Coastguard Worker# unzip -o
59*cf5a6c84SAndroid Build Coastguard Workermkdir -p d1/d2
60*cf5a6c84SAndroid Build Coastguard Workerecho b > d1/d2/a.txt
61*cf5a6c84SAndroid Build Coastguard Workertesting "-o" "unzip -q -o $FILES/zip/example.zip d1/d2/a.txt && cat d1/d2/a.txt" "a\n" "" ""
62*cf5a6c84SAndroid Build Coastguard Workerrm -rf d1
63*cf5a6c84SAndroid Build Coastguard Worker
64*cf5a6c84SAndroid Build Coastguard Worker# unzip -n
65*cf5a6c84SAndroid Build Coastguard Workermkdir -p d1/d2
66*cf5a6c84SAndroid Build Coastguard Workerecho b > d1/d2/a.txt
67*cf5a6c84SAndroid Build Coastguard Workertesting "-n" "unzip -q -n $FILES/zip/example.zip d1/d2/a.txt && cat d1/d2/a.txt" "b\n" "" ""
68*cf5a6c84SAndroid Build Coastguard Workerrm -rf d1
69*cf5a6c84SAndroid Build Coastguard Worker
70*cf5a6c84SAndroid Build Coastguard Worker# unzip -d DIR
71*cf5a6c84SAndroid Build Coastguard Workertesting "-d non-existent" "unzip -q -d will/not/be/created $FILES/zip/example.zip d1/d2/a.txt 2> /dev/null ; [ ! -d will ] && echo okay" "okay\n" "" ""
72*cf5a6c84SAndroid Build Coastguard Workermkdir dir
73*cf5a6c84SAndroid Build Coastguard Workertesting "-d exists" "unzip -q -d dir $FILES/zip/example.zip d1/d2/a.txt && [ ! -f d1/d2/a.txt ] && cat dir/d1/d2/a.txt" "a\n" "" ""
74*cf5a6c84SAndroid Build Coastguard Workerrm -rf dir
75*cf5a6c84SAndroid Build Coastguard Worker
76*cf5a6c84SAndroid Build Coastguard Worker# unzip -p
77*cf5a6c84SAndroid Build Coastguard Workertesting "-p" "unzip -p $FILES/zip/example.zip d1/d2/a.txt && [ ! -f d1/d2/a.txt ] && echo okay" "a\nokay\n" "" ""
78*cf5a6c84SAndroid Build Coastguard Worker
79*cf5a6c84SAndroid Build Coastguard Worker# unzip -x FILE...
80*cf5a6c84SAndroid Build Coastguard Worker# Note: the RI ignores -x DIR for some reason, but it's not obvious we should.
81*cf5a6c84SAndroid Build Coastguard Workertesting "-x FILE..." "unzip -q $FILES/zip/example.zip -x d1/d2/a.txt d1/d2/b.txt d1/d2/empty.txt d1/d2/x.txt && [ ! -f d1/d2/a.txt ] && [ ! -f d1/d2/b.txt ] && [ ! -f d1/d2/empty.txt ] && [ ! -f d1/d2/x.txt ] && [ -d d1/d2/dir ] && cat d1/d2/c.txt" "ccc\n" "" ""
82*cf5a6c84SAndroid Build Coastguard Workerrm -rf d1
83*cf5a6c84SAndroid Build Coastguard Worker
84*cf5a6c84SAndroid Build Coastguard Worker# unzip FILE -x FILE...
85*cf5a6c84SAndroid Build Coastguard Workertesting "FILE... -x FILE..." "unzip -q $FILES/zip/example.zip d1/d2/a.txt d1/d2/b.txt -x d1/d2/a.txt && [ ! -f d1/d2/a.txt ] && [ -f d1/d2/b.txt ] && [ ! -f d1/d2/c.txt ] && [ ! -f d1/d2/empty.txt ] && [ ! -f d1/d2/x.txt ] && [ ! -d d1/d2/dir ] && cat d1/d2/b.txt" "bb\n" "" ""
86*cf5a6c84SAndroid Build Coastguard Workerrm -rf d1
87