1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)package org.chromium.content.browser;
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.test.suitebuilder.annotation.LargeTest;
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.base.test.util.Feature;
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.base.test.util.UrlUtils;
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.content.browser.test.util.DOMUtils;
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.content_shell_apk.ContentShellTestBase;
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)public class TestsJavaScriptEvalTest extends ContentShellTestBase {
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private static final String JSTEST_URL = UrlUtils.encodeHtmlDataUri(
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            "<html><head><script>" +
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            "  function foobar() { return 'foobar'; }" +
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            "</script></head>" +
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            "<body><button id=\"test\">Test button</button></body></html>");
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public TestsJavaScriptEvalTest() {
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * Tests that evaluation of JavaScript for test purposes (using JavaScriptUtils, DOMUtils etc)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * works even in presence of "background" (non-test-initiated) JavaScript evaluation activity.
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    @LargeTest
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    @Feature({"Browser"})
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public void testJavaScriptEvalIsCorrectlyOrdered()
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            throws InterruptedException, Exception, Throwable {
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        launchContentShellWithUrl(JSTEST_URL);
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assertTrue("Page failed to load", waitForActiveShellToBeDoneLoading());
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        final ContentViewCore contentViewCore = getContentViewCore();
36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        for (int i = 0; i < 30; ++i) {
37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            for (int j = 0; j < 10; ++j) {
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                // Start evaluation of a JavaScript script -- we don't need a result.
390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                contentViewCore.evaluateJavaScript("foobar();", null);
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            }
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            // DOMUtils does need to evaluate a JavaScript and get its result to get DOM bounds.
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            assertNotNull("Failed to get bounds",
430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                    DOMUtils.getNodeBounds(contentViewCore, "test"));
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
47