51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
|
"""
|
||
|
Search for Gruntfile.js files in all the addons and launch them using the 'grunt test' command.
|
||
|
"""
|
||
|
|
||
|
import common
|
||
|
import fnmatch
|
||
|
import os
|
||
|
import re
|
||
|
import sys
|
||
|
import subprocess
|
||
|
|
||
|
def grunt_tester(directories, log = sys.stdout):
|
||
|
result = 0
|
||
|
|
||
|
matches = []
|
||
|
for direc in directories:
|
||
|
for root, dirnames, filenames in os.walk(direc):
|
||
|
for filename in fnmatch.filter(filenames, 'Gruntfile.js'):
|
||
|
full = os.path.join(root, filename)
|
||
|
if re.match(r"(^.*?/node_modules/.*$)|(^.*?/lib/.*$)", full):
|
||
|
continue
|
||
|
matches.append(full)
|
||
|
|
||
|
for file_ in matches:
|
||
|
folder = os.path.dirname(file_)
|
||
|
p = subprocess.Popen(['npm', 'install'], cwd=folder)
|
||
|
if p.wait() != 0:
|
||
|
raise Exception("Failed to install dependencies for Gruntfile located in folder %s" % folder)
|
||
|
|
||
|
p = subprocess.Popen(['grunt', 'test', '--no-color'], cwd=folder, stdout=log, stderr=log)
|
||
|
if p.wait() != 0:
|
||
|
result = 1
|
||
|
|
||
|
return result
|
||
|
|
||
|
def run(args):
|
||
|
if args.addons:
|
||
|
args.addons = args.addons.split(':')
|
||
|
else:
|
||
|
args.addons = []
|
||
|
result = grunt_tester(args.addons)
|
||
|
if result != 0:
|
||
|
sys.exit(result)
|
||
|
|
||
|
def add_parser(subparsers):
|
||
|
parser = subparsers.add_parser('grunt-tests',
|
||
|
description='Run the tests contained in Gruntfile.js files.')
|
||
|
common.add_addons_argument(parser)
|
||
|
|
||
|
parser.set_defaults(run=run)
|