summaryrefslogtreecommitdiffstats
path: root/kword/tests/oasis-kword.sh
diff options
context:
space:
mode:
Diffstat (limited to 'kword/tests/oasis-kword.sh')
-rw-r--r--kword/tests/oasis-kword.sh108
1 files changed, 108 insertions, 0 deletions
diff --git a/kword/tests/oasis-kword.sh b/kword/tests/oasis-kword.sh
new file mode 100644
index 00000000..d68de47c
--- /dev/null
+++ b/kword/tests/oasis-kword.sh
@@ -0,0 +1,108 @@
+#!/bin/bash
+
+# This script helps finding out problems in the OASIS loading/saving code,
+# by converting .kwd -> .odt -> .kwd and comparing the initial and final .kwd files.
+# We use the kwd format as a "dump" of the KWord data, to check if everything is correct
+# in memory, but the point is of course to ensure that the .odt has all the information.
+
+# To use this script, you need to pass the path to an existing kwd file as argument.
+input="$1"
+
+# Set this to 1 in order to validate the saved oasis document using oasislint
+checkoasis="1"
+
+appname=kword
+oldextension=kwd
+oasisextension=odt
+oasismimetype=application/vnd.oasis.opendocument.text
+
+# dcopstart won't handle a relative path (kdeinit has a different cwd)
+# so make it absolute
+if echo "$input" | grep -v '^/' >/dev/null 2>&1; then
+ input="$PWD/$input"
+fi
+
+test -f "$input" || { echo "No such file $input"; exit 1; }
+
+# Load old native file
+appid=`dcopstart $appname $input`
+test -n "$appid" || { echo "Error starting $appname!"; exit 1; }
+while test "`dcop $appid Document-0 isLoading`" != "false"; do
+ sleep 1;
+done
+
+# Save again (in case of changes in syntax etc.)
+origfile=$PWD/oasisregtest-initial.$oldextension
+dcop $appid Document-0 saveAs $origfile || exit 1
+test -f $origfile || exit 1
+
+# Save to OASIS
+tmpoasisfile=$PWD/oasisregtest.$oasisextension
+dcop $appid Document-0 setOutputMimeType $oasismimetype || exit 1
+dcop $appid Document-0 saveAs $tmpoasisfile || exit 1
+test -f $tmpoasisfile || exit 1
+
+dcopquit $appid
+
+rm -rf oasisregtest-oasis
+mkdir oasisregtest-oasis
+cd oasisregtest-oasis || exit 1
+unzip $tmpoasisfile || exit 1
+cd ..
+
+# Load resulting OASIS file, convert to old native format
+tmpnativefile=$PWD/oasisregtest-final.$oldextension
+appid=`dcopstart $appname $tmpoasisfile`
+while `dcop $appid Document-0 isLoading` == "true"; do
+ sleep 1;
+done
+dcop $appid Document-0 setOutputMimeType "application/x-$appname" || exit 1
+dcop $appid Document-0 saveAs $tmpnativefile || exit 1
+test -f $tmpnativefile || exit 1
+
+# Unpack everything
+rm -rf oasisregtest-orig
+mkdir oasisregtest-orig
+rm -rf oasisregtest-final
+mkdir oasisregtest-final
+cd oasisregtest-orig || exit 1
+unzip $origfile || exit 1
+cd ..
+cd oasisregtest-final || exit 1
+unzip $tmpnativefile || exit 1
+cd ..
+# Validate OASIS format
+cd oasisregtest-oasis || exit 1
+if test "$checkoasis" = "1"; then
+ if type -p oasislint >/dev/null 2>&1; then
+ for f in content.xml styles.xml meta.xml settings.xml; do
+ echo "Checking $f..." ; oasislint $f
+ done
+ fi
+ # Hide warning about non-standard oasis attribute being used for a kword-specific feature
+ perl -pi -e 's/style:frame-behavior-on-new-page="[^\"]*"//' content.xml
+ if type -p oasislint-strict >/dev/null 2>&1; then
+ for f in content.xml styles.xml meta.xml settings.xml; do
+ echo "Checking $f strict..." && oasislint-strict $f
+ done
+ fi
+fi
+cd ..
+
+# Some fixups - kword specific
+# 1) the name of the main text frameset changes, no big deal, so adjust in orig
+# 2) modification time obviously changed, remove it
+# 3) paragraph direction, text color and relativetextsize are now explicitly saved, hide them from the diff
+perl -pi -e 's/\"Text Frameset 1\"/\"Main Text Frameset\"/;s,<WEIGHT value="48" />,<WEIGHT value="40" />,' oasisregtest-orig/maindoc.xml
+perl -pi -e 's/<FLOW dir="L"/<FLOW/ ; s/relativetextsize="0.58" //' oasisregtest-final/maindoc.xml
+perl -pi -e 's/modificationDate=\"[0-9-T:]*\"//; $_="" if (/<COLOR blue=\"0\" red=\"0\" green=\"0\" \/>/);' oasisregtest-final/maindoc.xml oasisregtest-orig/maindoc.xml
+
+# Some generic fixups: documentinfo was updated by the automated 'editing'
+perl -pi -e '$_ = "" if (/<editing-cycles>/ || /<date>/ || /<full-name>/ || /<company>/ || /<email>/ )' oasisregtest-final/documentinfo.xml oasisregtest-orig/documentinfo.xml
+
+# Compare initial and final "native format" files
+diff -urp oasisregtest-orig oasisregtest-final 2>&1 | tee oasisdiff | less
+
+echo "See oasisregtest-oasis for the OASIS xml files."
+echo "For a better diffing mechanism, launch xemacs and paste into a terminal:"
+echo "gnudoit '(ediff-files \"$PWD/oasisregtest-orig/maindoc.xml\" \"$PWD/oasisregtest-final/maindoc.xml\")'"