Browse Source

Add message tests

v0.7.4-release
Ryan Dahl 15 years ago
parent
commit
125b868e06
  1. 5
      Makefile
  2. 48
      test/message/2100bytes.js
  3. 42
      test/message/2100bytes.out
  4. 3
      test/message/hello_world.js
  5. 1
      test/message/hello_world.out
  6. 135
      test/message/testcfg.py

5
Makefile

@ -13,7 +13,7 @@ uninstall:
@$(WAF) uninstall
test: all
python tools/test.py --mode=release simple
python tools/test.py --mode=release simple message
test-all: all
python tools/test.py --mode=debug,release
@ -24,6 +24,9 @@ test-release: all
test-debug: all
python tools/test.py --mode=debug
test-message: all
python tools/test.py message
test-simple: all
python tools/test.py simple

48
test/message/2100bytes.js

@ -0,0 +1,48 @@
require('../common');
sys = require('sys');
sys.error([
'***********************************************50',
'**********************************************100',
'**********************************************150',
'**********************************************200',
'**********************************************250',
'**********************************************300',
'**********************************************350',
'**********************************************400',
'**********************************************450',
'**********************************************500',
'**********************************************550',
'**********************************************600',
'**********************************************650',
'**********************************************700',
'**********************************************750',
'**********************************************800',
'**********************************************850',
'**********************************************900',
'**********************************************950',
'*********************************************1000',
'*********************************************1050',
'*********************************************1100',
'*********************************************1150',
'*********************************************1200',
'*********************************************1250',
'*********************************************1300',
'*********************************************1350',
'*********************************************1400',
'*********************************************1450',
'*********************************************1500',
'*********************************************1550',
'*********************************************1600',
'*********************************************1650',
'*********************************************1700',
'*********************************************1750',
'*********************************************1800',
'*********************************************1850',
'*********************************************1900',
'*********************************************1950',
'*********************************************2000',
'*********************************************2050',
'*********************************************2100',
].join('\n'));

42
test/message/2100bytes.out

@ -0,0 +1,42 @@
***********************************************50
**********************************************100
**********************************************150
**********************************************200
**********************************************250
**********************************************300
**********************************************350
**********************************************400
**********************************************450
**********************************************500
**********************************************550
**********************************************600
**********************************************650
**********************************************700
**********************************************750
**********************************************800
**********************************************850
**********************************************900
**********************************************950
*********************************************1000
*********************************************1050
*********************************************1100
*********************************************1150
*********************************************1200
*********************************************1250
*********************************************1300
*********************************************1350
*********************************************1400
*********************************************1450
*********************************************1500
*********************************************1550
*********************************************1600
*********************************************1650
*********************************************1700
*********************************************1750
*********************************************1800
*********************************************1850
*********************************************1900
*********************************************1950
*********************************************2000
*********************************************2050
*********************************************2100

3
test/message/hello_world.js

@ -0,0 +1,3 @@
require('../common');
error('hello world');

1
test/message/hello_world.out

@ -0,0 +1 @@
hello world

135
test/message/testcfg.py

@ -0,0 +1,135 @@
# Copyright 2008 the V8 project authors. All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following
# disclaimer in the documentation and/or other materials provided
# with the distribution.
# * Neither the name of Google Inc. nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import test
import os
from os.path import join, dirname, exists, basename, isdir
import re
FLAGS_PATTERN = re.compile(r"//\s+Flags:(.*)")
class MessageTestCase(test.TestCase):
def __init__(self, path, file, expected, mode, context, config):
super(MessageTestCase, self).__init__(context, path)
self.file = file
self.expected = expected
self.config = config
self.mode = mode
def IgnoreLine(self, str):
"""Ignore empty lines and valgrind output."""
if not str: return True
else: return str.startswith('==') or str.startswith('**')
def IsFailureOutput(self, output):
f = file(self.expected)
# Skip initial '#' comment and spaces
for line in f:
if (not line.startswith('#')) and (not line.strip()):
break
# Convert output lines to regexps that we can match
env = { 'basename': basename(self.file) }
patterns = [ ]
for line in f:
if not line.strip():
continue
pattern = re.escape(line.rstrip() % env)
pattern = pattern.replace('\\*', '.*')
pattern = '^%s$' % pattern
patterns.append(pattern)
# Compare actual output with the expected
raw_lines = output.stdout.split('\n')
outlines = [ s for s in raw_lines if not self.IgnoreLine(s) ]
if len(outlines) != len(patterns):
return True
for i in xrange(len(patterns)):
if not re.match(patterns[i], outlines[i]):
return True
return False
def GetLabel(self):
return "%s %s" % (self.mode, self.GetName())
def GetName(self):
return self.path[-1]
def GetCommand(self):
result = [self.config.context.GetVm(self.mode)]
source = open(self.file).read()
flags_match = FLAGS_PATTERN.search(source)
if flags_match:
result += flags_match.group(1).strip().split()
result.append(self.file)
return result
def GetSource(self):
return (open(self.file).read()
+ "\n--- expected output ---\n"
+ open(self.expected).read())
class MessageTestConfiguration(test.TestConfiguration):
def __init__(self, context, root):
super(MessageTestConfiguration, self).__init__(context, root)
def Ls(self, path):
if isdir(path):
return [f[:-3] for f in os.listdir(path) if f.endswith('.js')]
else:
return []
def ListTests(self, current_path, path, mode):
mjsunit = [current_path + [t] for t in self.Ls(self.root)]
#regress = [current_path + ['regress', t] for t in self.Ls(join(self.root, 'regress'))]
#bugs = [current_path + ['bugs', t] for t in self.Ls(join(self.root, 'bugs'))]
all_tests = mjsunit #+ regress + bugs
result = []
for test in all_tests:
if self.Contains(path, test):
file_prefix = join(self.root, reduce(join, test[1:], ""))
file_path = file_prefix + ".js"
output_path = file_prefix + ".out"
if not exists(output_path):
print "Could not find %s" % output_path
continue
result.append(MessageTestCase(test, file_path, output_path, mode,
self.context, self))
return result
def GetBuildRequirements(self):
return ['sample', 'sample=shell']
def GetTestStatus(self, sections, defs):
status_file = join(self.root, 'message.status')
if exists(status_file):
test.ReadConfigurationInto(status_file, sections, defs)
def GetConfiguration(context, root):
return MessageTestConfiguration(context, root)
Loading…
Cancel
Save