File size: 7,129 Bytes
3315103
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#!/bin/sh

# exit if any statement returns non-true return value
set -e

# exit on uninitialized variable
set -u

error() {
    echo $*;
    exit 1
}

SAMPLES_DIR=$1
SAMPLE=$SAMPLES_DIR/sample-5017.hwp

[ -e "$SAMPLES_DIR" ] || error "$SAMPLES_DIR is not found"
[ -e "$SAMPLE" ] || error "$SAMPLE is not found"

echo '--------------------------------------'
echo '* Testing hwp5proc ---help / --version'
echo '--------------------------------------'
hwp5proc | head -n 1 | grep 'Do various'
hwp5proc --help | head -n 1 | grep 'Do various'
hwp5proc --help-commands | grep 'Available <command> values'
hwp5proc --version | grep 'Copyright' | grep 'mete0r'
hwp5proc --version | grep 'License' | grep 'GNU Affero GPL version 3 or any later'
hwp5proc --version | grep 'HWP Binary Specification 1.1' | grep 'Hancom Inc.'

echo '--------------------------'
echo '* Testing hwp5proc version'
echo '--------------------------'
hwp5proc version 2>&1 | head -n 3 | grep 'Usage:'
hwp5proc version --help | head -n 1 | grep 'Print HWP file format version'
hwp5proc version $SAMPLE | grep '5\.0\.1\.7'

echo '-------------------------'
echo '* Testing hwp5proc header'
echo '-------------------------'
hwp5proc header 2>&1 | head -n 3 | grep 'Usage:'
hwp5proc header --help | head -n 1 | grep 'Print HWP file header'
hwp5proc header $SAMPLE | grep 'HWP Document File'

echo '------------------------------'
echo '* Testing hwp5proc summaryinfo'
echo '------------------------------'
hwp5proc summaryinfo 2>&1 | head -n 3 | grep 'Usage:'
hwp5proc summaryinfo --help | head -n 1 | grep 'Print summary'
hwp5proc summaryinfo $SAMPLE | grep 'clsid: 9fa2'

echo '---------------------'
echo '* Testing hwp5proc ls'
echo '---------------------'
hwp5proc ls 2>&1 | head -n 3 | grep 'Usage:'
hwp5proc ls --help | head -n 1 | grep 'List streams'
hwp5proc ls $SAMPLE | grep 'PrvText'
hwp5proc ls --vstreams $SAMPLE | grep 'PrvText.utf8'

echo '----------------------'
echo '* Testing hwp5proc cat'
echo '----------------------'
hwp5proc cat 2>&1 | head -n 3 | grep 'Usage:'
hwp5proc cat --help | head -n 1 | grep 'Extract out the specified stream'
hwp5proc cat $SAMPLE BinData/BIN0002.jpg | file - | grep 'JPEG image data'
hwp5proc cat --vstreams $SAMPLE FileHeader.txt | grep 'HWP Document File'
hwp5proc cat $SAMPLE BodyText/Section0 | wc -c | grep '^4770$' || error 'Its output size should be 4770 bytes.'

echo '-------------------------'
echo '* Testing hwp5proc unpack'
echo '-------------------------'
hwp5proc unpack 2>&1 | head -n 3 | grep 'Usage:'
hwp5proc unpack --help | head -n 1 | grep 'Extract out streams'
rm -rf sample-5017 || echo
hwp5proc unpack $SAMPLE
ls sample-5017 | grep 'FileHeader'
hwp5proc unpack --vstreams $SAMPLE
ls sample-5017 | grep 'FileHeader.txt'
rm -rf sample-5017 || echo

echo '--------------------------'
echo '* Testing hwp5proc records'
echo '--------------------------'
hwp5proc records --help | head -n 1 | grep 'Print the record structure'
hwp5proc records $SAMPLE DocInfo | grep '"seqno": 66,'
hwp5proc records --simple $SAMPLE DocInfo --range=0-2 | grep '0001  HWPTAG_ID_MAPPINGS'
hwp5proc records --simple $SAMPLE DocInfo --range=0-2 | wc -l | grep '^2$'
hwp5proc records --raw $SAMPLE DocInfo --range=0-2 | hwp5proc records --simple | grep '0001  HWPTAG_ID_MAPPINGS'
hwp5proc records --json $SAMPLE DocInfo --range=1

echo '-------------------------'
echo '* Testing hwp5proc models'
echo '-------------------------'
hwp5proc models 2>&1 | head -n 3 | grep 'Usage:'
hwp5proc models --help | head -n 1 | grep 'Print parsed binary models'
hwp5proc models $SAMPLE DocInfo | grep '"Memo"'
hwp5proc models $SAMPLE docinfo | grep '"Memo"'
hwp5proc models $SAMPLE BodyText/Section0 | grep 'ShapePicture'
hwp5proc models $SAMPLE bodytext/0 | grep 'ShapePicture'
hwp5proc models $SAMPLE bodytext/0 --seqno=4 | grep 'seqno' | grep '4' | wc -l | grep '^1$'
hwp5proc models $SAMPLE bodytext/0 --seqno=4 | grep 'tagname' | grep 'HWPTAG_CTRL_HEADER'
hwp5proc models $SAMPLE bodytext/0 --seqno=4 | grep 'type' | grep 'SectionDef'
hwp5proc models --simple $SAMPLE bodytext/0 | grep '^0127 '
hwp5proc models --treegroup=1 --simple $SAMPLE bodytext/0 | wc -l | grep '^3$'
hwp5proc models $SAMPLE bodytext/0 --format='%(seqno)s %(level)s %(tagname)s\n' | wc -l | grep '^128$'
hwp5proc cat $SAMPLE BodyText/Section0 > sec0
cat sec0 | hwp5proc models --simple -V 5.0.1.7 | grep '0127 *ShapePicture'

echo '-----------------------'
echo '* Testing hwp5proc find'
echo '-----------------------'
hwp5proc find 2>&1 | head -n 3 | grep 'Usage:'
hwp5proc find --help | head -n 1 | grep 'Find record models'
hwp5proc find --model=Paragraph $SAMPLES_DIR/charshape.hwp $SAMPLES_DIR/parashape.hwp | wc -l | grep '^16$'
hwp5proc find --tag=HWPTAG_PARA_HEADER $SAMPLES_DIR/charshape.hwp $SAMPLES_DIR/parashape.hwp | wc -l | grep '^16$'
hwp5proc find --tag=66 $SAMPLES_DIR/charshape.hwp $SAMPLES_DIR/parashape.hwp | wc -l | grep '^16$'
hwp5proc find --incomplete $SAMPLES_DIR/shapeline.hwp | grep 'ShapeComponent'
hwp5proc find --incomplete --dump $SAMPLES_DIR/shapeline.hwp | grep 'STARTEVENT: ShapeComponent'
echo "$SAMPLE" | hwp5proc find --from-stdin | wc -l | grep '^195$'
hwp5proc find "$SAMPLE" 2> /dev/null | head -n 1 | awk '{print $1}' | grep "^$SAMPLE$"
hwp5proc find "$SAMPLE" 2> /dev/null | head -n 1 | awk '{print $2}' | grep "^DocInfo$"
hwp5proc find "$SAMPLE" 2> /dev/null | head -n 1 | awk '{print $3}' | grep "^0$"
hwp5proc find "$SAMPLE" 2> /dev/null | head -n 1 | awk '{print $4}' | grep "^HWPTAG_DOCUMENT_PROPERTIES$"
hwp5proc find "$SAMPLE" 2> /dev/null | head -n 1 | awk '{print $5}' | grep "^DocumentProperties$"
hwp5proc find --format='%(stream)s' "$SAMPLE" 2> /dev/null | head -n 1 | grep '^DocInfo$'
hwp5proc find --format='%(size)s' "$SAMPLE" 2> /dev/null | head -n 1 | grep '^26$'
hwp5proc find --format='%(payload)s' "$SAMPLE" 2> /dev/null | head -n 1 | head -c -1 | wc -c | grep '^26$'

echo '----------------------'
echo '* Testing hwp5proc xml'
echo '----------------------'
hwp5proc xml 2>&1 | head -n 3 | grep 'Usage:'
hwp5proc xml --help | head -n 1 | grep 'Transform'
hwp5proc xml $SAMPLE | xmllint --format - | grep 'BinDataEmbedding' | grep 'inline' | wc -l | grep '^0$'
hwp5proc xml --embedbin $SAMPLE | xmllint --format - | grep 'BinDataEmbedding' | grep 'inline' | wc -l | grep '^2$'
hwp5proc xml $SAMPLE | head -n 1 | grep '[<][?]xml' && echo ok
hwp5proc xml --no-xml-decl $SAMPLE | head -n 1 | grep -v '[<][?]xml' && echo ok

echo '-----------------'
echo '* Testing hwp5odt'
echo '-----------------'
hwp5odt 2>&1 | head -n 3 | grep 'Usage:'
hwp5odt --help | head -n 1 | grep 'HWPv5 to ODT converter'
hwp5odt $SAMPLE
unzip -l sample-5017.odt | grep 'styles.xml'
unzip -l sample-5017.odt | grep 'content.xml'
unzip -l sample-5017.odt | grep 'BIN0002.jpg'
unzip -p sample-5017.odt content.xml | xmllint --format - | grep 'office:binary-data' | wc -l | head -n 1 | grep '^0$'
hwp5odt --embed-image $SAMPLE
unzip -p sample-5017.odt content.xml | xmllint --format - | grep 'office:binary-data' | wc -l | head -n 1 | grep '^4$'
rm -f sample-5017.odt

echo '========='
echo 'COMPLETED'
echo '========='