home · contact · privacy
Add interpretation of article-specific linkback URL list files.
[redo-blog] / test.sh
1 #!/bin/sh
2
3 uuid_pattern='[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
4
5 blog_meta_file_test()
6 {
7   meta_file="$1"
8   printf "== %s meta file pattern match test ==\n" "$meta_file"
9   if cat "$meta_file" | sed -n '1p' | grep -Eq '^'"$uuid_pattern"'$' \
10       && cat "$meta_file" | sed -n '2p' | grep -Eq "^[0-9]+$"; then
11     echo "== test SUCCESS =="
12   else
13     echo "== test FAILURE =="
14   fi
15 }
16
17 article_meta_file_test()
18 {
19   meta_file="$1"
20   printf "== %s meta file pattern match test ==\n" "$meta_file"
21   if cat "$meta_file" | sed -n '1p' | grep -Eq '^'"$uuid_pattern"'$' \
22       && cat "$meta_file" | sed -n '2p' | grep -Eq "^[0-9]+_[0-9]+$" \
23       && cat "$meta_file" | sed -n '3p' | grep -Eq "^[0-9a-f]{32}$" \
24       && cat "$meta_file" | sed -n '2p' | grep -Eq "^[0-9]+_[0-9]+$"; then
25     echo "== test SUCCESS =="
26   else
27     echo "== test FAILURE =="
28   fi
29 }
30
31 diff_test()
32 {
33   expected_file="$1"
34   generated_file="$2"
35   printf "== %s diff test ==\n" "$generated_file"
36   diff "$expected_file" "$generated_file"
37   if [ "$?" = "0" ]; then
38     echo "== test SUCCESS =="
39   else
40     echo "== test FAILURE =="
41   fi
42 }
43
44 # Set up test directory, run file creations.
45 expected_files_dir="test/test_files"
46 generated_files_dir="test/test_dir"
47 rm -rf "$generated_files_dir" 
48 ./add_dir.sh "$generated_files_dir" 
49 working_dir=$(pwd)
50 cd "$generated_files_dir"
51 redo
52 cp "$working_dir/$expected_files_dir"/test.md .
53 redo
54 cp "$working_dir/$expected_files_dir"/bar\ baz.md .
55 redo
56 cp "$working_dir/$expected_files_dir"/foo.rst .
57 cp "$working_dir/$expected_files_dir"/foo.links .
58 redo
59
60 # Test file modification tracking.
61 update_datetime_start=$(cat "metadata/bar baz.feed_snippet" | grep '<updated>')
62 sleep 1
63 sed -i '2d' bar\ baz.md
64 redo
65 update_datetime_after_invisible_change=$(cat "metadata/bar baz.feed_snippet" | grep '<updated>')
66 printf "== testing \"bar baz\"' update tag remaining unchanged with invisible source file change ==\n"
67 if [ "$update_datetime_start" = "$update_datetime_after_invisible_change" ]; then
68     echo "== test SUCCESS =="
69 else
70     echo "== test FAILURE =="
71 fi
72 sleep 1
73 sed -i '2d' bar\ baz.md
74 redo
75 update_datetime_after_visible_change=$(cat "metadata/bar baz.feed_snippet" | grep '<updated>')
76 printf "== testing \"bar baz\"' update tag changing with visible source file change ==\n"
77 if [ "$update_datetime_start" = "$update_datetime_after_visible_change" ]; then
78     echo "== test FAILURE =="
79 else
80     echo "== test SUCCESS =="
81 fi
82 cp "$working_dir/$expected_files_dir"/bar\ baz.md .
83 redo
84
85 # Compare metadata files.
86 cd "$working_dir"
87 blog_meta_file_test "$generated_files_dir""/metadata/automatic_metadata"
88 for file in "$expected_files_dir"/metadata/*; do
89   basename=$(basename "$file")
90   cmp_file="$generated_files_dir/metadata/$basename"
91   diff_test "$file" "$cmp_file"
92 done
93
94 # Compare generated HTML files. Ignore variable dates.
95 for file in "$expected_files_dir"/*.html.ignoring; do
96   basename=$(basename "$file")
97   cmp_file="$generated_files_dir/${basename%.ignoring}"
98   if [ ! "$file" = "$expected_files_dir""/index.html.ignoring" ]; then
99     article_meta_file_test "${generated_files_dir}/metadata/${basename%.html.ignoring}.automatic_metadata"
100   fi
101   generated_file="$cmp_file".ignoring
102   cat "$cmp_file" | \
103     sed 's/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}/IGNORE/g' \
104     > "$generated_file"
105 #  cat "$cmp_file" | \
106 #    sed 's/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}/IGNORE/g' | \
107 #    sed 's/IGNORET[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}Z/IGNORE/g' | \
108 #    sed 's/IGNORE [0-9]\{2\}:[0-9]\{2\} (UTC)/IGNORE/g' \
109 #    > "$generated_file"
110   diff_test "$file" "$generated_file"
111 done
112
113 # Compare feed files. Ignore variable dates and UUIDs.
114 original_file="$generated_files_dir""/feed.xml"
115 generated_file="$original_file".ignoring
116 expected_file="$expected_files_dir""/feed.xml.ignoring"
117 cat "$original_file" | \
118   sed 's/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}T[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}Z/IGNORE/g' | \
119   sed 's/urn:uuid:[0-9a-f]\{8\}-[0-9a-f]\{4\}-[0-9a-f]\{4\}-[0-9a-f]\{4\}-[0-9a-f]\{12\}/urn:uuid:IGNORE/g' \
120   > "$generated_file"
121 diff_test "$expected_file" "$generated_file"
122 rm "$generated_file"
123
124 # Check symbolic links.
125 for file in "$generated_files_dir"/feed.xml "$generated_files_dir"/*.html; do
126   basename=$(basename "$file")
127   linkname=$(readlink "$generated_files_dir/public/$basename")
128   printf "== public/%s symbolic link test ==\n" "$basename"
129   if [ "$working_dir/$generated_files_dir/$basename" = "$linkname" ]; then
130     echo "== test SUCCESS =="
131   else
132     echo "== test FAILURE =="
133   fi
134 done