Partial cleanup of TestCasePackager.py. Major change is the 'json'

module is now utilized.
This commit is contained in:
David Fugate 2011-03-23 12:48:09 -07:00
parent 61343f1b93
commit 31e2bcacf6
76 changed files with 187 additions and 244 deletions

View File

@ -1,3 +1,4 @@
#--Imports---------------------------------------------------------------------
import argparse import argparse
import os import os
import sys import sys
@ -6,57 +7,81 @@ import base64
import datetime import datetime
import shutil import shutil
import re import re
import json
max_tests_per_json = 1000 #--Globals---------------------------------------------------------------------
MAX_CASES_PER_JSON = 1000
parser = argparse.ArgumentParser(description='Tool used to generate the test262 website') __parser = argparse.ArgumentParser(description='Tool used to generate the test262 website')
parser.add_argument('version', action='store', __parser.add_argument('version', action='store',
help='Version of the test suite.') help='Version of the test suite.')
args = parser.parse_args() ARGS = __parser.parse_args()
cur_path = os.path.dirname(os.path.realpath(__file__)) #Path to the root of the Hg repository (relative to this file's location)
test262_root = os.path.join(cur_path, "..", "..") TEST262_ROOT = os.path.join(os.path.dirname(os.path.realpath(__file__)), "..", "..")
test262_root = os.path.abspath(test262_root) TEST262_ROOT = os.path.abspath(TEST262_ROOT)
root_dir = os.path.join(test262_root, "test", "suite")
web_root_path = os.path.join(test262_root, "website", "resources", "scripts", "testcases")
web_root_path_on_server = "resources/scripts/testcases/"
exclude_list_filename = os.path.join(test262_root, "test", "config", "excludelist.xml")
test_harness_dir = os.path.join(test262_root, "test", "harness")
test_harness_website_dir = os.path.join(test262_root, "website", "resources", "scripts", "global")
test_harness_files = [x for x in os.listdir(test_harness_dir) if x.endswith(".js")]
#--Sanity checks--------------------------------------------------------------# #Directory full of test cases we want to port to the website's test harness runner
if not os.path.exists(root_dir): TEST262_CASES_DIR = os.path.join(TEST262_ROOT, "test", "suite")
print "Cannot generate (JSON) test262 tests when the path containing said tests, root_dir, does not exist!"
#Directory containing test harness files to be ported over to the website. Note that
#only *.js files will be migrated from this dir.
TEST262_HARNESS_DIR = os.path.join(TEST262_ROOT, "test", "harness")
#Directory full of website test cases (ported over from TEST262_CASES_DIR)
TEST262_WEB_CASES_DIR = os.path.join(TEST262_ROOT, "website", "resources", "scripts", "testcases")
#Directory containing the website's test harness (ported over from TEST262_HARNESS_DIR)
TEST262_WEB_HARNESS_DIR = os.path.join(TEST262_ROOT, "website", "resources", "scripts", "global")
#Path to the ported test case files on the actual website as opposed to the Hg layout
WEBSITE_CASES_PATH = "resources/scripts/testcases/"
#The name of a file which contains a list of tests which should be disabled in test262.
#These tests are either invalid as-per ES5 or have issues with the test262 web harness.
EXCLUDED_FILENAME = os.path.join(TEST262_ROOT, "test", "config", "excludelist.xml")
if not os.path.exists(EXCLUDED_FILENAME):
print "Cannot generate (JSON) test262 tests without a file, %s, showing which tests have been disabled!" % EXCLUDED_FILENAME
sys.exit(1) sys.exit(1)
EXCLUDE_LIST = xml.dom.minidom.parse(EXCLUDED_FILENAME)
if not os.path.exists(web_root_path): EXCLUDE_LIST = EXCLUDE_LIST.getElementsByTagName("test")
print "Cannot generate (JSON) test262 tests to 'web_root_path' when it does not exist!" EXCLUDE_LIST = [x.getAttribute("id") for x in EXCLUDE_LIST]
sys.exit(1)
if not os.path.exists(exclude_list_filename):
print "Cannot generate (JSON) test262 tests without a file, exclude_list_filename, showing which tests have been disabled!"
sys.exit(1)
if not hasattr(args, "version"):
print "A test262 suite version must be specified to run this script!"
sys.exit(1)
if len(test_harness_files) < 3:
print "There are less than five test harness files under test_harness_dir. Something must be wrong!"
sys.exit(1)
#--Globals--------------------------------------------------------------------#
#Directories under "test\suite\" containing ES5 test chapter directories #Directories under "test\suite\" containing ES5 test chapter directories
#with *.js tests underneath them #with *.js tests underneath them
contribution_dirs = ["sputnik_converted", "ietestcenter"] TEST_CONTRIB_DIRS = ["sputnik_converted", "ietestcenter"]
#a list of all ES5 test chapter directories #a list of all ES5 test chapter directories
chapters = [] TEST_SUITE_SECTIONS = []
#------------------------------------------------------------------------------ #--Sanity checks--------------------------------------------------------------#
if not os.path.exists(TEST262_CASES_DIR):
print "Cannot generate (JSON) test262 tests when the path containing said tests, %s, does not exist!" % TEST262_CASES_DIR
sys.exit(1)
if not os.path.exists(TEST262_HARNESS_DIR):
print "Cannot copy the test harness from a path, %s, that does not exist!" % TEST262_HARNESS_DIR
sys.exit(1)
if not os.path.exists(TEST262_WEB_CASES_DIR):
print "Cannot generate (JSON) test262 test cases to %s when it does not exist!" % TEST262_WEB_CASES_DIR
sys.exit(1)
if not os.path.exists(TEST262_WEB_HARNESS_DIR):
print "Cannot copy test262 test harness to %s when it does not exist!" % TEST262_WEB_HARNESS_DIR
sys.exit(1)
if not hasattr(ARGS, "version"):
print "A test262 suite version must be specified from the command-line to run this script!"
sys.exit(1)
#--Helpers--------------------------------------------------------------------#
def getJSCount(dirName): def getJSCount(dirName):
'''
Returns the total number of *.js files (recursively) under a given
directory, dirName.
'''
retVal = 0 retVal = 0
if os.path.isfile(dirName) and dirName.endswith(".js"): if os.path.isfile(dirName) and dirName.endswith(".js"):
retVal = 1 retVal = 1
@ -70,10 +95,11 @@ def getJSCount(dirName):
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
def dirWalker(dirName): def dirWalker(dirName):
global TEST_SUITE_SECTIONS
#First check to see if it has test files directly inside it #First check to see if it has test files directly inside it
temp = [os.path.join(dirName, x) for x in os.listdir(dirName) if not os.path.isdir(os.path.join(dirName, x))] temp = [os.path.join(dirName, x) for x in os.listdir(dirName) if not os.path.isdir(os.path.join(dirName, x))]
if len(temp)!=0: if len(temp)!=0:
chapters.append(dirName) TEST_SUITE_SECTIONS.append(dirName)
return return
#Next check to see if all *.js files under this directory exceed our max #Next check to see if all *.js files under this directory exceed our max
@ -82,8 +108,8 @@ def dirWalker(dirName):
if temp==0: if temp==0:
print "ERROR: expected there to be JavaScript tests under dirName!" print "ERROR: expected there to be JavaScript tests under dirName!"
sys.exit(1) sys.exit(1)
elif temp < max_tests_per_json: elif temp < MAX_CASES_PER_JSON:
chapters.append(dirName) TEST_SUITE_SECTIONS.append(dirName)
return return
else: else:
#Max has been exceeded. We need to look at each subdir individually #Max has been exceeded. We need to look at each subdir individually
@ -92,19 +118,17 @@ def dirWalker(dirName):
dirWalker(os.path.join(dirName, tempSubdir)) dirWalker(os.path.join(dirName, tempSubdir))
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
for tempDirName in contribution_dirs: for tempDirName in TEST_CONTRIB_DIRS:
if not os.path.exists(os.path.join(root_dir, tempDirName)): if not os.path.exists(os.path.join(TEST262_CASES_DIR, tempDirName)):
print "The expected ES5 test directory, root_dir\$tempDirName, did not exist!" print "The expected ES5 test directory, TEST262_CASES_DIR\$tempDirName, did not exist!"
sys.exit(1) sys.exit(1)
dirWalker(os.path.join(root_dir, tempDirName)) dirWalker(os.path.join(TEST262_CASES_DIR, tempDirName))
num_tests=0 NUM_TESTS = 0
#total number of tests accross the entire set of tests. #total number of tests accross the entire set of tests.
total_num_tests=0 TOTAL_TEST_COUNT = 0
excludeList = xml.dom.minidom.parse(exclude_list_filename)
excludeList = excludeList.getElementsByTagName("test")
excludeList = [x.getAttribute("id") for x in excludeList]
#--HELPERS--------------------------------------------------------------------- #--HELPERS---------------------------------------------------------------------
multilineComment = False multilineComment = False
@ -132,59 +156,7 @@ def isTestStarted(line):
return True return True
#--MAIN------------------------------------------------------------------------ #--MAIN------------------------------------------------------------------------
#add quotes around a string to package it in JSON testSuite = []
def Encode(tstr):
return '"' + str(tstr) + '"'
#the following functions open and close json dictionary and array
def OpenDict():
return "{"
def CloseDict(d):
return d + "}"
def OpenArray():
return "["
def CloseArray(a):
return a + "]"
#add a node to an open dictionary. If it is first, do not add a comma.
#Some json parsers are sensitive and won't parse if the last element has a comma at the end
def AddDictNode(d, n, IsFirst):
if IsFirst:
o = d+n
else:
o = d + "," + n
return o
#add a node to an open array
def AddArrayElement(a, n, IsFirst):
if IsFirst:
o = a + n
else:
o = a + "," + n
return o
#this creates a dictionary node for a given key and value which is non-string
def CreateNode(k, v):
t = Encode(k)
return t + ":" + str(v)
# a similar node except where the value is a string
def CreateStringNode(a, b):
t1 = Encode(a)
t2 = Encode(b)
return t1 + ":" + t2
#TODO...
def IsNullOrEmpty(str):
if (str):
return False
else:
return True
testSuite = OpenArray()
count = 0 count = 0
def getAllJSFiles(dirName): def getAllJSFiles(dirName):
@ -193,16 +165,17 @@ def getAllJSFiles(dirName):
retVal += [os.path.join(fullPath,b) for b in files if b.endswith(".js")] retVal += [os.path.join(fullPath,b) for b in files if b.endswith(".js")]
return retVal return retVal
for chapter in chapters: for chapter in TEST_SUITE_SECTIONS:
chapterName = chapter.rsplit(os.path.sep, 1)[1] chapterName = chapter.rsplit(os.path.sep, 1)[1]
print "Generating test cases for ES5 chapter:", chapterName print "Generating test cases for ES5 chapter:", chapterName
#create dictionaries for all our tests and a section #create dictionaries for all our tests and a section
testsList = OpenDict() testsList = {}
sect = OpenDict() sect = {}
sectionName ="Chapter - " + chapterName sectionName ="Chapter - " + chapterName
sectionNameNode = CreateStringNode("name", sectionName) sect["name"] = sectionName
#create an array for tests in a chapter #create an array for tests in a chapter
tests = OpenArray() tests = []
sourceFiles = getAllJSFiles(chapter) sourceFiles = getAllJSFiles(chapter)
if len(sourceFiles)!=0: if len(sourceFiles)!=0:
excluded=0 excluded=0
@ -210,12 +183,11 @@ for chapter in chapters:
for test in sourceFiles: for test in sourceFiles:
testName=test.rsplit(".", 1)[0] #12.4.6 testName=test.rsplit(".", 1)[0] #12.4.6
testName=testName.rsplit(os.path.sep, 1)[1] testName=testName.rsplit(os.path.sep, 1)[1]
if excludeList.count(testName)==0: if EXCLUDE_LIST.count(testName)==0:
# dictionary for each test # dictionary for each test
testDict = OpenDict() testDict = {}
idNode = CreateStringNode("id", testName) testDict["id"] = testName
#id node is our first node in the test dictionary
testDict = AddDictNode(testDict, idNode, True)
tempFile = open(test, "r") tempFile = open(test, "r")
scriptCode = tempFile.readlines() scriptCode = tempFile.readlines()
tempFile.close() tempFile.close()
@ -237,87 +209,58 @@ for chapter in chapters:
scriptCodeContent = "".join(scriptCode) scriptCodeContent = "".join(scriptCode)
scriptCodeContent = base64.b64encode(scriptCodeContent) scriptCodeContent = base64.b64encode(scriptCodeContent)
codeNode = CreateStringNode("code", scriptCodeContent)
#add the test encoded code node to our test dictionary #add the test encoded code node to our test dictionary
testDict = AddDictNode(testDict, codeNode, False) testDict["code"] = scriptCodeContent
#now close the dictionary for the test #now close the dictionary for the test
testDict = CloseDict(testDict)
#this adds the test to our tests array. Should we add a comma or not #this adds the test to our tests array
if testCount==0: tests.append(testDict)
tests = AddArrayElement(tests, testDict, True)
else:
tests = AddArrayElement(tests, testDict, False)
testCount += 1 testCount += 1
else: else:
excluded = excluded + 1 excluded = excluded + 1
#we have completed our tests. Close the tests array #we have completed our tests
tests = CloseArray(tests) NUM_TESTS = str(len(sourceFiles)-excluded)
testsNode = CreateNode ("tests", tests)
num_tests = str(len(sourceFiles)-excluded) # add section node, number of tests and the tests themselves.
#number of tests in our chapter. Create a node sect["numTests"] = NUM_TESTS
num_testsNode = CreateStringNode("numTests", num_tests) sect["tests"] = tests
# add sectiopn node, number of tests and the tests themselves.
sect = AddDictNode(sect, sectionNameNode, True)
sect = AddDictNode(sect, num_testsNode, False)
sect = AddDictNode(sect, testsNode, False)
#close the section dictionary node
sect = CloseDict(sect)
#create a node for the tests and add it to our testsLists #create a node for the tests and add it to our testsLists
testCollectionNode = CreateNode("testsCollection", sect) testsList["testsCollection"] = sect
testsList = AddDictNode(testsList, testCollectionNode, True)
testsList = CloseDict(testsList) testGroupPathname = TEST262_WEB_CASES_DIR + os.path.sep + chapterName + ".json"
testGroupPathname = web_root_path + os.path.sep + chapterName + ".json"
#if you want to use jsmin to minimize the .json file, use the 2nd line. Otherwise 1st #if you want to use jsmin to minimize the .json file, use the 2nd line. Otherwise 1st
with open(testGroupPathname, "w") as f: with open(testGroupPathname, "w") as f:
f.write(testsList) json.dump(testsList, f, separators=(',',':'), sort_keys=True)
#add the name of the chapter test to our complete list #add the name of the chapter test to our complete list
filename = web_root_path_on_server + chapterName + ".json" filename = WEBSITE_CASES_PATH + chapterName + ".json"
filenameEnc = Encode(filename) testSuite.append(filename)
if count==0:
testSuite = AddArrayElement(testSuite, filenameEnc, True)
else:
testSuite = AddArrayElement(testSuite, filenameEnc, False)
count += 1 count += 1
total_num_tests += len(sourceFiles) - excluded TOTAL_TEST_COUNT += len(sourceFiles) - excluded
#we now have the list of files for each chapter. Close that array #we now have the list of files for each chapter
testSuite = CloseArray(testSuite)
#create a root node for our suite #create a root node for our suite
testSuiteRoot = OpenDict() testSuiteRoot = {}
#create a node for total number of tests across all chapters
total_num_testsNode = CreateNode("numTests", total_num_tests)
#create suiteversion node #create suiteversion node
args.versionEnc = Encode(args.version)
args.versionNode = CreateNode("version", args.versionEnc)
#create a date node #create a date node
dateStr = str(datetime.datetime.now().date()) dateStr = str(datetime.datetime.now().date())
dateEnc = Encode(dateStr)
dateNode = CreateNode("date", dateEnc)
#add the nodes to our suites dictionary #add the nodes to our suites dictionary
testSuiteRoot = AddDictNode(testSuiteRoot,total_num_testsNode, True) testSuiteRoot["numTests"] = TOTAL_TEST_COUNT
testSuiteRoot = AddDictNode(testSuiteRoot, args.versionNode, False) testSuiteRoot["version"] = ARGS.version
testSuiteRoot = AddDictNode(testSuiteRoot, dateNode, False) testSuiteRoot["date"] = dateStr
testSuiteNode = CreateNode("testSuite", testSuite) testSuiteRoot["testSuite"] = testSuite
testSuiteRoot = AddDictNode(testSuiteRoot, testSuiteNode, False) testcaseslistPathName = TEST262_WEB_CASES_DIR + os.path.sep + "testcaseslist.json"
#close the testsuite and write it to the root file
testSuiteRoot = CloseDict(testSuiteRoot)
testcaseslistPathName = web_root_path + os.path.sep + "testcaseslist.json"
with open(testcaseslistPathName, "w") as f: with open(testcaseslistPathName, "w") as f:
f.write(testSuiteRoot) json.dump(testSuiteRoot, f, separators=(',',':'), sort_keys=True)
#Deploy test harness to website as well #Deploy test harness to website as well
print "" print ""
print "Deploying test harness files to 'test_harness_website_dir'..." print "Deploying test harness files to 'TEST262_WEB_HARNESS_DIR'..."
for filename in test_harness_files: for filename in [x for x in os.listdir(TEST262_HARNESS_DIR) if x.endswith(".js")]:
shutil.copy(os.path.join(test_harness_dir, filename), shutil.copy(os.path.join(TEST262_HARNESS_DIR, filename),
os.path.join(test_harness_website_dir, filename)) os.path.join(TEST262_WEB_HARNESS_DIR, filename))
print "Done." print "Done."

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"testsCollection":{"name":"Chapter - 15.1","numTests":"5","tests":[{"id":"15.1.1.1-0","code":"dmFyIGdsb2JhbCA9IHRoaXM7CgoKRVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS4xLjEuMS0wIiwKCnBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjEvMTUuMS4xLzE1LjEuMS4xLzE1LjEuMS4xLTAuanMiLAoKZGVzY3JpcHRpb246ICJHbG9iYWwuTmFOIGlzIGEgZGF0YSBwcm9wZXJ0eSB3aXRoIGRlZmF1bHQgYXR0cmlidXRlIHZhbHVlcyAoZmFsc2UpIiwKCnRlc3Q6IGZ1bmN0aW9uIHRlc3RjYXNlKCkgewogIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdOYU4nKTsKICBpZiAoZGVzYy53cml0YWJsZSA9PT0gZmFsc2UgJiYKICAgICAgZGVzYy5lbnVtZXJhYmxlID09PSBmYWxzZSAmJgogICAgICBkZXNjLmNvbmZpZ3VyYWJsZSA9PT0gZmFsc2UpIHsKICAgIHJldHVybiB0cnVlOwogIH0KIH0sCgpwcmVjb25kaXRpb246IGZ1bmN0aW9uIHByZXJlcSgpIHsKICByZXR1cm4gZm5FeGlzdHMoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcik7CiB9Cn0pOwo="},{"id":"15.1.1.2-0","code":"dmFyIGdsb2JhbCA9IHRoaXM7CgoKRVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS4xLjEuMi0wIiwKCnBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjEvMTUuMS4xLzE1LjEuMS4yLzE1LjEuMS4yLTAuanMiLAoKZGVzY3JpcHRpb246ICJHbG9iYWwuSW5maW5pdHkgaXMgYSBkYXRhIHByb3BlcnR5IHdpdGggZGVmYXVsdCBhdHRyaWJ1dGUgdmFsdWVzIChmYWxzZSkiLAoKdGVzdDogZnVuY3Rpb24gdGVzdGNhc2UoKSB7CiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0luZmluaXR5Jyk7CiAgaWYgKGRlc2Mud3JpdGFibGUgPT09IGZhbHNlICYmCiAgICAgIGRlc2MuZW51bWVyYWJsZSA9PT0gZmFsc2UgJiYKICAgICAgZGVzYy5jb25maWd1cmFibGUgPT09IGZhbHNlKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiB9LAoKcHJlY29uZGl0aW9uOiBmdW5jdGlvbiBwcmVyZXEoKSB7CiAgcmV0dXJuIGZuRXhpc3RzKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOwogfQp9KTsK"},{"id":"15.1.1.3-0","code":"dmFyIGdsb2JhbCA9IHRoaXM7CgoKRVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS4xLjEuMy0wIiwKCnBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjEvMTUuMS4xLzE1LjEuMS4zLzE1LjEuMS4zLTAuanMiLAoKZGVzY3JpcHRpb246ICJHbG9iYWwudW5kZWZpbmVkIGlzIGEgZGF0YSBwcm9wZXJ0eSB3aXRoIGRlZmF1bHQgYXR0cmlidXRlIHZhbHVlcyAoZmFsc2UpIiwKCnRlc3Q6IGZ1bmN0aW9uIHRlc3RjYXNlKCkgewogIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICd1bmRlZmluZWQnKTsKICBpZiAoZGVzYy53cml0YWJsZSA9PT0gZmFsc2UgJiYKICAgICAgZGVzYy5lbnVtZXJhYmxlID09PSBmYWxzZSAmJgogICAgICBkZXNjLmNvbmZpZ3VyYWJsZSA9PT0gZmFsc2UpIHsKICAgIHJldHVybiB0cnVlOwogIH0KIH0sCgpwcmVjb25kaXRpb246IGZ1bmN0aW9uIHByZXJlcSgpIHsKICByZXR1cm4gZm5FeGlzdHMoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcik7CiB9Cn0pOwo="},{"id":"15.1.2.2-2-1","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS4xLjIuMi0yLTEiLAoKICAgIHBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjEvMTUuMS4yLzE1LjEuMi4yLzE1LjEuMi4yLTItMS5qcyIsCgogICAgZGVzY3JpcHRpb246ICJwYXJlc2VJbnQgLSAnUycgaXMgdGhlIGVtcHR5IHN0cmluZyB3aGVuIGlucHV0U3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gYW55IHN1Y2ggY2hhcmFjdGVycyIsCgogICAgdGVzdDogZnVuY3Rpb24gdGVzdGNhc2UoKSB7CiAgICAgICAgcmV0dXJuIGlzTmFOKHBhcnNlSW50KCIiKSkgJiYgcGFyc2VJbnQoIiIpICE9PSBwYXJzZUludCgiIik7CiAgICB9LAoKICAgIHByZWNvbmRpdGlvbjogZnVuY3Rpb24gcHJlcmVxKCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9KTsK"},{"id":"15.1.2.3-2-1","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS4xLjIuMy0yLTEiLAoKICAgIHBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjEvMTUuMS4yLzE1LjEuMi4zLzE1LjEuMi4zLTItMS5qcyIsCgogICAgZGVzY3JpcHRpb246ICJwYXJlc2VGbG9hdCAtICd0cmltbWVkU3RyaW5nJyBpcyB0aGUgZW1wdHkgc3RyaW5nIHdoZW4gaW5wdXRTdHJpbmcgZG9lcyBub3QgY29udGFpbiBhbnkgc3VjaCBjaGFyYWN0ZXJzIiwKCiAgICB0ZXN0OiBmdW5jdGlvbiB0ZXN0Y2FzZSgpIHsKICAgICAgICByZXR1cm4gaXNOYU4ocGFyc2VGbG9hdCgiIikpICYmIHBhcnNlRmxvYXQoIiIpICE9PSBwYXJzZUZsb2F0KCIiKTsKICAgIH0sCgogICAgcHJlY29uZGl0aW9uOiBmdW5jdGlvbiBwcmVyZXEoKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9Cn0pOwo="}]}} {"testsCollection":{"name":"Chapter - 15.1","numTests":"5","tests":[{"code":"dmFyIGdsb2JhbCA9IHRoaXM7CgoKRVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS4xLjEuMS0wIiwKCnBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjEvMTUuMS4xLzE1LjEuMS4xLzE1LjEuMS4xLTAuanMiLAoKZGVzY3JpcHRpb246ICJHbG9iYWwuTmFOIGlzIGEgZGF0YSBwcm9wZXJ0eSB3aXRoIGRlZmF1bHQgYXR0cmlidXRlIHZhbHVlcyAoZmFsc2UpIiwKCnRlc3Q6IGZ1bmN0aW9uIHRlc3RjYXNlKCkgewogIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdOYU4nKTsKICBpZiAoZGVzYy53cml0YWJsZSA9PT0gZmFsc2UgJiYKICAgICAgZGVzYy5lbnVtZXJhYmxlID09PSBmYWxzZSAmJgogICAgICBkZXNjLmNvbmZpZ3VyYWJsZSA9PT0gZmFsc2UpIHsKICAgIHJldHVybiB0cnVlOwogIH0KIH0sCgpwcmVjb25kaXRpb246IGZ1bmN0aW9uIHByZXJlcSgpIHsKICByZXR1cm4gZm5FeGlzdHMoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcik7CiB9Cn0pOwo=","id":"15.1.1.1-0"},{"code":"dmFyIGdsb2JhbCA9IHRoaXM7CgoKRVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS4xLjEuMi0wIiwKCnBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjEvMTUuMS4xLzE1LjEuMS4yLzE1LjEuMS4yLTAuanMiLAoKZGVzY3JpcHRpb246ICJHbG9iYWwuSW5maW5pdHkgaXMgYSBkYXRhIHByb3BlcnR5IHdpdGggZGVmYXVsdCBhdHRyaWJ1dGUgdmFsdWVzIChmYWxzZSkiLAoKdGVzdDogZnVuY3Rpb24gdGVzdGNhc2UoKSB7CiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ0luZmluaXR5Jyk7CiAgaWYgKGRlc2Mud3JpdGFibGUgPT09IGZhbHNlICYmCiAgICAgIGRlc2MuZW51bWVyYWJsZSA9PT0gZmFsc2UgJiYKICAgICAgZGVzYy5jb25maWd1cmFibGUgPT09IGZhbHNlKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiB9LAoKcHJlY29uZGl0aW9uOiBmdW5jdGlvbiBwcmVyZXEoKSB7CiAgcmV0dXJuIGZuRXhpc3RzKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOwogfQp9KTsK","id":"15.1.1.2-0"},{"code":"dmFyIGdsb2JhbCA9IHRoaXM7CgoKRVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS4xLjEuMy0wIiwKCnBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjEvMTUuMS4xLzE1LjEuMS4zLzE1LjEuMS4zLTAuanMiLAoKZGVzY3JpcHRpb246ICJHbG9iYWwudW5kZWZpbmVkIGlzIGEgZGF0YSBwcm9wZXJ0eSB3aXRoIGRlZmF1bHQgYXR0cmlidXRlIHZhbHVlcyAoZmFsc2UpIiwKCnRlc3Q6IGZ1bmN0aW9uIHRlc3RjYXNlKCkgewogIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICd1bmRlZmluZWQnKTsKICBpZiAoZGVzYy53cml0YWJsZSA9PT0gZmFsc2UgJiYKICAgICAgZGVzYy5lbnVtZXJhYmxlID09PSBmYWxzZSAmJgogICAgICBkZXNjLmNvbmZpZ3VyYWJsZSA9PT0gZmFsc2UpIHsKICAgIHJldHVybiB0cnVlOwogIH0KIH0sCgpwcmVjb25kaXRpb246IGZ1bmN0aW9uIHByZXJlcSgpIHsKICByZXR1cm4gZm5FeGlzdHMoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcik7CiB9Cn0pOwo=","id":"15.1.1.3-0"},{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS4xLjIuMi0yLTEiLAoKICAgIHBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjEvMTUuMS4yLzE1LjEuMi4yLzE1LjEuMi4yLTItMS5qcyIsCgogICAgZGVzY3JpcHRpb246ICJwYXJlc2VJbnQgLSAnUycgaXMgdGhlIGVtcHR5IHN0cmluZyB3aGVuIGlucHV0U3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gYW55IHN1Y2ggY2hhcmFjdGVycyIsCgogICAgdGVzdDogZnVuY3Rpb24gdGVzdGNhc2UoKSB7CiAgICAgICAgcmV0dXJuIGlzTmFOKHBhcnNlSW50KCIiKSkgJiYgcGFyc2VJbnQoIiIpICE9PSBwYXJzZUludCgiIik7CiAgICB9LAoKICAgIHByZWNvbmRpdGlvbjogZnVuY3Rpb24gcHJlcmVxKCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9KTsK","id":"15.1.2.2-2-1"},{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS4xLjIuMy0yLTEiLAoKICAgIHBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjEvMTUuMS4yLzE1LjEuMi4zLzE1LjEuMi4zLTItMS5qcyIsCgogICAgZGVzY3JpcHRpb246ICJwYXJlc2VGbG9hdCAtICd0cmltbWVkU3RyaW5nJyBpcyB0aGUgZW1wdHkgc3RyaW5nIHdoZW4gaW5wdXRTdHJpbmcgZG9lcyBub3QgY29udGFpbiBhbnkgc3VjaCBjaGFyYWN0ZXJzIiwKCiAgICB0ZXN0OiBmdW5jdGlvbiB0ZXN0Y2FzZSgpIHsKICAgICAgICByZXR1cm4gaXNOYU4ocGFyc2VGbG9hdCgiIikpICYmIHBhcnNlRmxvYXQoIiIpICE9PSBwYXJzZUZsb2F0KCIiKTsKICAgIH0sCgogICAgcHJlY29uZGl0aW9uOiBmdW5jdGlvbiBwcmVyZXEoKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9Cn0pOwo=","id":"15.1.2.3-2-1"}]}}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"testsCollection":{"name":"Chapter - 15.2.3.1","numTests":"1","tests":[{"id":"15.2.3.1","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS4yLjMuMSIsCgpwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS4yLzE1LjIuMy8xNS4yLjMuMS8xNS4yLjMuMS5qcyIsCgpkZXNjcmlwdGlvbjogIk9iamVjdC5wcm90b3R5cGUgaXMgYSBkYXRhIHByb3BlcnR5IHdpdGggZGVmYXVsdCBhdHRyaWJ1dGUgdmFsdWVzIChmYWxzZSkiLAoKdGVzdDogZnVuY3Rpb24gdGVzdGNhc2UoKSB7CiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCwgJ3Byb3RvdHlwZScpOwogIGlmIChkZXNjLndyaXRhYmxlID09PSBmYWxzZSAmJgogICAgICBkZXNjLmVudW1lcmFibGUgPT09IGZhbHNlICYmCiAgICAgIGRlc2MuY29uZmlndXJhYmxlID09PSBmYWxzZSkgewogICAgcmV0dXJuIHRydWU7CiAgfQogfSwKCnByZWNvbmRpdGlvbjogZnVuY3Rpb24gcHJlcmVxKCkgewogIHJldHVybiBmbkV4aXN0cyhPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKTsKIH0KfSk7Cg=="}]}} {"testsCollection":{"name":"Chapter - 15.2.3.1","numTests":"1","tests":[{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS4yLjMuMSIsCgpwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS4yLzE1LjIuMy8xNS4yLjMuMS8xNS4yLjMuMS5qcyIsCgpkZXNjcmlwdGlvbjogIk9iamVjdC5wcm90b3R5cGUgaXMgYSBkYXRhIHByb3BlcnR5IHdpdGggZGVmYXVsdCBhdHRyaWJ1dGUgdmFsdWVzIChmYWxzZSkiLAoKdGVzdDogZnVuY3Rpb24gdGVzdGNhc2UoKSB7CiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCwgJ3Byb3RvdHlwZScpOwogIGlmIChkZXNjLndyaXRhYmxlID09PSBmYWxzZSAmJgogICAgICBkZXNjLmVudW1lcmFibGUgPT09IGZhbHNlICYmCiAgICAgIGRlc2MuY29uZmlndXJhYmxlID09PSBmYWxzZSkgewogICAgcmV0dXJuIHRydWU7CiAgfQogfSwKCnByZWNvbmRpdGlvbjogZnVuY3Rpb24gcHJlcmVxKCkgewogIHJldHVybiBmbkV4aXN0cyhPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKTsKIH0KfSk7Cg==","id":"15.2.3.1"}]}}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"testsCollection":{"name":"Chapter - 15.2.4","numTests":"4","tests":[{"id":"15.2.4.2-1-1","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS4yLjQuMi0xLTEiLAoKICAgIHBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjIvMTUuMi40LzE1LjIuNC4yLzE1LjIuNC4yLTEtMS5qcyIsCgogICAgZGVzY3JpcHRpb246ICJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIC0gJ1tvYmplY3QgVW5kZWZpbmVkXScgd2lsbCBiZSByZXR1cm5lZCB3aGVuICd0aGlzJyB2YWx1ZSBpcyB1bmRlZmluZWQiLAoKICAgIHRlc3Q6IGZ1bmN0aW9uIHRlc3RjYXNlKCkgewogICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodW5kZWZpbmVkKSA9PT0gIltvYmplY3QgVW5kZWZpbmVkXSI7CiAgICB9LAoKICAgIHByZWNvbmRpdGlvbjogZnVuY3Rpb24gcHJlcmVxKCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9KTsK"},{"id":"15.2.4.2-1-2","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS4yLjQuMi0xLTIiLAoKICAgIHBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjIvMTUuMi40LzE1LjIuNC4yLzE1LjIuNC4yLTEtMi5qcyIsCgogICAgZGVzY3JpcHRpb246ICJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIC0gJ1tvYmplY3QgVW5kZWZpbmVkXScgd2lsbCBiZSByZXR1cm5lZCB3aGVuICd0aGlzJyB2YWx1ZSBpcyB1bmRlZmluZWQiLAoKICAgIHRlc3Q6IGZ1bmN0aW9uIHRlc3RjYXNlKCkgewogICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHVuZGVmaW5lZCwgW10pID09PSAiW29iamVjdCBVbmRlZmluZWRdIjsKICAgIH0sCgogICAgcHJlY29uZGl0aW9uOiBmdW5jdGlvbiBwcmVyZXEoKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9Cn0pOwo="},{"id":"15.2.4.2-2-1","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS4yLjQuMi0yLTEiLAoKICAgIHBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjIvMTUuMi40LzE1LjIuNC4yLzE1LjIuNC4yLTItMS5qcyIsCgogICAgZGVzY3JpcHRpb246ICJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIC0gJ1tvYmplY3QgTnVsbF0nIHdpbGwgYmUgcmV0dXJuZWQgd2hlbiAndGhpcycgdmFsdWUgaXMgbnVsbCIsCgogICAgdGVzdDogZnVuY3Rpb24gdGVzdGNhc2UoKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChudWxsKSA9PT0gIltvYmplY3QgTnVsbF0iOwogICAgfSwKCiAgICBwcmVjb25kaXRpb246IGZ1bmN0aW9uIHByZXJlcSgpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfSk7Cg=="},{"id":"15.2.4.2-2-2","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS4yLjQuMi0yLTIiLAoKICAgIHBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjIvMTUuMi40LzE1LjIuNC4yLzE1LjIuNC4yLTItMi5qcyIsCgogICAgZGVzY3JpcHRpb246ICJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIC0gJ1tvYmplY3QgTnVsbF0nIHdpbGwgYmUgcmV0dXJuZWQgd2hlbiAndGhpcycgdmFsdWUgaXMgbnVsbCIsCgogICAgdGVzdDogZnVuY3Rpb24gdGVzdGNhc2UoKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkobnVsbCwgW10pID09PSAiW29iamVjdCBOdWxsXSI7CiAgICB9LAoKICAgIHByZWNvbmRpdGlvbjogZnVuY3Rpb24gcHJlcmVxKCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9KTsK"}]}} {"testsCollection":{"name":"Chapter - 15.2.4","numTests":"4","tests":[{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS4yLjQuMi0xLTEiLAoKICAgIHBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjIvMTUuMi40LzE1LjIuNC4yLzE1LjIuNC4yLTEtMS5qcyIsCgogICAgZGVzY3JpcHRpb246ICJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIC0gJ1tvYmplY3QgVW5kZWZpbmVkXScgd2lsbCBiZSByZXR1cm5lZCB3aGVuICd0aGlzJyB2YWx1ZSBpcyB1bmRlZmluZWQiLAoKICAgIHRlc3Q6IGZ1bmN0aW9uIHRlc3RjYXNlKCkgewogICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodW5kZWZpbmVkKSA9PT0gIltvYmplY3QgVW5kZWZpbmVkXSI7CiAgICB9LAoKICAgIHByZWNvbmRpdGlvbjogZnVuY3Rpb24gcHJlcmVxKCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9KTsK","id":"15.2.4.2-1-1"},{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS4yLjQuMi0xLTIiLAoKICAgIHBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjIvMTUuMi40LzE1LjIuNC4yLzE1LjIuNC4yLTEtMi5qcyIsCgogICAgZGVzY3JpcHRpb246ICJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIC0gJ1tvYmplY3QgVW5kZWZpbmVkXScgd2lsbCBiZSByZXR1cm5lZCB3aGVuICd0aGlzJyB2YWx1ZSBpcyB1bmRlZmluZWQiLAoKICAgIHRlc3Q6IGZ1bmN0aW9uIHRlc3RjYXNlKCkgewogICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHVuZGVmaW5lZCwgW10pID09PSAiW29iamVjdCBVbmRlZmluZWRdIjsKICAgIH0sCgogICAgcHJlY29uZGl0aW9uOiBmdW5jdGlvbiBwcmVyZXEoKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9Cn0pOwo=","id":"15.2.4.2-1-2"},{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS4yLjQuMi0yLTEiLAoKICAgIHBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjIvMTUuMi40LzE1LjIuNC4yLzE1LjIuNC4yLTItMS5qcyIsCgogICAgZGVzY3JpcHRpb246ICJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIC0gJ1tvYmplY3QgTnVsbF0nIHdpbGwgYmUgcmV0dXJuZWQgd2hlbiAndGhpcycgdmFsdWUgaXMgbnVsbCIsCgogICAgdGVzdDogZnVuY3Rpb24gdGVzdGNhc2UoKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChudWxsKSA9PT0gIltvYmplY3QgTnVsbF0iOwogICAgfSwKCiAgICBwcmVjb25kaXRpb246IGZ1bmN0aW9uIHByZXJlcSgpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfSk7Cg==","id":"15.2.4.2-2-1"},{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS4yLjQuMi0yLTIiLAoKICAgIHBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjIvMTUuMi40LzE1LjIuNC4yLzE1LjIuNC4yLTItMi5qcyIsCgogICAgZGVzY3JpcHRpb246ICJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIC0gJ1tvYmplY3QgTnVsbF0nIHdpbGwgYmUgcmV0dXJuZWQgd2hlbiAndGhpcycgdmFsdWUgaXMgbnVsbCIsCgogICAgdGVzdDogZnVuY3Rpb24gdGVzdGNhc2UoKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkobnVsbCwgW10pID09PSAiW29iamVjdCBOdWxsXSI7CiAgICB9LAoKICAgIHByZWNvbmRpdGlvbjogZnVuY3Rpb24gcHJlcmVxKCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9KTsK","id":"15.2.4.2-2-2"}]}}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"testsCollection":{"name":"Chapter - 15.4.4.10","numTests":"1","tests":[{"id":"15.4.4.10-10-c-ii-1","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS40LjQuMTAtMTAtYy1paS0xIiwKCiAgICBwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS40LzE1LjQuNC8xNS40LjQuMTAvMTUuNC40LjEwLTEwLWMtaWktMS5qcyIsCgogICAgZGVzY3JpcHRpb246ICJBcnJheS5wcm90b3R5cGUuc2xpY2Ugd2lsbCBzbGljZSBhIHN0cmluZyBmcm9tIHN0YXJ0IHRvIGVuZCB3aGVuIGluZGV4IHByb3BlcnR5IChyZWFkLW9ubHkpIGV4aXN0cyBpbiBBcnJheS5wcm90b3R5cGUgKFN0ZXAgMTAuYy5paSkiLAoKICAgIHRlc3Q6IGZ1bmN0aW9uIHRlc3RjYXNlKCkgewogICAgICAgIHZhciBhcnJPYmogPSBbMSwgMiwgM107CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgIjAiLCB7CiAgICAgICAgICAgICAgICB2YWx1ZTogInRlc3QiLAogICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLAogICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgdmFyIG5ld0FyciA9IGFyck9iai5zbGljZSgwLCAxKTsKICAgICAgICAgICAgcmV0dXJuIG5ld0Fyci5oYXNPd25Qcm9wZXJ0eSgiMCIpICYmIG5ld0FyclswXSA9PT0gMSAmJiB0eXBlb2YgbmV3QXJyWzFdID09PSAidW5kZWZpbmVkIjsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICBkZWxldGUgQXJyYXkucHJvdG90eXBlWzBdOwogICAgICAgIH0KICAgIH0sCgogICAgcHJlY29uZGl0aW9uOiBmdW5jdGlvbiBwcmVyZXEoKSB7CiAgICAgICAgcmV0dXJuIGZuRXhpc3RzKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSk7CiAgICB9Cn0pOwo="}]}} {"testsCollection":{"name":"Chapter - 15.4.4.10","numTests":"1","tests":[{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS40LjQuMTAtMTAtYy1paS0xIiwKCiAgICBwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS40LzE1LjQuNC8xNS40LjQuMTAvMTUuNC40LjEwLTEwLWMtaWktMS5qcyIsCgogICAgZGVzY3JpcHRpb246ICJBcnJheS5wcm90b3R5cGUuc2xpY2Ugd2lsbCBzbGljZSBhIHN0cmluZyBmcm9tIHN0YXJ0IHRvIGVuZCB3aGVuIGluZGV4IHByb3BlcnR5IChyZWFkLW9ubHkpIGV4aXN0cyBpbiBBcnJheS5wcm90b3R5cGUgKFN0ZXAgMTAuYy5paSkiLAoKICAgIHRlc3Q6IGZ1bmN0aW9uIHRlc3RjYXNlKCkgewogICAgICAgIHZhciBhcnJPYmogPSBbMSwgMiwgM107CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgIjAiLCB7CiAgICAgICAgICAgICAgICB2YWx1ZTogInRlc3QiLAogICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLAogICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgdmFyIG5ld0FyciA9IGFyck9iai5zbGljZSgwLCAxKTsKICAgICAgICAgICAgcmV0dXJuIG5ld0Fyci5oYXNPd25Qcm9wZXJ0eSgiMCIpICYmIG5ld0FyclswXSA9PT0gMSAmJiB0eXBlb2YgbmV3QXJyWzFdID09PSAidW5kZWZpbmVkIjsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICBkZWxldGUgQXJyYXkucHJvdG90eXBlWzBdOwogICAgICAgIH0KICAgIH0sCgogICAgcHJlY29uZGl0aW9uOiBmdW5jdGlvbiBwcmVyZXEoKSB7CiAgICAgICAgcmV0dXJuIGZuRXhpc3RzKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSk7CiAgICB9Cn0pOwo=","id":"15.4.4.10-10-c-ii-1"}]}}

View File

@ -1 +1 @@
{"testsCollection":{"name":"Chapter - 15.4.4.12","numTests":"2","tests":[{"id":"15.4.4.12-9-a-1","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS40LjQuMTItOS1hLTEiLAoKICAgIHBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjQvMTUuNC40LzE1LjQuNC4xMi8xNS40LjQuMTItOS1hLTEuanMiLAoKICAgIGRlc2NyaXB0aW9uOiAiQXJyYXkucHJvdG90eXBlLnNwbGljZSAtICdmcm9tJyBpcyB0aGUgcmVzdWx0IG9mIFRvU3RyaW5nKGFjdHVhbFN0YXJ0K2spIGluIGFuIEFycmF5IiwKCiAgICB0ZXN0OiBmdW5jdGlvbiB0ZXN0Y2FzZSgpIHsKICAgICAgICB2YXIgYXJyT2JqID0gWzEsIDIsIDNdOwogICAgICAgIHZhciBuZXdBcnJPYmogPSBhcnJPYmouc3BsaWNlKC0yLCAxKTsKICAgICAgICByZXR1cm4gbmV3QXJyT2JqLmxlbmd0aCA9PT0gMSAmJiBuZXdBcnJPYmpbMF0gPT09IDI7CiAgICB9LAoKICAgIHByZWNvbmRpdGlvbjogZnVuY3Rpb24gcHJlcmVxKCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9KTsKCg=="},{"id":"15.4.4.12-9-c-ii-1","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS40LjQuMTItOS1jLWlpLTEiLAoKICAgIHBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjQvMTUuNC40LzE1LjQuNC4xMi8xNS40LjQuMTItOS1jLWlpLTEuanMiLAoKICAgIGRlc2NyaXB0aW9uOiAiQXJyYXkucHJvdG90eXBlLnNwbGljZSB3aWxsIHNwbGljZSBhbiBhcnJheSBldmVuIHdoZW4gQXJyYXkucHJvdG90eXBlIGhhcyBpbmRleCAnMCcgc2V0IHRvIHJlYWQtb25seSBhbmQgJ2Zyb21QcmVzZW50JyBsZXNzIHRoYW4gJ2FjdHVhbERlbGV0ZUNvdW50IChTdGVwIDkuYy5paSkiLAoKICAgIHRlc3Q6IGZ1bmN0aW9uIHRlc3RjYXNlKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHZhciBhcnIgPSBbImEiLCAiYiIsICJjIl07CiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZVswXSA9ICJ0ZXN0IjsKICAgICAgICAgICAgdmFyIG5ld0FyciA9IGFyci5zcGxpY2UoMiwgMSwgImQiKTsKCiAgICAgICAgICAgIHZhciB2ZXJpZnlWYWx1ZSA9IGZhbHNlOwogICAgICAgICAgICB2ZXJpZnlWYWx1ZSA9IGFyci5sZW5ndGggPT09IDMgJiYgYXJyWzBdID09PSAiYSIgJiYgYXJyWzFdID09PSAiYiIgJiYgYXJyWzJdID09PSAiZCIKICAgICAgICAgICAgICAgICYmIG5ld0FyclswXSA9PT0gImMiICYmIG5ld0Fyci5sZW5ndGggPT09IDE7CgogICAgICAgICAgICB2YXIgdmVyaWZ5RW51bWVyYWJsZSA9IGZhbHNlOwogICAgICAgICAgICBmb3IgKHZhciBwIGluIG5ld0FycikgewogICAgICAgICAgICAgICAgaWYgKG5ld0Fyci5oYXNPd25Qcm9wZXJ0eSgiMCIpICYmIHAgPT09ICIwIikgewogICAgICAgICAgICAgICAgICAgIHZlcmlmeUVudW1lcmFibGUgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdmVyaWZ5V3JpdGFibGUgPSBmYWxzZTsKICAgICAgICAgICAgbmV3QXJyWzBdID0gMTI7CiAgICAgICAgICAgIHZlcmlmeVdyaXRhYmxlID0gbmV3QXJyWzBdID09PSAxMjsKCiAgICAgICAgICAgIHZhciB2ZXJpZnlDb25maWd1cmFibGUgPSBmYWxzZTsKICAgICAgICAgICAgZGVsZXRlIG5ld0FyclswXTsKICAgICAgICAgICAgdmVyaWZ5Q29uZmlndXJhYmxlID0gbmV3QXJyLmhhc093blByb3BlcnR5KCIwIik7CgogICAgICAgICAgICByZXR1cm4gdmVyaWZ5VmFsdWUgJiYgIXZlcmlmeUNvbmZpZ3VyYWJsZSAmJiB2ZXJpZnlFbnVtZXJhYmxlICYmIHZlcmlmeVdyaXRhYmxlOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIGRlbGV0ZSBBcnJheS5wcm90b3R5cGVbMF07CiAgICAgICAgfQogICAgfSwKCiAgICBwcmVjb25kaXRpb246IGZ1bmN0aW9uIHByZXJlcSgpIHsKICAgICAgICByZXR1cm4gZm5FeGlzdHMoT2JqZWN0LmRlZmluZVByb3BlcnR5KTsKICAgIH0KfSk7Cg=="}]}} {"testsCollection":{"name":"Chapter - 15.4.4.12","numTests":"2","tests":[{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS40LjQuMTItOS1hLTEiLAoKICAgIHBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjQvMTUuNC40LzE1LjQuNC4xMi8xNS40LjQuMTItOS1hLTEuanMiLAoKICAgIGRlc2NyaXB0aW9uOiAiQXJyYXkucHJvdG90eXBlLnNwbGljZSAtICdmcm9tJyBpcyB0aGUgcmVzdWx0IG9mIFRvU3RyaW5nKGFjdHVhbFN0YXJ0K2spIGluIGFuIEFycmF5IiwKCiAgICB0ZXN0OiBmdW5jdGlvbiB0ZXN0Y2FzZSgpIHsKICAgICAgICB2YXIgYXJyT2JqID0gWzEsIDIsIDNdOwogICAgICAgIHZhciBuZXdBcnJPYmogPSBhcnJPYmouc3BsaWNlKC0yLCAxKTsKICAgICAgICByZXR1cm4gbmV3QXJyT2JqLmxlbmd0aCA9PT0gMSAmJiBuZXdBcnJPYmpbMF0gPT09IDI7CiAgICB9LAoKICAgIHByZWNvbmRpdGlvbjogZnVuY3Rpb24gcHJlcmVxKCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9KTsKCg==","id":"15.4.4.12-9-a-1"},{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS40LjQuMTItOS1jLWlpLTEiLAoKICAgIHBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjQvMTUuNC40LzE1LjQuNC4xMi8xNS40LjQuMTItOS1jLWlpLTEuanMiLAoKICAgIGRlc2NyaXB0aW9uOiAiQXJyYXkucHJvdG90eXBlLnNwbGljZSB3aWxsIHNwbGljZSBhbiBhcnJheSBldmVuIHdoZW4gQXJyYXkucHJvdG90eXBlIGhhcyBpbmRleCAnMCcgc2V0IHRvIHJlYWQtb25seSBhbmQgJ2Zyb21QcmVzZW50JyBsZXNzIHRoYW4gJ2FjdHVhbERlbGV0ZUNvdW50IChTdGVwIDkuYy5paSkiLAoKICAgIHRlc3Q6IGZ1bmN0aW9uIHRlc3RjYXNlKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHZhciBhcnIgPSBbImEiLCAiYiIsICJjIl07CiAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZVswXSA9ICJ0ZXN0IjsKICAgICAgICAgICAgdmFyIG5ld0FyciA9IGFyci5zcGxpY2UoMiwgMSwgImQiKTsKCiAgICAgICAgICAgIHZhciB2ZXJpZnlWYWx1ZSA9IGZhbHNlOwogICAgICAgICAgICB2ZXJpZnlWYWx1ZSA9IGFyci5sZW5ndGggPT09IDMgJiYgYXJyWzBdID09PSAiYSIgJiYgYXJyWzFdID09PSAiYiIgJiYgYXJyWzJdID09PSAiZCIKICAgICAgICAgICAgICAgICYmIG5ld0FyclswXSA9PT0gImMiICYmIG5ld0Fyci5sZW5ndGggPT09IDE7CgogICAgICAgICAgICB2YXIgdmVyaWZ5RW51bWVyYWJsZSA9IGZhbHNlOwogICAgICAgICAgICBmb3IgKHZhciBwIGluIG5ld0FycikgewogICAgICAgICAgICAgICAgaWYgKG5ld0Fyci5oYXNPd25Qcm9wZXJ0eSgiMCIpICYmIHAgPT09ICIwIikgewogICAgICAgICAgICAgICAgICAgIHZlcmlmeUVudW1lcmFibGUgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdmVyaWZ5V3JpdGFibGUgPSBmYWxzZTsKICAgICAgICAgICAgbmV3QXJyWzBdID0gMTI7CiAgICAgICAgICAgIHZlcmlmeVdyaXRhYmxlID0gbmV3QXJyWzBdID09PSAxMjsKCiAgICAgICAgICAgIHZhciB2ZXJpZnlDb25maWd1cmFibGUgPSBmYWxzZTsKICAgICAgICAgICAgZGVsZXRlIG5ld0FyclswXTsKICAgICAgICAgICAgdmVyaWZ5Q29uZmlndXJhYmxlID0gbmV3QXJyLmhhc093blByb3BlcnR5KCIwIik7CgogICAgICAgICAgICByZXR1cm4gdmVyaWZ5VmFsdWUgJiYgIXZlcmlmeUNvbmZpZ3VyYWJsZSAmJiB2ZXJpZnlFbnVtZXJhYmxlICYmIHZlcmlmeVdyaXRhYmxlOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIGRlbGV0ZSBBcnJheS5wcm90b3R5cGVbMF07CiAgICAgICAgfQogICAgfSwKCiAgICBwcmVjb25kaXRpb246IGZ1bmN0aW9uIHByZXJlcSgpIHsKICAgICAgICByZXR1cm4gZm5FeGlzdHMoT2JqZWN0LmRlZmluZVByb3BlcnR5KTsKICAgIH0KfSk7Cg==","id":"15.4.4.12-9-c-ii-1"}]}}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"testsCollection":{"name":"Chapter - 15.4.4.4","numTests":"2","tests":[{"id":"15.4.4.4-5-b-iii-3-b-1","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS40LjQuNC01LWItaWlpLTMtYi0xIiwKCiAgICBwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS40LzE1LjQuNC8xNS40LjQuNC8xNS40LjQuNC01LWItaWlpLTMtYi0xLmpzIiwKCiAgICBkZXNjcmlwdGlvbjogIkFycmF5LnByb3RvdHlwZS5jb25jYXQgd2lsbCBjb25jYXQgYW4gQXJyYXkgd2hlbiBpbmRleCBwcm9wZXJ0eSAocmVhZC1vbmx5KSBleGlzdHMgaW4gQXJyYXkucHJvdG90eXBlIChTdGVwIDUuYi5paWkuMy5iKSIsCgogICAgdGVzdDogZnVuY3Rpb24gdGVzdGNhc2UoKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgIjAiLCB7CiAgICAgICAgICAgICAgICB2YWx1ZTogMTAwLAogICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLAogICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgdmFyIG9sZEFyciA9IFsxMDFdOwoKICAgICAgICAgICAgdmFyIG5ld0FyciA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQuY2FsbChvbGRBcnIpOwoKICAgICAgICAgICAgdmFyIHZlcmlmeVZhbHVlID0gZmFsc2U7CiAgICAgICAgICAgIHZlcmlmeVZhbHVlID0gbmV3QXJyWzBdID09PSAxMDE7CgogICAgICAgICAgICB2YXIgdmVyaWZ5RW51bWVyYWJsZSA9IGZhbHNlOwogICAgICAgICAgICBmb3IgKHZhciBwIGluIG5ld0FycikgewogICAgICAgICAgICAgICAgaWYgKHAgPT09ICIwIiAmJiBuZXdBcnIuaGFzT3duUHJvcGVydHkoIjAiKSkgewogICAgICAgICAgICAgICAgICAgIHZlcmlmeUVudW1lcmFibGUgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdmVyaWZ5V3JpdGFibGUgPSBmYWxzZTsKICAgICAgICAgICAgbmV3QXJyWzBdID0gMTI7CiAgICAgICAgICAgIHZlcmlmeVdyaXRhYmxlID0gbmV3QXJyWzBdID09PSAxMjsKCiAgICAgICAgICAgIHZhciB2ZXJpZnlDb25maWd1cmFibGUgPSBmYWxzZTsKICAgICAgICAgICAgZGVsZXRlIG5ld0FyclswXTsKICAgICAgICAgICAgdmVyaWZ5Q29uZmlndXJhYmxlID0gbmV3QXJyLmhhc093blByb3BlcnR5KCIwIik7CgogICAgICAgICAgICByZXR1cm4gdmVyaWZ5VmFsdWUgJiYgIXZlcmlmeUNvbmZpZ3VyYWJsZSAmJiB2ZXJpZnlFbnVtZXJhYmxlICYmIHZlcmlmeVdyaXRhYmxlOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIGRlbGV0ZSBBcnJheS5wcm90b3R5cGVbMF07CiAgICAgICAgfQogICAgfSwKCiAgICBwcmVjb25kaXRpb246IGZ1bmN0aW9uIHByZXJlcSgpIHsKICAgICAgICByZXR1cm4gZm5FeGlzdHMoT2JqZWN0LmRlZmluZVByb3BlcnR5KTsKICAgIH0KfSk7Cg=="},{"id":"15.4.4.4-5-c-i-1","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS40LjQuNC01LWMtaS0xIiwKCiAgICBwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS40LzE1LjQuNC8xNS40LjQuNC8xNS40LjQuNC01LWMtaS0xLmpzIiwKCiAgICBkZXNjcmlwdGlvbjogIkFycmF5LnByb3RvdHlwZS5jb25jYXQgd2lsbCBjb25jYXQgYW4gQXJyYXkgd2hlbiBpbmRleCBwcm9wZXJ0eSAocmVhZC1vbmx5KSBleGlzdHMgaW4gQXJyYXkucHJvdG90eXBlIChTdGVwIDUuYy5pKSIsCgogICAgdGVzdDogZnVuY3Rpb24gdGVzdGNhc2UoKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgIjAiLCB7CiAgICAgICAgICAgICAgICB2YWx1ZTogMTAwLAogICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLAogICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgdmFyIG5ld0FyciA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQuY2FsbCgxMDEpOwoKICAgICAgICAgICAgcmV0dXJuIG5ld0Fyci5oYXNPd25Qcm9wZXJ0eSgiMCIpICYmIG5ld0FyclswXSA9PT0gMTAxOwoKICAgICAgICAgICAgdmFyIHZlcmlmeVZhbHVlID0gZmFsc2U7CiAgICAgICAgICAgIHZlcmlmeVZhbHVlID0gbmV3QXJyWzBdID09PSAxMDE7CgogICAgICAgICAgICB2YXIgdmVyaWZ5RW51bWVyYWJsZSA9IGZhbHNlOwogICAgICAgICAgICBmb3IgKHZhciBwIGluIG5ld0FycikgewogICAgICAgICAgICAgICAgaWYgKHAgPT09ICIwIiAmJiBuZXdBcnIuaGFzT3duUHJvcGVydHkoIjAiKSkgewogICAgICAgICAgICAgICAgICAgIHZlcmlmeUVudW1lcmFibGUgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdmVyaWZ5V3JpdGFibGUgPSBmYWxzZTsKICAgICAgICAgICAgbmV3QXJyWzBdID0gMTI7CiAgICAgICAgICAgIHZlcmlmeVdyaXRhYmxlID0gbmV3QXJyWzBdID09PSAxMjsKCiAgICAgICAgICAgIHZhciB2ZXJpZnlDb25maWd1cmFibGUgPSBmYWxzZTsKICAgICAgICAgICAgZGVsZXRlIG5ld0FyclswXTsKICAgICAgICAgICAgdmVyaWZ5Q29uZmlndXJhYmxlID0gbmV3QXJyLmhhc093blByb3BlcnR5KCIwIik7CgogICAgICAgICAgICByZXR1cm4gdmVyaWZ5VmFsdWUgJiYgIXZlcmlmeUNvbmZpZ3VyYWJsZSAmJiB2ZXJpZnlFbnVtZXJhYmxlICYmIHZlcmlmeVdyaXRhYmxlOwoKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICBkZWxldGUgQXJyYXkucHJvdG90eXBlWzBdOwogICAgICAgIH0KICAgIH0sCgogICAgcHJlY29uZGl0aW9uOiBmdW5jdGlvbiBwcmVyZXEoKSB7CiAgICAgICAgcmV0dXJuIGZuRXhpc3RzKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSk7CiAgICB9Cn0pOwo="}]}} {"testsCollection":{"name":"Chapter - 15.4.4.4","numTests":"2","tests":[{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS40LjQuNC01LWItaWlpLTMtYi0xIiwKCiAgICBwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS40LzE1LjQuNC8xNS40LjQuNC8xNS40LjQuNC01LWItaWlpLTMtYi0xLmpzIiwKCiAgICBkZXNjcmlwdGlvbjogIkFycmF5LnByb3RvdHlwZS5jb25jYXQgd2lsbCBjb25jYXQgYW4gQXJyYXkgd2hlbiBpbmRleCBwcm9wZXJ0eSAocmVhZC1vbmx5KSBleGlzdHMgaW4gQXJyYXkucHJvdG90eXBlIChTdGVwIDUuYi5paWkuMy5iKSIsCgogICAgdGVzdDogZnVuY3Rpb24gdGVzdGNhc2UoKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgIjAiLCB7CiAgICAgICAgICAgICAgICB2YWx1ZTogMTAwLAogICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLAogICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgdmFyIG9sZEFyciA9IFsxMDFdOwoKICAgICAgICAgICAgdmFyIG5ld0FyciA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQuY2FsbChvbGRBcnIpOwoKICAgICAgICAgICAgdmFyIHZlcmlmeVZhbHVlID0gZmFsc2U7CiAgICAgICAgICAgIHZlcmlmeVZhbHVlID0gbmV3QXJyWzBdID09PSAxMDE7CgogICAgICAgICAgICB2YXIgdmVyaWZ5RW51bWVyYWJsZSA9IGZhbHNlOwogICAgICAgICAgICBmb3IgKHZhciBwIGluIG5ld0FycikgewogICAgICAgICAgICAgICAgaWYgKHAgPT09ICIwIiAmJiBuZXdBcnIuaGFzT3duUHJvcGVydHkoIjAiKSkgewogICAgICAgICAgICAgICAgICAgIHZlcmlmeUVudW1lcmFibGUgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdmVyaWZ5V3JpdGFibGUgPSBmYWxzZTsKICAgICAgICAgICAgbmV3QXJyWzBdID0gMTI7CiAgICAgICAgICAgIHZlcmlmeVdyaXRhYmxlID0gbmV3QXJyWzBdID09PSAxMjsKCiAgICAgICAgICAgIHZhciB2ZXJpZnlDb25maWd1cmFibGUgPSBmYWxzZTsKICAgICAgICAgICAgZGVsZXRlIG5ld0FyclswXTsKICAgICAgICAgICAgdmVyaWZ5Q29uZmlndXJhYmxlID0gbmV3QXJyLmhhc093blByb3BlcnR5KCIwIik7CgogICAgICAgICAgICByZXR1cm4gdmVyaWZ5VmFsdWUgJiYgIXZlcmlmeUNvbmZpZ3VyYWJsZSAmJiB2ZXJpZnlFbnVtZXJhYmxlICYmIHZlcmlmeVdyaXRhYmxlOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIGRlbGV0ZSBBcnJheS5wcm90b3R5cGVbMF07CiAgICAgICAgfQogICAgfSwKCiAgICBwcmVjb25kaXRpb246IGZ1bmN0aW9uIHByZXJlcSgpIHsKICAgICAgICByZXR1cm4gZm5FeGlzdHMoT2JqZWN0LmRlZmluZVByb3BlcnR5KTsKICAgIH0KfSk7Cg==","id":"15.4.4.4-5-b-iii-3-b-1"},{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgaWQ6ICIxNS40LjQuNC01LWMtaS0xIiwKCiAgICBwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS40LzE1LjQuNC8xNS40LjQuNC8xNS40LjQuNC01LWMtaS0xLmpzIiwKCiAgICBkZXNjcmlwdGlvbjogIkFycmF5LnByb3RvdHlwZS5jb25jYXQgd2lsbCBjb25jYXQgYW4gQXJyYXkgd2hlbiBpbmRleCBwcm9wZXJ0eSAocmVhZC1vbmx5KSBleGlzdHMgaW4gQXJyYXkucHJvdG90eXBlIChTdGVwIDUuYy5pKSIsCgogICAgdGVzdDogZnVuY3Rpb24gdGVzdGNhc2UoKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgIjAiLCB7CiAgICAgICAgICAgICAgICB2YWx1ZTogMTAwLAogICAgICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLAogICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgdmFyIG5ld0FyciA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQuY2FsbCgxMDEpOwoKICAgICAgICAgICAgcmV0dXJuIG5ld0Fyci5oYXNPd25Qcm9wZXJ0eSgiMCIpICYmIG5ld0FyclswXSA9PT0gMTAxOwoKICAgICAgICAgICAgdmFyIHZlcmlmeVZhbHVlID0gZmFsc2U7CiAgICAgICAgICAgIHZlcmlmeVZhbHVlID0gbmV3QXJyWzBdID09PSAxMDE7CgogICAgICAgICAgICB2YXIgdmVyaWZ5RW51bWVyYWJsZSA9IGZhbHNlOwogICAgICAgICAgICBmb3IgKHZhciBwIGluIG5ld0FycikgewogICAgICAgICAgICAgICAgaWYgKHAgPT09ICIwIiAmJiBuZXdBcnIuaGFzT3duUHJvcGVydHkoIjAiKSkgewogICAgICAgICAgICAgICAgICAgIHZlcmlmeUVudW1lcmFibGUgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdmVyaWZ5V3JpdGFibGUgPSBmYWxzZTsKICAgICAgICAgICAgbmV3QXJyWzBdID0gMTI7CiAgICAgICAgICAgIHZlcmlmeVdyaXRhYmxlID0gbmV3QXJyWzBdID09PSAxMjsKCiAgICAgICAgICAgIHZhciB2ZXJpZnlDb25maWd1cmFibGUgPSBmYWxzZTsKICAgICAgICAgICAgZGVsZXRlIG5ld0FyclswXTsKICAgICAgICAgICAgdmVyaWZ5Q29uZmlndXJhYmxlID0gbmV3QXJyLmhhc093blByb3BlcnR5KCIwIik7CgogICAgICAgICAgICByZXR1cm4gdmVyaWZ5VmFsdWUgJiYgIXZlcmlmeUNvbmZpZ3VyYWJsZSAmJiB2ZXJpZnlFbnVtZXJhYmxlICYmIHZlcmlmeVdyaXRhYmxlOwoKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICBkZWxldGUgQXJyYXkucHJvdG90eXBlWzBdOwogICAgICAgIH0KICAgIH0sCgogICAgcHJlY29uZGl0aW9uOiBmdW5jdGlvbiBwcmVyZXEoKSB7CiAgICAgICAgcmV0dXJuIGZuRXhpc3RzKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSk7CiAgICB9Cn0pOwo=","id":"15.4.4.4-5-c-i-1"}]}}

View File

@ -1 +1 @@
{"testsCollection":{"name":"Chapter - 15.4.5","numTests":"6","tests":[{"id":"15.4.5-1","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS40LjUtMSIsCgpwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS40LzE1LjQuNS8xNS40LjUtMS5qcyIsCgpkZXNjcmlwdGlvbjogIkFycmF5IGluc3RhbmNlcyBoYXZlIFtbQ2xhc3NdXSBzZXQgdG8gJ0FycmF5JyIsCgp0ZXN0OiBmdW5jdGlvbiB0ZXN0Y2FzZSgpIHsKICB2YXIgYSA9IFtdOwogIHZhciBzID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpOwogIGlmIChzID09PSAnW29iamVjdCBBcnJheV0nKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiB9Cn0pOwo="},{"id":"15.4.5.1-3.d-1","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS40LjUuMS0zLmQtMSIsCgpwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS40LzE1LjQuNS8xNS40LjUuMS8xNS40LjUuMS0zLmQtMS5qcyIsCgpkZXNjcmlwdGlvbjogIlRocm93IFJhbmdlRXJyb3IgaWYgYXR0ZW1wdCB0byBzZXQgYXJyYXkgbGVuZ3RoIHByb3BlcnR5IHRvIDQyOTQ5NjcyOTYgKDIqKjMyKSIsCgp0ZXN0OiBmdW5jdGlvbiB0ZXN0Y2FzZSgpIHsKICB0cnkgewogICAgICBbXS5sZW5ndGggPSA0Mjk0OTY3Mjk2IDsKICB9IGNhdGNoIChlKSB7CglpZiAoZSBpbnN0YW5jZW9mIFJhbmdlRXJyb3IpIHJldHVybiB0cnVlOwogIH0KIH0KfSk7Cg=="},{"id":"15.4.5.1-3.d-2","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS40LjUuMS0zLmQtMiIsCgpwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS40LzE1LjQuNS8xNS40LjUuMS8xNS40LjUuMS0zLmQtMi5qcyIsCgpkZXNjcmlwdGlvbjogIlRocm93IFJhbmdlRXJyb3IgaWYgYXR0ZW1wdCB0byBzZXQgYXJyYXkgbGVuZ3RoIHByb3BlcnR5IHRvIDQyOTQ5NjcyOTcgKDErMioqMzIpIiwKCnRlc3Q6IGZ1bmN0aW9uIHRlc3RjYXNlKCkgewogIHRyeSB7CiAgICAgIFtdLmxlbmd0aCA9IDQyOTQ5NjcyOTcgOwogIH0gY2F0Y2ggKGUpIHsKCWlmIChlIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikgcmV0dXJuIHRydWU7CiAgfQogfQp9KTsK"},{"id":"15.4.5.1-3.d-3","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS40LjUuMS0zLmQtMyIsCgpwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS40LzE1LjQuNS8xNS40LjUuMS8xNS40LjUuMS0zLmQtMy5qcyIsCgpkZXNjcmlwdGlvbjogIlNldCBhcnJheSBsZW5ndGggcHJvcGVydHkgdG8gbWF4IHZhbHVlIDQyOTQ5NjcyOTUgKDIqKjMyLTEsKSIsCgp0ZXN0OiBmdW5jdGlvbiB0ZXN0Y2FzZSgpIHsgIAogIHZhciBhID1bXTsKICBhLmxlbmd0aCA9IDQyOTQ5NjcyOTUgOwogIHJldHVybiBhLmxlbmd0aD09PTQyOTQ5NjcyOTUgOwogfQp9KTsK"},{"id":"15.4.5.1-5-1","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS40LjUuMS01LTEiLAoKcGF0aDogIlRlc3RDYXNlcy9jaGFwdGVyMTUvMTUuNC8xNS40LjUvMTUuNC41LjEvMTUuNC41LjEtNS0xLmpzIiwKCmRlc2NyaXB0aW9uOiAiRGVmaW5pbmcgYSBwcm9wZXJ0eSBuYW1lZCA0Mjk0OTY3Mjk1ICgyKiozMi0xKShub3QgYW4gYXJyYXkgZWxlbWVudCkiLAoKdGVzdDogZnVuY3Rpb24gdGVzdGNhc2UoKSB7ICAKICB2YXIgYSA9W107CiAgYVs0Mjk0OTY3Mjk1XSA9ICJub3QgYW4gYXJyYXkgZWxlbWVudCIgOwogIHJldHVybiBhWzQyOTQ5NjcyOTVdID09PSAibm90IGFuIGFycmF5IGVsZW1lbnQiOwogfQp9KTsK"},{"id":"15.4.5.1-5-2","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS40LjUuMS01LTIiLAoKcGF0aDogIlRlc3RDYXNlcy9jaGFwdGVyMTUvMTUuNC8xNS40LjUvMTUuNC41LjEvMTUuNC41LjEtNS0yLmpzIiwKCmRlc2NyaXB0aW9uOiAiRGVmaW5pbmcgYSBwcm9wZXJ0eSBuYW1lZCA0Mjk0OTY3Mjk1ICgyKiozMi0xKSBkb2Vzbid0IGNoYW5nZSBsZW5ndGggb2YgdGhlIGFycmF5IiwKCnRlc3Q6IGZ1bmN0aW9uIHRlc3RjYXNlKCkgeyAgCiAgdmFyIGEgPVswLDEsMl07CiAgYVs0Mjk0OTY3Mjk1XSA9ICJub3QgYW4gYXJyYXkgZWxlbWVudCIgOwogIHJldHVybiBhLmxlbmd0aD09PTM7CiB9Cn0pOwo="}]}} {"testsCollection":{"name":"Chapter - 15.4.5","numTests":"6","tests":[{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS40LjUtMSIsCgpwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS40LzE1LjQuNS8xNS40LjUtMS5qcyIsCgpkZXNjcmlwdGlvbjogIkFycmF5IGluc3RhbmNlcyBoYXZlIFtbQ2xhc3NdXSBzZXQgdG8gJ0FycmF5JyIsCgp0ZXN0OiBmdW5jdGlvbiB0ZXN0Y2FzZSgpIHsKICB2YXIgYSA9IFtdOwogIHZhciBzID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpOwogIGlmIChzID09PSAnW29iamVjdCBBcnJheV0nKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiB9Cn0pOwo=","id":"15.4.5-1"},{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS40LjUuMS0zLmQtMSIsCgpwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS40LzE1LjQuNS8xNS40LjUuMS8xNS40LjUuMS0zLmQtMS5qcyIsCgpkZXNjcmlwdGlvbjogIlRocm93IFJhbmdlRXJyb3IgaWYgYXR0ZW1wdCB0byBzZXQgYXJyYXkgbGVuZ3RoIHByb3BlcnR5IHRvIDQyOTQ5NjcyOTYgKDIqKjMyKSIsCgp0ZXN0OiBmdW5jdGlvbiB0ZXN0Y2FzZSgpIHsKICB0cnkgewogICAgICBbXS5sZW5ndGggPSA0Mjk0OTY3Mjk2IDsKICB9IGNhdGNoIChlKSB7CglpZiAoZSBpbnN0YW5jZW9mIFJhbmdlRXJyb3IpIHJldHVybiB0cnVlOwogIH0KIH0KfSk7Cg==","id":"15.4.5.1-3.d-1"},{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS40LjUuMS0zLmQtMiIsCgpwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS40LzE1LjQuNS8xNS40LjUuMS8xNS40LjUuMS0zLmQtMi5qcyIsCgpkZXNjcmlwdGlvbjogIlRocm93IFJhbmdlRXJyb3IgaWYgYXR0ZW1wdCB0byBzZXQgYXJyYXkgbGVuZ3RoIHByb3BlcnR5IHRvIDQyOTQ5NjcyOTcgKDErMioqMzIpIiwKCnRlc3Q6IGZ1bmN0aW9uIHRlc3RjYXNlKCkgewogIHRyeSB7CiAgICAgIFtdLmxlbmd0aCA9IDQyOTQ5NjcyOTcgOwogIH0gY2F0Y2ggKGUpIHsKCWlmIChlIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikgcmV0dXJuIHRydWU7CiAgfQogfQp9KTsK","id":"15.4.5.1-3.d-2"},{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS40LjUuMS0zLmQtMyIsCgpwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS40LzE1LjQuNS8xNS40LjUuMS8xNS40LjUuMS0zLmQtMy5qcyIsCgpkZXNjcmlwdGlvbjogIlNldCBhcnJheSBsZW5ndGggcHJvcGVydHkgdG8gbWF4IHZhbHVlIDQyOTQ5NjcyOTUgKDIqKjMyLTEsKSIsCgp0ZXN0OiBmdW5jdGlvbiB0ZXN0Y2FzZSgpIHsgIAogIHZhciBhID1bXTsKICBhLmxlbmd0aCA9IDQyOTQ5NjcyOTUgOwogIHJldHVybiBhLmxlbmd0aD09PTQyOTQ5NjcyOTUgOwogfQp9KTsK","id":"15.4.5.1-3.d-3"},{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS40LjUuMS01LTEiLAoKcGF0aDogIlRlc3RDYXNlcy9jaGFwdGVyMTUvMTUuNC8xNS40LjUvMTUuNC41LjEvMTUuNC41LjEtNS0xLmpzIiwKCmRlc2NyaXB0aW9uOiAiRGVmaW5pbmcgYSBwcm9wZXJ0eSBuYW1lZCA0Mjk0OTY3Mjk1ICgyKiozMi0xKShub3QgYW4gYXJyYXkgZWxlbWVudCkiLAoKdGVzdDogZnVuY3Rpb24gdGVzdGNhc2UoKSB7ICAKICB2YXIgYSA9W107CiAgYVs0Mjk0OTY3Mjk1XSA9ICJub3QgYW4gYXJyYXkgZWxlbWVudCIgOwogIHJldHVybiBhWzQyOTQ5NjcyOTVdID09PSAibm90IGFuIGFycmF5IGVsZW1lbnQiOwogfQp9KTsK","id":"15.4.5.1-5-1"},{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS40LjUuMS01LTIiLAoKcGF0aDogIlRlc3RDYXNlcy9jaGFwdGVyMTUvMTUuNC8xNS40LjUvMTUuNC41LjEvMTUuNC41LjEtNS0yLmpzIiwKCmRlc2NyaXB0aW9uOiAiRGVmaW5pbmcgYSBwcm9wZXJ0eSBuYW1lZCA0Mjk0OTY3Mjk1ICgyKiozMi0xKSBkb2Vzbid0IGNoYW5nZSBsZW5ndGggb2YgdGhlIGFycmF5IiwKCnRlc3Q6IGZ1bmN0aW9uIHRlc3RjYXNlKCkgeyAgCiAgdmFyIGEgPVswLDEsMl07CiAgYVs0Mjk0OTY3Mjk1XSA9ICJub3QgYW4gYXJyYXkgZWxlbWVudCIgOwogIHJldHVybiBhLmxlbmd0aD09PTM7CiB9Cn0pOwo=","id":"15.4.5.1-5-2"}]}}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"testsCollection":{"name":"Chapter - 15.7","numTests":"5","tests":[{"id":"15.7.3-1","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS43LjMtMSIsCgpwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS43LzE1LjcuMy8xNS43LjMtMS5qcyIsCgpkZXNjcmlwdGlvbjogIk51bWJlciBjb25zdHJ1Y3RvciAtIFtbUHJvdG90eXBlXV0gaXMgdGhlIEZ1bmN0aW9uIHByb3RvdHlwZSBvYmplY3QiLAoKdGVzdDogZnVuY3Rpb24gdGVzdGNhc2UoKSB7CiAgaWYgKEZ1bmN0aW9uLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKE51bWJlcikgPT09IHRydWUpIHsKICAgIHJldHVybiB0cnVlOwogIH0KIH0KfSk7Cg=="},{"id":"15.7.3-2","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS43LjMtMiIsCgpwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS43LzE1LjcuMy8xNS43LjMtMi5qcyIsCgpkZXNjcmlwdGlvbjogIk51bWJlciBjb25zdHJ1Y3RvciAtIFtbUHJvdG90eXBlXV0gaXMgdGhlIEZ1bmN0aW9uIHByb3RvdHlwZSBvYmplY3QgKHVzaW5nIGdldFByb3RvdHlwZU9mKSIsCgp0ZXN0OiBmdW5jdGlvbiB0ZXN0Y2FzZSgpIHsKICB2YXIgcCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihOdW1iZXIpOwogIGlmIChwID09PSBGdW5jdGlvbi5wcm90b3R5cGUpIHsKICAgIHJldHVybiB0cnVlOwogIH0KIH0sCgpwcmVjb25kaXRpb246IGZ1bmN0aW9uIHByZXJlcSgpIHsKICByZXR1cm4gZm5FeGlzdHMoT2JqZWN0LmdldFByb3RvdHlwZU9mKTsKIH0KfSk7Cg=="},{"id":"15.7.3.1-1","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS43LjMuMS0xIiwKCnBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjcvMTUuNy4zLzE1LjcuMy4xLzE1LjcuMy4xLTEuanMiLAoKZGVzY3JpcHRpb246ICJOdW1iZXIucHJvdG90eXBlIGlzIGEgZGF0YSBwcm9wZXJ0eSB3aXRoIGRlZmF1bHQgYXR0cmlidXRlIHZhbHVlcyAoZmFsc2UpIiwKCnRlc3Q6IGZ1bmN0aW9uIHRlc3RjYXNlKCkgewogIHZhciBkID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihOdW1iZXIsICdwcm90b3R5cGUnKTsKICAKICBpZiAoZC53cml0YWJsZSA9PT0gZmFsc2UgJiYKICAgICAgZC5lbnVtZXJhYmxlID09PSBmYWxzZSAmJgogICAgICBkLmNvbmZpZ3VyYWJsZSA9PT0gZmFsc2UpIHsKICAgIHJldHVybiB0cnVlOwogIH0KIH0sCgpwcmVjb25kaXRpb246IGZ1bmN0aW9uIHByZXJlcSgpIHsKICByZXR1cm4gZm5FeGlzdHMoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcik7CiB9Cn0pOwo="},{"id":"15.7.3.1-2","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS43LjMuMS0yIiwKCnBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjcvMTUuNy4zLzE1LjcuMy4xLzE1LjcuMy4xLTIuanMiLAoKZGVzY3JpcHRpb246ICJOdW1iZXIucHJvdG90eXBlLCBpbml0aWFsIHZhbHVlIGlzIHRoZSBOdW1iZXIgcHJvdG90eXBlIG9iamVjdCIsCgp0ZXN0OiBmdW5jdGlvbiB0ZXN0Y2FzZSgpIHsKICAvLyBhc3N1bWUgdGhhdCBOdW1iZXIucHJvdG90eXBlIGhhcyBub3QgYmVlbiBtb2RpZmllZC4KICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBOdW1iZXIoNDIpKT09PU51bWJlci5wcm90b3R5cGU7CiB9LAoKcHJlY29uZGl0aW9uOiBmdW5jdGlvbiBwcmVyZXEoKSB7CiAgcmV0dXJuIGZuRXhpc3RzKE9iamVjdC5nZXRQcm90b3R5cGVPZik7CiB9Cgp9KTsK"},{"id":"15.7.4-1","code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS43LjQtMSIsCgpwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS43LzE1LjcuMy8xNS43LjQvMTUuNy40LTEuanMiLAoKZGVzY3JpcHRpb246ICJOdW1iZXIgcHJvdG90eXBlIG9iamVjdDogaXRzIFtbQ2xhc3NdXSBtdXN0IGJlICdOdW1iZXInIiwKCnRlc3Q6IGZ1bmN0aW9uIHRlc3RjYXNlKCkgewogIHZhciBudW1Qcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgTnVtYmVyKDQyKSk7CiAgdmFyIHMgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobnVtUHJvdG8gKTsKICByZXR1cm4gKHMgPT09ICdbb2JqZWN0IE51bWJlcl0nKSA7CiB9LAoKcHJlY29uZGl0aW9uOiBmdW5jdGlvbiBwcmVyZXEoKSB7CiAgcmV0dXJuIGZuRXhpc3RzKE9iamVjdC5nZXRQcm90b3R5cGVPZik7CiB9Cgp9KTsK"}]}} {"testsCollection":{"name":"Chapter - 15.7","numTests":"5","tests":[{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS43LjMtMSIsCgpwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS43LzE1LjcuMy8xNS43LjMtMS5qcyIsCgpkZXNjcmlwdGlvbjogIk51bWJlciBjb25zdHJ1Y3RvciAtIFtbUHJvdG90eXBlXV0gaXMgdGhlIEZ1bmN0aW9uIHByb3RvdHlwZSBvYmplY3QiLAoKdGVzdDogZnVuY3Rpb24gdGVzdGNhc2UoKSB7CiAgaWYgKEZ1bmN0aW9uLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKE51bWJlcikgPT09IHRydWUpIHsKICAgIHJldHVybiB0cnVlOwogIH0KIH0KfSk7Cg==","id":"15.7.3-1"},{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS43LjMtMiIsCgpwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS43LzE1LjcuMy8xNS43LjMtMi5qcyIsCgpkZXNjcmlwdGlvbjogIk51bWJlciBjb25zdHJ1Y3RvciAtIFtbUHJvdG90eXBlXV0gaXMgdGhlIEZ1bmN0aW9uIHByb3RvdHlwZSBvYmplY3QgKHVzaW5nIGdldFByb3RvdHlwZU9mKSIsCgp0ZXN0OiBmdW5jdGlvbiB0ZXN0Y2FzZSgpIHsKICB2YXIgcCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihOdW1iZXIpOwogIGlmIChwID09PSBGdW5jdGlvbi5wcm90b3R5cGUpIHsKICAgIHJldHVybiB0cnVlOwogIH0KIH0sCgpwcmVjb25kaXRpb246IGZ1bmN0aW9uIHByZXJlcSgpIHsKICByZXR1cm4gZm5FeGlzdHMoT2JqZWN0LmdldFByb3RvdHlwZU9mKTsKIH0KfSk7Cg==","id":"15.7.3-2"},{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS43LjMuMS0xIiwKCnBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjcvMTUuNy4zLzE1LjcuMy4xLzE1LjcuMy4xLTEuanMiLAoKZGVzY3JpcHRpb246ICJOdW1iZXIucHJvdG90eXBlIGlzIGEgZGF0YSBwcm9wZXJ0eSB3aXRoIGRlZmF1bHQgYXR0cmlidXRlIHZhbHVlcyAoZmFsc2UpIiwKCnRlc3Q6IGZ1bmN0aW9uIHRlc3RjYXNlKCkgewogIHZhciBkID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihOdW1iZXIsICdwcm90b3R5cGUnKTsKICAKICBpZiAoZC53cml0YWJsZSA9PT0gZmFsc2UgJiYKICAgICAgZC5lbnVtZXJhYmxlID09PSBmYWxzZSAmJgogICAgICBkLmNvbmZpZ3VyYWJsZSA9PT0gZmFsc2UpIHsKICAgIHJldHVybiB0cnVlOwogIH0KIH0sCgpwcmVjb25kaXRpb246IGZ1bmN0aW9uIHByZXJlcSgpIHsKICByZXR1cm4gZm5FeGlzdHMoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcik7CiB9Cn0pOwo=","id":"15.7.3.1-1"},{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS43LjMuMS0yIiwKCnBhdGg6ICJUZXN0Q2FzZXMvY2hhcHRlcjE1LzE1LjcvMTUuNy4zLzE1LjcuMy4xLzE1LjcuMy4xLTIuanMiLAoKZGVzY3JpcHRpb246ICJOdW1iZXIucHJvdG90eXBlLCBpbml0aWFsIHZhbHVlIGlzIHRoZSBOdW1iZXIgcHJvdG90eXBlIG9iamVjdCIsCgp0ZXN0OiBmdW5jdGlvbiB0ZXN0Y2FzZSgpIHsKICAvLyBhc3N1bWUgdGhhdCBOdW1iZXIucHJvdG90eXBlIGhhcyBub3QgYmVlbiBtb2RpZmllZC4KICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBOdW1iZXIoNDIpKT09PU51bWJlci5wcm90b3R5cGU7CiB9LAoKcHJlY29uZGl0aW9uOiBmdW5jdGlvbiBwcmVyZXEoKSB7CiAgcmV0dXJuIGZuRXhpc3RzKE9iamVjdC5nZXRQcm90b3R5cGVPZik7CiB9Cgp9KTsK","id":"15.7.3.1-2"},{"code":"RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKaWQ6ICIxNS43LjQtMSIsCgpwYXRoOiAiVGVzdENhc2VzL2NoYXB0ZXIxNS8xNS43LzE1LjcuMy8xNS43LjQvMTUuNy40LTEuanMiLAoKZGVzY3JpcHRpb246ICJOdW1iZXIgcHJvdG90eXBlIG9iamVjdDogaXRzIFtbQ2xhc3NdXSBtdXN0IGJlICdOdW1iZXInIiwKCnRlc3Q6IGZ1bmN0aW9uIHRlc3RjYXNlKCkgewogIHZhciBudW1Qcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgTnVtYmVyKDQyKSk7CiAgdmFyIHMgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobnVtUHJvdG8gKTsKICByZXR1cm4gKHMgPT09ICdbb2JqZWN0IE51bWJlcl0nKSA7CiB9LAoKcHJlY29uZGl0aW9uOiBmdW5jdGlvbiBwcmVyZXEoKSB7CiAgcmV0dXJuIGZuRXhpc3RzKE9iamVjdC5nZXRQcm90b3R5cGVPZik7CiB9Cgp9KTsK","id":"15.7.4-1"}]}}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"numTests":10456,"version":"0.6.2","date":"2011-03-23","testSuite":["resources/scripts/testcases/07_Lexical_Conventions.json","resources/scripts/testcases/08_Types.json","resources/scripts/testcases/09_Type_Conversion.json","resources/scripts/testcases/10_Execution_Contexts.json","resources/scripts/testcases/11.10_Binary_Bitwise_Operators.json","resources/scripts/testcases/11.11_Binary_Logical_Operators.json","resources/scripts/testcases/11.12_Conditional_Operator.json","resources/scripts/testcases/11.13_Assignment_Operators.json","resources/scripts/testcases/11.14_Comma_Operator.json","resources/scripts/testcases/11.1_Primary_Expressions.json","resources/scripts/testcases/11.2_Left_Hand_Side_Expressions.json","resources/scripts/testcases/11.3_PostfixExpressions.json","resources/scripts/testcases/11.4_Unary_Operators.json","resources/scripts/testcases/11.5_Multiplicative_Operators.json","resources/scripts/testcases/11.6_Additive_Operators.json","resources/scripts/testcases/11.7_Bitwise_Shift_Operators.json","resources/scripts/testcases/11.8_Relational_Operators.json","resources/scripts/testcases/11.9_Equality_Operators.json","resources/scripts/testcases/12_Statement.json","resources/scripts/testcases/13_Function_Definition.json","resources/scripts/testcases/14_Program.json","resources/scripts/testcases/15.10_RegExp_Objects.json","resources/scripts/testcases/15.11_Error_Objects.json","resources/scripts/testcases/15.1_The_Global_Object.json","resources/scripts/testcases/15.2_Object_Objects.json","resources/scripts/testcases/15.3_Function_Objects.json","resources/scripts/testcases/15.4_Array_Objects.json","resources/scripts/testcases/15.5_String_Objects.json","resources/scripts/testcases/15.6_Boolean_Objects.json","resources/scripts/testcases/15.7_Number_Objects.json","resources/scripts/testcases/15.8_The_Math_Object.json","resources/scripts/testcases/15.9_Date_Objects.json","resources/scripts/testcases/chapter07.json","resources/scripts/testcases/chapter10.json","resources/scripts/testcases/chapter11.json","resources/scripts/testcases/chapter12.json","resources/scripts/testcases/chapter13.json","resources/scripts/testcases/15.1.json","resources/scripts/testcases/15.10.json","resources/scripts/testcases/15.11.json","resources/scripts/testcases/15.12.json","resources/scripts/testcases/15.2.3.1.json","resources/scripts/testcases/15.2.3.10.json","resources/scripts/testcases/15.2.3.11.json","resources/scripts/testcases/15.2.3.12.json","resources/scripts/testcases/15.2.3.13.json","resources/scripts/testcases/15.2.3.14.json","resources/scripts/testcases/15.2.3.2.json","resources/scripts/testcases/15.2.3.3.json","resources/scripts/testcases/15.2.3.4.json","resources/scripts/testcases/15.2.3.5.json","resources/scripts/testcases/15.2.3.6.json","resources/scripts/testcases/15.2.3.7.json","resources/scripts/testcases/15.2.3.8.json","resources/scripts/testcases/15.2.3.9.json","resources/scripts/testcases/15.2.4.json","resources/scripts/testcases/15.3.json","resources/scripts/testcases/15.4.3.json","resources/scripts/testcases/15.4.4.10.json","resources/scripts/testcases/15.4.4.12.json","resources/scripts/testcases/15.4.4.14.json","resources/scripts/testcases/15.4.4.15.json","resources/scripts/testcases/15.4.4.16.json","resources/scripts/testcases/15.4.4.17.json","resources/scripts/testcases/15.4.4.18.json","resources/scripts/testcases/15.4.4.19.json","resources/scripts/testcases/15.4.4.20.json","resources/scripts/testcases/15.4.4.21.json","resources/scripts/testcases/15.4.4.22.json","resources/scripts/testcases/15.4.4.4.json","resources/scripts/testcases/15.4.5.json","resources/scripts/testcases/15.5.json","resources/scripts/testcases/15.7.json","resources/scripts/testcases/15.9.json"]} {"date":"2011-03-23","numTests":10456,"testSuite":["resources/scripts/testcases/07_Lexical_Conventions.json","resources/scripts/testcases/08_Types.json","resources/scripts/testcases/09_Type_Conversion.json","resources/scripts/testcases/10_Execution_Contexts.json","resources/scripts/testcases/11.10_Binary_Bitwise_Operators.json","resources/scripts/testcases/11.11_Binary_Logical_Operators.json","resources/scripts/testcases/11.12_Conditional_Operator.json","resources/scripts/testcases/11.13_Assignment_Operators.json","resources/scripts/testcases/11.14_Comma_Operator.json","resources/scripts/testcases/11.1_Primary_Expressions.json","resources/scripts/testcases/11.2_Left_Hand_Side_Expressions.json","resources/scripts/testcases/11.3_PostfixExpressions.json","resources/scripts/testcases/11.4_Unary_Operators.json","resources/scripts/testcases/11.5_Multiplicative_Operators.json","resources/scripts/testcases/11.6_Additive_Operators.json","resources/scripts/testcases/11.7_Bitwise_Shift_Operators.json","resources/scripts/testcases/11.8_Relational_Operators.json","resources/scripts/testcases/11.9_Equality_Operators.json","resources/scripts/testcases/12_Statement.json","resources/scripts/testcases/13_Function_Definition.json","resources/scripts/testcases/14_Program.json","resources/scripts/testcases/15.10_RegExp_Objects.json","resources/scripts/testcases/15.11_Error_Objects.json","resources/scripts/testcases/15.1_The_Global_Object.json","resources/scripts/testcases/15.2_Object_Objects.json","resources/scripts/testcases/15.3_Function_Objects.json","resources/scripts/testcases/15.4_Array_Objects.json","resources/scripts/testcases/15.5_String_Objects.json","resources/scripts/testcases/15.6_Boolean_Objects.json","resources/scripts/testcases/15.7_Number_Objects.json","resources/scripts/testcases/15.8_The_Math_Object.json","resources/scripts/testcases/15.9_Date_Objects.json","resources/scripts/testcases/chapter07.json","resources/scripts/testcases/chapter10.json","resources/scripts/testcases/chapter11.json","resources/scripts/testcases/chapter12.json","resources/scripts/testcases/chapter13.json","resources/scripts/testcases/15.1.json","resources/scripts/testcases/15.10.json","resources/scripts/testcases/15.11.json","resources/scripts/testcases/15.12.json","resources/scripts/testcases/15.2.3.1.json","resources/scripts/testcases/15.2.3.10.json","resources/scripts/testcases/15.2.3.11.json","resources/scripts/testcases/15.2.3.12.json","resources/scripts/testcases/15.2.3.13.json","resources/scripts/testcases/15.2.3.14.json","resources/scripts/testcases/15.2.3.2.json","resources/scripts/testcases/15.2.3.3.json","resources/scripts/testcases/15.2.3.4.json","resources/scripts/testcases/15.2.3.5.json","resources/scripts/testcases/15.2.3.6.json","resources/scripts/testcases/15.2.3.7.json","resources/scripts/testcases/15.2.3.8.json","resources/scripts/testcases/15.2.3.9.json","resources/scripts/testcases/15.2.4.json","resources/scripts/testcases/15.3.json","resources/scripts/testcases/15.4.3.json","resources/scripts/testcases/15.4.4.10.json","resources/scripts/testcases/15.4.4.12.json","resources/scripts/testcases/15.4.4.14.json","resources/scripts/testcases/15.4.4.15.json","resources/scripts/testcases/15.4.4.16.json","resources/scripts/testcases/15.4.4.17.json","resources/scripts/testcases/15.4.4.18.json","resources/scripts/testcases/15.4.4.19.json","resources/scripts/testcases/15.4.4.20.json","resources/scripts/testcases/15.4.4.21.json","resources/scripts/testcases/15.4.4.22.json","resources/scripts/testcases/15.4.4.4.json","resources/scripts/testcases/15.4.5.json","resources/scripts/testcases/15.5.json","resources/scripts/testcases/15.7.json","resources/scripts/testcases/15.9.json"],"version":"0.6.2"}