Difference between revisions of "Test"

From OdaWiki
(Running tests)
Line 2: Line 2:
  
 
==Running tests==
 
==Running tests==
You will need to have TCL installed (see tcl.tk)
+
You will need to have [http://tcl.tk TCL] installed
  
 
===Under Windows===
 
===Under Windows===

Revision as of 00:33, 6 May 2008

Odamex has a lot of working features. The doom engine is sensitive to change, so to preserve functionality we have a set of tests to run on every submission. They are located in the tests directory.

Running tests

You will need to have TCL installed

Under Windows

Open a command window (Start, Run: cmd). Navigate to your working directory (the one which contains client, server and common folders). Run one of the tests:

cd trunk
tests\commands\cmdSay.tcl

Under Unix

You can run all tests with make test, or a specific test by navigating to the working directory and invoking one of the tcl test scripts from there:

cd trunk
tests/commands/cmdSay.tcl

Writing tests

Tests are written in TCL, as this is a portable easy to learn scripting language. It is best to start by copying an existing test. Tests should output lines containing the words "PASS" or "FAIL".

Tests can start/stop clients and servers, send them commands and monitor the output. Complexity of the test increases with the complexity of the feature, this encourages smaller changes.

Example

#!/bin/bash
# Do not change these first three lines \
exec tclsh "$0" "$@"

# Create a list of demos to test (a list of lists of 3 items)
lappend demos "DOOM2.WAD DEMO1 {15eb4720 3ccc7a1 3fc7e27 800000}"
lappend demos "DOOM2.WAD DEMO2 {cea29400 289b9c2 fece4356 600000}"
lappend demos "DOOM2.WAD DEMO3 {dca00040 fd6a4b9c ff7bee0a ff000000}"

foreach demo $demos {
	# Run this demo
	set stdout [exec ./odamex -nosound -novideo   \
			-iwad [lindex $demo 0]        \
			+demotest [lindex $demo 1]]

	# Take the last line of output
	set result [lindex [split $stdout "\n"] end]

	# Take the last item in this demo line (see top of test)
	set expected [lindex $demo 2]

	# Compare them
	if { $result != $expected} {
		puts "FAIL $demo | $result"
	} else {
		puts "PASS $demo | $result"
	}
}

See also