Difference between revisions of "Test"

From OdaWiki
(Writing tests)
Line 4: Line 4:
 
Tests are written in TCL, as this is a portable scripting language. It is best to start by copying an existing test. Tests should output lines containing the words "PASS" or "FAIL".
 
Tests are written in TCL, as this is a portable 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, control them and monitor the output. Complexity of the test increases with the complexity of the feature, this should encourage smaller individual changes.
  
 
==Example==
 
==Example==

Revision as of 14:26, 5 May 2008

Since 0.3, 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

Writing tests

Tests are written in TCL, as this is a portable 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, control them and monitor the output. Complexity of the test increases with the complexity of the feature, this should encourage smaller individual changes.

Example

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

# Create a list of demos to test
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 1]        \
			+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"
	}
}