Index: tests/Python/AllActions/getPossibleOptions.sh
===================================================================
--- tests/Python/AllActions/getPossibleOptions.sh	(revision c015b3946b9bb714ae6740f4fbfd3378234a0404)
+++ tests/Python/AllActions/getPossibleOptions.sh	(revision c015b3946b9bb714ae6740f4fbfd3378234a0404)
@@ -0,0 +1,66 @@
+#!/bin/bash
+
+if [ -z $1 ]; then
+	echo "Usage: $0 <output file>"
+	exit 1
+fi
+
+OUTPUT=$1
+
+rm -f $OUTPUT.temp
+
+liste=(`cat <missing_sorted.dat`)
+
+check=()
+i=0
+while [ $i -lt ${#liste[*]} ]; do
+	check[$i]=0
+	((i+=1))
+done
+
+OLDIFS=$IFS
+IFS='
+'
+for line in `find . -name '*.at' -exec grep molecuilder {} \;`; do 
+	call=`echo $line | awk -F"/molecuilder" '{print $2}' | awk -F"]" '{print $1}'`
+	#echo "call is $call"	
+	i=0
+	while [ $i -lt ${#liste[*]} ]; do
+		#echo "Looking for ${liste[$i]} ..."
+		if [ ! -z `echo $call | grep ${liste[$i]}` ]; then
+		opts=`echo $call | awk -F"--${liste[$i]} " {'print $2'}`
+		if [ ! -z $opts ]; then
+			echo "opts is $opts"	
+			value=`echo $opts | awk -F" -" {'print $1'} | awk -F"]" '{print $1}' | awk -F"--" {'print $1'}`
+			value2=`echo $value | awk -F"\"" '{print $2}'`
+			if [ ! -z $value2 ]; then
+				value=$value2
+			fi
+			if [ -z $value ]; then
+				echo "Found an option ${liste[$i]} with no value."
+				echo -e "${liste[$i]}\t\"\"" >>$OUTPUT.temp
+			else
+				echo "Found an option ${liste[$i]} with value $value."
+				echo -e "${liste[$i]}\t\"$value\"" >>$OUTPUT.temp
+			fi
+			check[$i]=1
+		fi
+		fi
+		((i+=1))
+	done
+done
+IFS=$OLDIFS
+
+# output empty defaults for values not found
+i=0
+while [ $i -lt ${#liste[*]} ]; do
+	if [ ${check[$i]} -eq 0 ]; then
+		echo -e "${liste[$i]}\t\"\"" >>$OUTPUT.temp
+	fi
+	((i+=1))
+done
+
+echo -e "#key\tvalue" >$OUTPUT
+sort $OUTPUT.temp | uniq >>$OUTPUT
+
+
Index: tests/Python/AllActions/listcmds.py
===================================================================
--- tests/Python/AllActions/listcmds.py	(revision c015b3946b9bb714ae6740f4fbfd3378234a0404)
+++ tests/Python/AllActions/listcmds.py	(revision c015b3946b9bb714ae6740f4fbfd3378234a0404)
@@ -0,0 +1,19 @@
+#!/usr/bin/python
+#
+# gathers all Actions in pyMoleCuilder module and tests them with some default
+# values.
+#
+# date: Oct 5, 2011
+# author: Gregor Bollerhey
+
+import pyMoleCuilder as mol
+import sys
+
+cmds =  filter(lambda s: s[0] != '_' and s[:10] != 'PythonType', dir(mol))
+
+for value in cmds:
+  sys.stdout.write(value+"\t")
+sys.stdout.write("\n")
+
+sys.exit(0)
+
Index: tests/Python/AllActions/missing.dat
===================================================================
--- tests/Python/AllActions/missing.dat	(revision c015b3946b9bb714ae6740f4fbfd3378234a0404)
+++ tests/Python/AllActions/missing.dat	(revision c015b3946b9bb714ae6740f4fbfd3378234a0404)
@@ -0,0 +1,94 @@
+bin-start
+bin-width
+bin-end
+output-file
+bin-output-file
+periodic
+elements
+position
+molecule-by-id
+add-atom
+domain-position
+change-element
+rotate-around-origin
+save-selected-atoms
+translate-atoms
+bond-table
+element-db
+fastparsing
+actionname
+set-random-number-distribution
+random-number-distribution-parameters
+set-random-number-engine
+random-number-engine-parameters
+verbose
+fragment-molecule
+distance
+order
+depth-first-search
+bond-file
+skiplines
+offset
+change-molname
+copy-molecule
+fill-void
+distances
+distance-to-molecule
+random-atom-displacement
+random-molecule-displacement
+distance-to-boundary
+DoRotate
+fill-molecule
+MaxDistance
+start-step
+interpolation-steps
+end-step
+id-mapping
+load
+rotate-around-self
+axis
+rotate-to-principal-axis-system
+save-adjacency
+save-bonds
+save-selected-molecules
+save-temperature
+suspend-in-water
+verlet-integration
+deltat
+MDSteps
+keep-fixed-CenterOfMass
+parse-tremolo-potentials
+set-mpqc-parameters
+set-output
+set-tremolo-atomdata
+select-atoms-inside-cuboid
+angle-x
+angle-y
+angle-z
+select-atoms-inside-sphere
+select-atom-by-element
+select-atom-by-id
+select-molecules-by-formula
+select-molecule-by-id
+select-molecules-by-name
+select-molecule-by-order
+unselect-atoms-inside-cuboid
+unselect-atoms-inside-sphere
+unselect-atom-by-element
+unselect-atom-by-id
+unselect-molecules-by-formula
+unselect-molecule-by-id
+unselect-molecules-by-name
+unselect-molecule-by-order
+convex-file
+nonconvex-file
+nonconvex-envelope
+add-empty-boundary
+center-in-box
+change-box
+input
+output
+repeat-box
+scale-box
+default-molname
+set-world-time
Index: tests/Python/AllActions/moltest.py
===================================================================
--- tests/Python/AllActions/moltest.py	(revision c015b3946b9bb714ae6740f4fbfd3378234a0404)
+++ tests/Python/AllActions/moltest.py	(revision c015b3946b9bb714ae6740f4fbfd3378234a0404)
@@ -0,0 +1,81 @@
+#!/usr/bin/python
+#
+# gathers all Actions in pyMoleCuilder module and tests them with some default
+# values.
+#
+# date: Oct 5, 2011
+# author: Gregor Bollerhey
+
+import pyMoleCuilder as mol
+import sys, re, subprocess
+
+# cmd given?
+if len(sys.argv) < 1:
+  sys.stderr.write("Usage: "+sys.argv[0]+" <cmd>\n")
+  sys.exit(255)
+
+cmd = sys.argv[1]
+
+# options.dat einlesen
+
+Defaults = {}
+
+with open('options.dat') as f:
+    for line in f:
+        if len(line) > 0 and line[0] != '#':
+            key, value = line.split('\t', 1)
+            value = value[1:-2] # quotes entfernen
+        
+            Defaults[key] = value
+
+# aufrufen
+
+Allparams = []
+
+def ParseParameters(docstring):
+    result = []
+    params = re.findall(r'\(str\)([-a-zA-Z]*)', docstring)
+
+    for param in params:
+        if not param in Allparams:
+            Allparams.append(param)
+            
+            if not param in Defaults:
+                print 'Fehlender Defaultwert:', param
+        
+        # direkt substituieren, oder erst beim aufruf?
+        if param in Defaults:
+            param = Defaults[param]
+        
+        result.append(param)
+
+    return result
+
+doc = eval('mol.%s.__doc__' % cmd)
+params = ParseParameters(doc)
+
+print '--BEGIN-- %s mit %s --------' % (cmd, params)
+   
+# write command to file
+output=open("test.py", "w")
+output.write('import pyMoleCuilder as mol\nparams = %s\nmol.%s(*params)\n' % (params, cmd))
+output.close()
+# call python externally on this file and catch retcode
+p = subprocess.Popen(["python", "test.py"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+stdout, stderr = p.communicate()
+print ' --- STDOUT ---'
+print ' %s ' % (stdout)
+print ' --- STDERR ---'
+print ' %s ' % (stderr)
+retcode = p.returncode
+if retcode == 134 or retcode == 0:
+  print ' ---- ok ----'
+else:
+  print ' -- FAILED with %s --' % (retcode)
+#  if retcode == 1:
+#    sys.exit(1)
+#exec('mol.%s(*params)' % cmd)
+
+print '---END--- %s mit %s --------' % (cmd, params)
+
+sys.exit(0)
Index: tests/Python/AllActions/moltest_check.py
===================================================================
--- tests/Python/AllActions/moltest_check.py	(revision c015b3946b9bb714ae6740f4fbfd3378234a0404)
+++ tests/Python/AllActions/moltest_check.py	(revision c015b3946b9bb714ae6740f4fbfd3378234a0404)
@@ -0,0 +1,42 @@
+import pyMoleCuilder as mol
+import re, os, sys
+
+cmds =  filter(lambda s: (s[0] != '_') and (s[0:11] != "PythonType_"), dir(mol))
+
+# read options.dat
+
+Defaults = {}
+
+with open('options.dat') as f:
+    for line in f:
+        if len(line) > 0 and line[0] != '#':
+            key, value = line.split('\t', 1)
+            value = value[1:-2] # remove quotes
+        
+            Defaults[key] = value
+
+Allparams = []
+
+def CheckParameters(docstring):
+    result = 0
+    params = re.findall(r'\(str\)([-a-zA-Z]*)', docstring)
+
+    for param in params:
+        if not param in Allparams:
+            Allparams.append(param)
+            
+            if not param in Defaults:
+                print >> sys.stderr, param # write missing default value to stderr
+                result = 1
+
+    return result
+
+result = 0
+
+for cmd in cmds:
+    print "Checking on %s" % cmd
+    doc = eval('mol.%s.__doc__' % cmd)
+    if CheckParameters(doc) == 1:
+        result = 1
+        
+sys.exit(result)
Index: tests/Python/AllActions/options.dat
===================================================================
--- tests/Python/AllActions/options.dat	(revision c015b3946b9bb714ae6740f4fbfd3378234a0404)
+++ tests/Python/AllActions/options.dat	(revision c015b3946b9bb714ae6740f4fbfd3378234a0404)
@@ -0,0 +1,189 @@
+#key	value
+actionname	"help"
+add-atom	"1"
+add-empty-boundary	""
+angle-x	"0."
+angle-x	"0"
+angle-y	"0."
+angle-y	"0"
+angle-z	"0 "
+angle-z	"0."
+angle-z	"0"
+axis	"0 0 1"
+axis	"0 1 0"
+axis	"1 2 1"
+bin-end	"10"
+bin-end	"20"
+bin-end	"359"
+bin-end	"359.5"
+bin-end	"5"
+bin-output-file	"bin_output-10.csv"
+bin-output-file	"bin_output-20.csv"
+bin-output-file	"bin_output-5.csv"
+bin-output-file	"bin_output.csv"
+bin-output-file	"emptybox_histogram.dat"
+bin-output-file	"hydrogenbox_histogram.dat"
+bin-output-file	"waterbox_histogram.dat"
+bin-output-file	"waterbox-mirrored_histogram.dat"
+bin-start	"0"
+bin-start	"-0.5"
+bin-start	"10"
+bin-start	"5"
+bin-width	"1."
+bond-file	"bond.dat"
+bond-table	"table.dat"
+calculate-bounding-box	""
+calculate-molar-mass	""
+center-in-box	"10 0 0 10 0 10"
+change-box	"10 0 0 10 0 10"
+change-element	"H"
+change-molname	"water"
+convex-file	"convexfile"
+copy-molecule	"0"
+create-micelle	"200"
+default-molname	"molname"
+deltat	"0.01"
+depth-first-search	"2."
+dipole-angular-correlation	"H2O"
+distance	"1.55"
+distances	"3.1 3.1 3.1"
+distances	"3.1 3.1 3.1"
+distance-to-boundary	"1."
+distance-to-molecule	"1.5"
+distance-to-molecule	"2.1"
+domain-position	"0.  0. 0."
+domain-position	"0 0 0"
+domain-position	"10. 10. 10."
+DoRotate	"0"
+DoSaturate	"0"
+element-db	"./"
+elements	"1"
+elements	"1 8"
+end-step	"1"
+fastparsing	"1"
+fill-molecule	"filler.xyz"
+fill-void	"hydrogen.xyz"
+fill-void	"water.data"
+fill-void	"water.xyz"
+fragment-molecule	"./"
+id-mapping	"1"
+input	"test.data"
+interpolation-steps	"9"
+keep-fixed-CenterOfMass	"0"
+load	"test.data"
+MaxDistance	"-1"
+MDSteps	"1"
+molecule-by-id	"0"
+nonconvex-envelope	"25"
+nonconvex-file	"NonConvexEnvelope"
+nonconvex-file	"nonconvexfile"
+offset	"0"
+offset	"1"
+order	"2"
+output-file	"emptybox_values.dat"
+output-file	"hydrogenbox_values.dat"
+output-file	"output-10.csv"
+output-file	"output-20.csv"
+output-file	"output-5.csv"
+output-file	"output.csv"
+output-file	"waterbox-mirrored_values.dat"
+output-file	"waterbox_values.dat"
+output	"store.conf"
+output	"store.data"
+output	"store.pdb"
+output	"store.xyz"
+output	"test.in"
+output-types	"xyz"
+output-types	"xyz mpqc"
+parse-tremolo-potentials	"argon.potentials"
+parse-tremolo-potentials	"tensid.potentials"
+parser-parameters	"mpqc"
+parser-parameters	"psi3"
+periodic	"0"
+position	"0 0 0"
+position	"0 0 1"
+position	"0 0 10"
+position	"10 10 10"
+position	"10. 10. 10."
+position	"1 2 1"
+position	"5.63 5.71 5.71"
+position	"7.283585982 3.275186040 3.535886037"
+position	"9.78 2.64 2.64"
+radius	"20."
+random-atom-displacement	"0."
+random-molecule-displacement	"0."
+random-number-distribution-parameters	"max=20;"
+random-number-engine-parameters	"seed=2;"
+repeat-box	"1 1 1"
+rotate-around-origin	"180."
+rotate-around-origin	"20."
+rotate-around-origin	"360."
+rotate-around-origin	"90."
+rotate-around-self	"180."
+rotate-around-self	"180"
+rotate-around-self	"20."
+rotate-around-self	"360."
+rotate-around-self	"90."
+rotate-to-principal-axis-system	""
+save-adjacency	"test.adj"
+save-bonds	"test.bond"
+save-selected-atoms	"testsave.xyz"
+save-selected-molecules	"testsave.xyz"
+save-temperature	"test.ekin"
+scale-box	"0.5 1. 0.9"
+select-atom-by-element	"1"
+select-atom-by-element	"4"
+select-atom-by-id	"0"
+select-atoms-inside-cuboid	"10 10 10"
+select-atoms-inside-cuboid	"2 2 2"
+select-atoms-inside-sphere	"0.2"
+select-atoms-inside-sphere	"10"
+select-atoms-inside-sphere	"7."
+select-molecule-by-id	"0"
+select-molecule-by-id	"1"
+select-molecule-by-id	"4"
+select-molecule-by-order	"-1"
+select-molecule-by-order	"1"
+select-molecule-by-order	"-2"
+select-molecule-by-order	"2"
+select-molecules-by-formula	"C2H5(OH)"
+select-molecules-by-formula	"C6H6"
+select-molecules-by-formula	"H2O"
+select-molecules-by-name	"water"
+set-parser-parameters	"basis = 4-31G"
+set-parser-parameters	"basis = 4-31G;maxiter=499;theory=CLKS;"
+set-parser-parameters	"maxiter = 499"
+set-parser-parameters	"theory=CLKS"
+set-parser-parameters	"wfn=scf"
+set-parser-parameters	"ref=uhf"
+set-output	"tremolo"
+set-random-number-distribution	"uniform_int"
+set-random-number-engine	"lagged_fibonacci607"
+set-tremolo-atomdata	"ATOMDATA type id x=3"
+set-world-time	"10"
+skiplines	"1"
+skiplines	"2"
+start-step	"0"
+suspend-in-water	"1.0"
+time-step-zero	"0"
+translate-atoms	"1. 0. 0."
+unselect-atom-by-element	"1"
+unselect-atom-by-element	"4"
+unselect-atom-by-id	"0"
+unselect-atoms-inside-cuboid	"10 10 10"
+unselect-atoms-inside-cuboid	"2 2 2"
+unselect-atoms-inside-sphere	"10"
+unselect-atoms-inside-sphere	"7."
+unselect-molecule-by-id	"0"
+unselect-molecule-by-id	"4"
+unselect-molecule-by-order	"-1"
+unselect-molecule-by-order	"1"
+unselect-molecule-by-order	"-2"
+unselect-molecule-by-order	"2"
+unselect-molecules-by-formula	"C2H5(OH)"
+unselect-molecules-by-formula	"C3H8"
+unselect-molecules-by-formula	"C6H6"
+unselect-molecules-by-formula	"H2O"
+unselect-molecules-by-name	"water"
+verbose	"3"
+verlet-integration	"forces.dat"
Index: tests/Python/AllActions/testsuite-python-allactions.at
===================================================================
--- tests/Python/AllActions/testsuite-python-allactions.at	(revision c015b3946b9bb714ae6740f4fbfd3378234a0404)
+++ tests/Python/AllActions/testsuite-python-allactions.at	(revision c015b3946b9bb714ae6740f4fbfd3378234a0404)
@@ -0,0 +1,18 @@
+# AllActions
+
+AT_SETUP([Python externalization - presence of all Actions])
+AT_KEYWORDS([python])
+AT_DATA([test.py], [
+import pyMoleCuilder as mol
+print mol.ThisCommandIsNotPresent()
+])
+AT_CHECK([../../run test.py], 1, [ignore], [stderr])
+AT_CHECK([fgrep "object has no attribute" stderr], 0, [ignore], [ignore])
+AT_CHECK([../../run ${abs_top_srcdir}/tests/Python/AllActions/listcmds.py], 0, [stdout], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/Python/AllActions/options.dat .],  0, [ignore], [ignore])
+for cmd in `head -n 1 stdout`
+do
+	AT_CHECK([echo "Checking presence of $cmd ..."], 0, [ignore], [ignore])
+	AT_CHECK([../../run ${abs_top_srcdir}/tests/Python/AllActions/moltest.py $cmd], 0, [stdout], [ignore])
+done
+AT_CLEANUP
Index: tests/Python/AllActions/testsuite-python-options_dat.at
===================================================================
--- tests/Python/AllActions/testsuite-python-options_dat.at	(revision c015b3946b9bb714ae6740f4fbfd3378234a0404)
+++ tests/Python/AllActions/testsuite-python-options_dat.at	(revision c015b3946b9bb714ae6740f4fbfd3378234a0404)
@@ -0,0 +1,6 @@
+AT_SETUP([Python externalization - Completeness of default options])
+AT_KEYWORDS([python options_dat])
+m4_include(atlocal)
+AT_CHECK([cp -f ${abs_top_srcdir}/tests/Python/AllActions/options.dat .], 0, [ignore], [ignore])
+AT_CHECK([../../run ${abs_top_srcdir}/tests/Python/AllActions/moltest_check.py], 0, [ignore], [ignore])
+AT_CLEANUP
