OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [insight/] [tk/] [testsuite/] [config/] [default.exp] - Rev 1770

Go to most recent revision | Compare with Previous | Blame | View Log

# Copyright (C) 1996 Cygnus Support

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-dejagnu@prep.ai.mit.edu

# This file was written by Tom Tromey <tromey@cygnus.com>

set testdrv "unix/tktest"
set tprompt "%"

#
# Extract and print the version number of wish.
#
proc tk_version {} {
  global testdrv
  if {! [catch {exec $testdrv -version} output]
      && ! [regsub {^.*version } $output {} version]} then {
    clone_output "Tk library is version\t$version\n"
  }
}

#
# Source a file.
#
proc tk_load {file} {
  global subdir testdrv spawn_id

  if {! [file exists $file]} then {
    perror "$file does not exist."
    return -1
  }

  verbose "Sourcing $file..."
  send "source $file\n"
  return 0
}

#
# Exit the test driver.
#
proc tk_exit {} {
  # If we started Xvfb, we should kill it.  This doesn't happen right
  # now, so this proc does nothing.
  # xvfb_exit
}

#
# Find X display to use.  Return 0 if not found.  Set DISPLAY
# environment variable if display found.
#
proc find_x_display {} {
  global env

  if {[info exists env(TEST_DISPLAY)]} then {
    set env(DISPLAY) $env(TEST_DISPLAY)
    return 1
  }

  return 0
}

#
# Start the test driver.
#
proc tk_start {} {
  global testdrv objdir subdir srcdir spawn_id tprompt

  set testdrv "$objdir/$testdrv"
  set defs "$srcdir/../tests/defs"

  set timeout 100
  set timetol 0

  if {! [find_x_display]} then {
      return -1
  }

  spawn $testdrv

  if ![file exists ${srcdir}/../tests] {
    perror "The source for the test cases is missing." 0
    return -1
  }

  send "[list set srcdir ${srcdir}/../tests]\r"
  expect {
    -re "set VERBOSE 1\[\r\n\]*1\[\r\n\]*%" {
      verbose "Set verbose flag for tests"
      exp_continue
    }
    -re "${srcdir}/../tests\[\r\n\]*$tprompt" {
      verbose "Set srcdir to $srcdir/../tests" 2
    }
    -re "no files matched glob pattern" {
      warning "Didn't set srcdir to $srcdir/../tests"
    }
    timeout {
      perror "Couldn't set srcdir"
      return -1
    }
  }

  if ![file exists $defs] then {
    perror "$defs does not exist."
    return -1
  }

  verbose "Sourcing $defs..."
  send "source $defs\r\n"
  
  expect {
    -re ".*source $defs.*$" {
      verbose "Sourced $defs"
    }
    "Error: couldn't read file*" {
      perror "Couldn't source $defs"
      return -1
    }
    "%" {
      verbose "Got prompt, sourced $defs"
    }
    timeout {
      warning "Timed out sourcing $defs."
      if { $timetol <= 3 } {
        incr timetol
        exp_continue
      } else {
        return -1
      }
    }
  }

  set timetol 0
  sleep 2
  send "set VERBOSE 1\n"
  expect {
    -re "% 1.*%" {
      verbose "Set verbose flag for tests"
    }
    -re "set VERBOSE 1.*1.*%" {
      verbose "Set verbose flag for tests"
    }
    timeout {
      perror "Timed out setting verbose flag."
      if { $timetol <= 3 } {
        exp_continue
      } else {
        return -1
      }
    }
  }
  return $spawn_id
}

################################################################
#
# Utility functions.
#

proc read_file {name} {
  set id [open $name r]
  set contents [read $id]
  close $id
  return $contents
}

proc write_file {name contents} {
  set id [open $name w]
  puts -nonewline $id $contents
  close $id
}

# NOTE that this fails to copy files with NULs in them.  Change
# implementation to "exec cp" if required.
proc copy_file {from to} {
  write_file $to [read_file $from]
}

################################################################
#
# Start/stop Xvfb.  These procs aren't used right now; we assume Xvfb
# is already running.
#

#
# Stop Xvfb.
#
proc xvfb_exit {} {
  global Xvfb_spawn_id

  # Send C-c to kill it.
  send -i $Xvfb_spawn_id "\003"
}

#
# Start Xvfb.  Return 0 on error, 1 if started.  Set DISPLAY
# environment variable on successful start.
# 
#
proc xvfb_start {} {
  global spawn_id Xvfb_spawn_id Xvfb_screen env

  # FIXME should look for Xvfb in build directory.  Do this later,
  # when we actually build Xvfb.

  set Xvfb [which Xvfb]
  # Why "0"?  I don't know, but that is what the manual says.
  if {$Xvfb == 0} then {
    perror "Couldn't find Xvfb"
    return 0
  }
  verbose "Xvfb is $Xvfb"

  # Pick a number at random...
  set Xvfb_screen 23

  while {$Xvfb_screen < 100} {
    spawn $Xvfb :$Xvfb_screen

    expect {
      "Server is already active" {
        incr Xvfb_screen
      }

      timeout {
        break
      }
    }
  }

  if {$Xvfb_screen == 100} then {
    perror "Xvfb screen is 100!"
    return 0
  }

  set Xvfb_spawn_id $spawn_id
  set env(DISPLAY) :$Xvfb_screen
  verbose "Screen is :$Xvfb_screen"
  return 1
}

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.