// Copyright (c) 2012 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.

/**
 * Test fixture for loading all our JS files.
 * @constructor
 * @extends {testing.Test}
 */
function AllJsLoadTest () {
}

AllJsLoadTest.prototype = {
  __proto__: testing.Test.prototype,

  /** @inheritDoc */
  extraLibraries: [
    'base.js',
    'browser_globals.gtestjs',
    // All of our Javascript files should be listed here unless they are
    // only used by JSCompiler
    'client_plugin.js',
    'client_screen.js',
    'client_session.js',
    //'clipboard_event_proto.js',  // Only used by jscompiler.
    'clipboard.js',
    'connection_stats.js',
    //'cs_oauth2_trampoline.js', // Uses globals in the chrome namespace, which
                                 // give a compilation error when declared in
                                 // browser_globals for some reason. Since this
                                 // file's days are numbered, skip it for now.
    'error.js',
    'event_handlers.js',
    'butter_bar.js',
    //'format_iq.js',  // Already covered by format_iq.gtestjs
    'host.js',
    'host_controller.js',
    'host_dispatcher.js',
    'host_it2me_dispatcher.js',
    'host_it2me_native_messaging.js',
    'host_list.js',
    'host_native_messaging.js',
    //'host_plugin_proto.js',  // Only used by jscompiler
    'host_screen.js',
    'host_session.js',
    'host_setup_dialog.js',
    'host_table_entry.js',
    'identity.js',
    //'jscompiler_hacks.js',  // Only used by jscompiler.
    'l10n.js',
    'log_to_server.js',
    'menu_button.js',
    'oauth2_api.js',
    'oauth2.js',
    'paired_client_manager.js',
    'plugin_settings.js',
    'remoting.js',
    'session_connector.js',
    'server_log_entry.js',
    'smart_reconnector.js',
    'stats_accumulator.js',
    'toolbar.js',
    'ui_mode.js',
    //'viewer_plugin_proto.js',  // Only used by jscompiler.
    //'wcs_iq_client_proto.js',  // Only used by jscompiler.
    'wcs.js',
    'wcs_loader.js',
    'wcs_sandbox_content.js',
    'wcs_sandbox_container.js',
    'xhr.js',
    'xhr_proxy.js',
  ],
};

// Basic test to verify that all the JS files load without console errors.
TEST_F('AllJsLoadTest', 'TestNoConsoleErrors', function() {
  assertTrue(true);
});
