mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 14:45:29 +00:00
4ca15feade
Also set network.disable.ipc.security to true and leave it that way. This prevents security errors in the tests which happen when we pop the pref. --HG-- extra : rebase_source : 95f7ca7c3b71cdc0e3e6fd1cfb663a5653f3ab6f
122 lines
4.0 KiB
Python
122 lines
4.0 KiB
Python
"""A script to generate the browser-element test boilerplate.
|
|
|
|
This script requires Python 2.7."""
|
|
|
|
from __future__ import print_function
|
|
|
|
import sys
|
|
import os
|
|
import stat
|
|
import argparse
|
|
import textwrap
|
|
import subprocess
|
|
|
|
html_template = textwrap.dedent("""\
|
|
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<title>Test for Bug {bug}</title>
|
|
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<script type="application/javascript" src="browserElementTestHelpers.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
|
</head>
|
|
<body>
|
|
<script type="application/javascript;version=1.7" src="browserElement_{test}.js">
|
|
</script>
|
|
</body>
|
|
</html>""")
|
|
|
|
# Note: Curly braces are escaped as "{{".
|
|
js_template = textwrap.dedent("""\
|
|
/* Any copyright is dedicated to the public domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
// Bug {bug} - FILL IN TEST DESCRIPTION
|
|
"use strict";
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
browserElementTestHelpers.setEnabledPref(true);
|
|
browserElementTestHelpers.addPermission();
|
|
|
|
function runTest() {{
|
|
var iframe = document.createElement('iframe');
|
|
SpecialPowers.wrap(iframe).mozbrowser = true;
|
|
|
|
// FILL IN TEST
|
|
|
|
document.body.appendChild(iframe);
|
|
}}
|
|
|
|
addEventListener('testready', runTest);
|
|
""")
|
|
|
|
def print_fill(s):
|
|
print(textwrap.fill(textwrap.dedent(s)))
|
|
|
|
def add_to_makefile(filenames):
|
|
"""Add a list of filenames to this directory's Makefile.in, then open
|
|
$EDITOR and let the user move the filenames to their appropriate places in
|
|
the file.
|
|
|
|
"""
|
|
lines_to_write = [''] + ['\t\t%s \\' % n for n in filenames]
|
|
with open('Makefile.in', 'a') as f:
|
|
f.write('\n'.join(lines_to_write))
|
|
|
|
if 'EDITOR' not in os.environ or not os.environ['EDITOR']:
|
|
print_fill("""\
|
|
Now open Makefile.in and move the filenames to their correct places.")
|
|
(Define $EDITOR and I'll open your editor for you next time.)""")
|
|
return
|
|
|
|
# Count the number of lines in Makefile.in.
|
|
with open('Makefile.in', 'r') as f:
|
|
num_lines = len(f.readlines())
|
|
|
|
try:
|
|
subprocess.call([os.environ['EDITOR'],
|
|
'+%d' % (num_lines - len(lines_to_write) + 2),
|
|
'Makefile.in'])
|
|
except Exception as e:
|
|
print_fill("Error opening $EDITOR: %s." % str(e))
|
|
print()
|
|
print_fill("""\
|
|
Please open Makefile.in and move the filenames at the bottom of the
|
|
file to their correct places.""")
|
|
|
|
def main(test_name, bug_number):
|
|
global html_template, js_template
|
|
|
|
def format(str):
|
|
return str.format(bug=bug_number, test=test_name)
|
|
|
|
def create_file(filename, template):
|
|
path = os.path.join(os.path.dirname(sys.argv[0]), format(filename))
|
|
# Create a new file, bailing with an error if the file exists.
|
|
fd = os.open(path, os.O_WRONLY | os.O_CREAT | os.O_EXCL)
|
|
|
|
try:
|
|
# This file has 777 permission when created, for whatever reason. Make it rw-rw-r---.
|
|
os.fchmod(fd, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IWGRP | stat.S_IROTH)
|
|
except:
|
|
# fchmod doesn't work on Windows.
|
|
pass
|
|
|
|
with os.fdopen(fd, 'w') as file:
|
|
file.write(format(template))
|
|
|
|
create_file('browserElement_{test}.js', js_template)
|
|
create_file('test_browserElement_inproc_{test}.html', html_template)
|
|
create_file('test_browserElement_oop_{test}.html', html_template)
|
|
|
|
add_to_makefile([format(x) for x in ['browserElement_{test}.js',
|
|
'test_browserElement_inproc_{test}.html',
|
|
'test_browserElement_oop_{test}.html']])
|
|
|
|
if __name__ == '__main__':
|
|
parser = argparse.ArgumentParser(description="Create a new browser-element testcase.")
|
|
parser.add_argument('test_name')
|
|
parser.add_argument('bug_number', type=int)
|
|
args = parser.parse_args()
|
|
main(args.test_name, args.bug_number)
|