summaryrefslogtreecommitdiffstats
path: root/kexi/tests/altertable/README
diff options
context:
space:
mode:
Diffstat (limited to 'kexi/tests/altertable/README')
-rw-r--r--kexi/tests/altertable/README200
1 files changed, 200 insertions, 0 deletions
diff --git a/kexi/tests/altertable/README b/kexi/tests/altertable/README
new file mode 100644
index 00000000..1278a54d
--- /dev/null
+++ b/kexi/tests/altertable/README
@@ -0,0 +1,200 @@
+===================================================
+ README for the "altertable" test
+ Copyright (C) 2006 Jaroslaw Staniek <js@iidea.pl>
+===================================================
+
+
+Invoking
+--------
+"altertable" test requires <db_name>, <driver_name> and <alterscript> arguments
+
+The purpose of .altertable files
+--------------------------------
+.altertable files are provoded to test a given use case of table altering.
+It contains a set of commands mapped to a sequence of ALTER TABLE and other
+SQL statements. The commands are mapped to AlterTableHandler::***Action objects,
+what is equat to actions performed by the user during the table designing.
+
+Second purpose of the test is testing the Table Designer's GUI itself.
+Whenever there is a bug in a the GUI, e.g. in the property editor,
+the resulting schema can differ from expected, or there can be even a crash.
+The suite already helped to find a few bugs in the GUI code.
+
+
+How the test is performed, .alterscript file contents
+-----------------------------------------------------
+
+The file can be consisted of many sections described below. The test can be built by:
+a. requesting a table design to be opened in the Table designer,
+b. specifying commands affecting the design,
+c. then checking the actions sequence genrated by the "alter table machinery"
+ (it's a method that allocates AlterTableHandler::***Action objects and add them
+ using AlterTableHandler::addAction() to the alte table machinery.
+ The result is the same as user's actions);
+d. then saving the design,
+e. and finally checking the table data with the expected table contents.
+Every comparison is performed line by line: obtained result is compared with expected one.
+
+2. Expected result of altering the table.
+ It's a full human-redable dump of table schema and its contents.
+
+Each section has a strictly defined format, so the test suite can combine commands into more complex sets.
+
+
+Available commands of the test suite
+------------------------------------
+
+1. Top-level commands
+
+* openDatabase <filename>
+ Opens kexi database for tests. In fact the file is copied to a temporary file (with .tmp suffix)
+ and we're dealing with the copy, so the original could not be broken. Thus, tests can be reproduced.
+#TODO: support server databases
+ Example use: openDatabase 1.kexi
+
+* designTable <tablename> \n <block> \n endDesign
+ Opens table in design mode. <block> contains one or more schema altering
+ commands described in 2.
+
+2. Commands for altering table fields (during the design mode, within "designTable" command):
+
+* insertField <rownumber(int)> <fieldname(string)>
+ Inserts a new table field with default properties (text type) and 'fieldname' name.
+ Note that the inserted field can *replace* an existing field. To avoid this, use
+ insertEmptyRow command before insertField to add an empty row.
+ Example use: insertField 2 abc
+
+* insertEmptyRow <rownumber(int)>
+ Inserts empty row before 'rownumber'. Rows below are moved down.
+ Example use: insertEmptyRow 2
+
+* removeField <rownumber(int)>
+ Removes a table field at a specified row.
+ Example use: removeField 1
+
+* changeFieldProperty <rownumber(int)> <propertyname(string)> <valuetype(string)> <value(string)>
+ Changes property of table field at a specified row.
+ 'valuetype' can be int, string, bool, double/float, bool/boolean, data, dateTime, time,
+ bytearray, longlong.
+ <value(string)> should be a string representation of the value. Special cases are:
+ byteArray: hexadecimal string like 'fd1a5c', dateTime: yyyy-mm-ddThh:mm:ss string
+ like '2005-11-05T12:34:56'.
+ Null values should be specified as <null> string. Empty string values should be specified as "".
+ 'type' property means a field datatype, where value can be any of the names
+ in KexiDB::Field::Type enum, written as string, e.g. "integer","text", "date", etc.
+ Example use: changeFieldProperty 1 type string date
+
+* i++
+ Increases "i" variable by 1. This integer variable is initialized to 1 before test is executed.
+ Can be used as an argument for <rownumber(int)> for above field-related commands.
+
+* i=<number(int)>
+ Sets "i" variable to <number(int)>.
+ Example use: shows that using the variable instead of constants allows to insert
+ a command without a need for managing subsequent arguments.
+ i=3
+ removeField i
+ insertField i textField
+ changeFieldProperty i type string text
+ i++ #i is now 4
+ insertField i longTextField
+ changeFieldProperty i type string longText
+
+3. Commands related to altered (not saved) table schema:
+
+* showSchema [clipboard]
+ Shows schema dump as returned by KexiTableDesignerInterface::debugStringForCurrentTableSchema().
+ Useful for creating "checkSchema" checks: Just paste the output to the test file.
+ You can use "clipboard" word to copy prepare the schema dump to clipboard.
+
+* checkSchema \n <block> \n endSchema
+ Checks validity of the not yet saved schema altered in the Table Designer using the
+ actions listed in p. 1. The <block> should end with "endSchema" line.
+ Between these lines there should be pasted a <block> - exact textual schema dump as returned
+ by KexiTableDesignerInterface::debugStringForCurrentTableSchema().
+ The check compares lines returned from the Designer with the lines you provided, line by line.
+ You can use "showSchema" command to display the expected schema to the stderr and copy the text.
+ Every line contains up to three main sections <fieldname> <type> [<constraints>].
+ The lines can be indented - trailing and leading whitespaces are ignored in comparison.
+ Example use:
+ checkSchema
+ textfield Text(200)
+ owner UNSIGNED Integer
+ booleanfield Boolean NOTNULL
+ endSchema
+
+4. Commands related to simplified list of Alter Table actions (simulated, before real saving):
+
+* showActions [clipboard]
+ Shows the list of simplified Alter Table actions that are result of commands related to table fields,
+ mentioned in 1.
+ You can use "clipboard" word to copy prepare the expected actions dump to clipboard.
+
+* checkActions \n <block> \n endActions
+ Checks validity of the list of simplified Alter Table actions.
+ The <block> should end with "endActions" line.
+ The check compares lines returned from the Designer with the lines you provided as <block>, line by line.
+ Textual dump of actions is obtained from KexiTableDesignerInterface::simulateAlterTableExecution().
+ Every line contains section(s): <actionname> [(<fielddebugstring>)].
+ Example use:
+ checkActions
+ Insert table field "textfield" at position 1 (textfield Text(200))
+ Remove table field "model"
+ Insert table field "longtextfield" at position 3 (longtextfield Text(200))
+ endActions
+
+5. Commands related to physical schema saving (altering) and checking its result
+
+* saveTableDesign
+ Executes the final Alter Table function. Table design will be altered and data should
+ be preserved. After this command it is usable to run "checkTableData" test to see
+ whether the data looks as expected.
+
+* showTableData [clipboard]
+ Shows current table contents in tab-separated CSV format (one row per record)
+ on the stderr; text is encoded in utf-8. The data is printed to the stderr.
+ If optional "clipboard" word is present, the data is copied to clipboard instead.
+ Table dumps can be sometimes large and hard to prepare by hand, so you can use
+ "clipboard" word to prepare the expected table dump by pasting the text to
+ a .altertable file.
+ For details about the output format in the description "checkTableData".
+
+* checkTableData \n <block> \n endTableData
+ Compares the current contents of table with expected contents, line by line.
+ The data has to be in tab-separated CSV format (one row per record);
+ text has to be encoded in utf-8 and enclosed in " quotes.
+ Column names should be included as a first row.
+ You can use showTableData command first and then copy the results to your test file for later.
+ Example use:
+ checkTableData
+ ID Name Surname
+ 1 John Wayne
+ 2 Al Pacino
+ endTableData
+
+6. Other commands.
+
+* closeWindow
+ Closes the currently opened table designer window without asking for saving changes.
+
+* stop
+ Stops processing immediately. For example, this can be inserted temporarily to stop testing
+ (with success result). This command is available in any place.
+
+* quit
+ Executes "closeWindow" command and quits the application (with success result).
+
+6. Comments
+
+Comments can be inserted by adding # on the left hand as in bash shell
+or using /* and */ for multiple rows. Empty rows are ignored.
+
+
+The result of executing the "altertable" test
+---------------------------------------------
+
+On errors, kexialtertabletest program will show an appropriate error message with line number
+where the error encountered and stop executing the tests.
+
+A given "checkSchema" command should result in "Schema check for table 'foo': OK" message.
+Entire test from a give .altertable file 'foo' should end with "Tests from file 'foo': OK" message.