Included page: .FitNesse.UserGuide.WritingAcceptanceTests.SliM.SetUp (edit)

setup

import
fitnesse.slim.test
fitnesse.fixtures


script login dialog driver Bob xyzzy
login with username Bob and password xyzzy
check login message Bob logged in.
reject login with username Bob and password bad password
check login message Bob not logged in.
check not login message Bob logged in.
ensure login with username Bob and password xyzzy
note this is a comment
show number of login attempts
$symbol= login message

The fixture for this table is:
public class LoginDialogDriver {
  private String userName;
  private String password;
  private String message;
  private int loginAttempts;

  public LoginDialogDriver(String userName, String password) {
    this.userName = userName;
    this.password = password;
  }

  public boolean loginWithUsernameAndPassword(String userName, String password) {
    loginAttempts++;
    boolean result = this.userName.equals(userName) && this.password.equals(password);
    if (result)
      message = String.format("%s logged in.", this.userName);
    else
      message = String.format("%s not logged in.", this.userName);
    return result;
  }

  public String loginMessage() {
    return message;
  }

  public int numberOfLoginAttempts() {
    return loginAttempts;
  }
} 


This should be pretty clear. Each row is a single instruction in the script.

The first row is simply the word "Script" followed by the name and constructor arguments of the fixture (known as the "actor") that will be used by the rest of the table. If there is no actor specified then the previous script table's actor on this test page will be used.

The first cell could also have been
Script:login dialog driver Bob xyzzy

Most instructions involve some kind of function call. By default, the name of the function is assembled from tokens in every other cell. The arguments of the function are the intervening cells. Appending ";" to the end of a function name in a cell invokes sequential argument processing, which means that the arguments to the function are all subsequent cells.

Interposing Function Call (Default)

login with username Bob and password xyzzy

Sequential Argument Processing Function Call

login with username and password; Bob xyzzy