Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(491)

Unified Diff: content/test/data/tree_parser_util.js

Issue 1282623002: Revert of Introduce cross_site_iframe_factory.html, and use it in a test (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/test/data/cross_site_iframe_factory.html ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/test/data/tree_parser_util.js
diff --git a/content/test/data/tree_parser_util.js b/content/test/data/tree_parser_util.js
deleted file mode 100644
index 6170d9dcd8742591f8b85844dcf66029cb2af608..0000000000000000000000000000000000000000
--- a/content/test/data/tree_parser_util.js
+++ /dev/null
@@ -1,153 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-/**
- * Parser for a simple grammar that describes a tree structure using a function-
- * like "a(b(c,d))" syntax. Original intended usage: to have browsertests
- * specify an arbitrary tree of iframes, loaded from various sites, without
- * having to write a .html page for each level or do crazy feats of data: url
- * escaping. But there's nothing really iframe-specific here. See below for some
- * examples of the grammar and the parser output.
- *
- * @example <caption>Basic syntax: an identifier followed by arg list.</caption>
- * TreeParserUtil.parse('abc ()'); // returns { value: 'abc', children: [] }
- *
- * @example <caption>The arg list is optional. Dots are legal in ids.</caption>
- * TreeParserUtil.parse('b.com'); // returns { value: 'b.com', children: [] }
- *
- * @example <caption>Commas separate children in the arg list.</caption>
- * // returns { value: 'b', children: [
- * // { value: 'c', children: [] },
- * // { value: 'd', children: [] }
- * // ]}
- * TreeParserUtil.parse('b (c, d)';
- *
- * @example <caption>Children can have children, and so on.</caption>
- * // returns { value: 'e', children: [
- * // { value: 'f', children: [
- * // { value: 'g', children: [
- * // { value: 'h', children: [] },
- * // { value: 'i', children: [
- * // { value: 'j', children: [] }
- * // ]},
- * // ]}
- * // ]}
- * // ]}
- * TreeParserUtil.parse('e(f(g(h(),i(j))))';
- *
- * @example <caption>flatten() converts a [sub]tree back to a string.</caption>
- * var tree = TreeParserUtil.parse('b.com (c.com(e.com), d.com)');
- * TreeParserUtil.flatten(tree.children[0]); // returns 'c.com(e.com())'
- */
-var TreeParserUtil = (function() {
- 'use strict';
-
- /**
- * Parses an input string into a tree. See class comment for examples.
- * @returns A tree of the form {value: <string>, children: <Array.<tree>>}.
- */
- function parse(input) {
- var tokenStream = lex(input);
-
- var result = takeIdAndChild(tokenStream);
- if (tokenStream.length != 0)
- throw new Error('Expected end of stream, but found "' +
- tokenStream[0] + '".')
- return result;
- }
-
- /**
- * Inverse of |parse|. Converts a parsed tree object into a string. Can be
- * used to forward a subtree as an argument to a nested document.
- */
- function flatten(tree) {
- return tree.value + '(' + tree.children.map(flatten).join(',') + ')';
- }
-
- /**
- * Lexer function to convert an input string into a token stream. Splits the
- * input along whitespace, parens and commas. Whitespace is removed, while
- * parens and commas are preserved as standalone tokens.
- *
- * @param {string} input The input string.
- * @return {Array.<string>} The resulting token stream.
- */
- function lex(input) {
- return input.split(/(\s+|\(|\)|,)/).reduce(
- function (resultArray, token) {
- var trimmed = token.trim();
- if (trimmed) {
- resultArray.push(trimmed);
- }
- return resultArray;
- }, []);
- }
-
-
- /**
- * Consumes from the stream an identifier and optional child list, returning
- * its parsed representation.
- */
- function takeIdAndChild(tokenStream) {
- return { value: takeIdentifier(tokenStream),
- children: takeChildList(tokenStream) };
- }
-
- /**
- * Consumes from the stream an identifier, returning its value (as a string).
- */
- function takeIdentifier(tokenStream) {
- if (tokenStream.length == 0)
- throw new Error('Expected an identifier, but found end-of-stream.');
- var token = tokenStream.shift();
- if (!token.match(/[a-zA-Z0-9.-]+/))
- throw new Error('Expected an identifier, but found "' + token + '".');
- return token;
- }
-
- /**
- * Consumes an optional child list from the token stream, returning a list of
- * the parsed children.
- */
- function takeChildList(tokenStream) {
- // Remove the next token from the stream if it matches |token|.
- function tryToEatA(token) {
- if (tokenStream[0] == token) {
- tokenStream.shift();
- return true;
- }
- return false;
- }
-
- // Bare identifier case, as in 'b' in the input '(a (b, c))'
- if (!tryToEatA('('))
- return [];
-
- // Empty list case, as in 'b' in the input 'a (b (), c)'.
- if (tryToEatA(')')) {
- return [];
- }
-
- // List with at least one entry.
- var result = [ takeIdAndChild(tokenStream) ];
-
- // Additional entries allowed with commas.
- while (tryToEatA(',')) {
- result.push(takeIdAndChild(tokenStream));
- }
-
- // End of list.
- if (tryToEatA(')')) {
- return result;
- }
- if (tokenStream.length == 0)
- throw new Error('Expected ")" or ",", but found end-of-stream.');
- throw new Error('Expected ")" or ",", but found "' + tokenStream[0] + '".');
- }
-
- return {
- parse: parse,
- flatten: flatten
- };
-})();
« no previous file with comments | « content/test/data/cross_site_iframe_factory.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698