// Copyright 2014 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.

#include "base/strings/stringprintf.h"
#include "extensions/renderer/module_system_test.h"
#include "gin/dictionary.h"
#include "grit/extensions_renderer_resources.h"

namespace extensions {
namespace {

class UtilsUnittest : public ModuleSystemTest {
 private:
  void SetUp() override {
    ModuleSystemTest::SetUp();

    env()->RegisterModule("utils", IDR_UTILS_JS);
    env()->RegisterTestFile("utils_unittest", "utils_unittest.js");
    env()->OverrideNativeHandler("schema_registry",
                                 "exports.GetSchema = function() {};");
    env()->OverrideNativeHandler("logging",
                                 "exports.CHECK = function() {};\n"
                                 "exports.DCHECK = function() {};\n"
                                 "exports.WARNING = function() {};");
    env()->OverrideNativeHandler("v8_context", "");
    gin::Dictionary chrome(env()->isolate(), env()->CreateGlobal("chrome"));
    gin::Dictionary chrome_runtime(
        gin::Dictionary::CreateEmpty(env()->isolate()));
    chrome.Set("runtime", chrome_runtime);
  }
};

TEST_F(UtilsUnittest, TestNothing) {
  ExpectNoAssertionsMade();
}

TEST_F(UtilsUnittest, SuperClass) {
  ModuleSystem::NativesEnabledScope natives_enabled_scope(
      env()->module_system());
  env()->module_system()->CallModuleMethod("utils_unittest", "testSuperClass");
}

TEST_F(UtilsUnittest, PromiseNoResult) {
  ModuleSystem::NativesEnabledScope natives_enabled_scope(
      env()->module_system());
  env()->module_system()->CallModuleMethod("utils_unittest",
                                           "testPromiseNoResult");
  RunResolvedPromises();
}

TEST_F(UtilsUnittest, PromiseOneResult) {
  ModuleSystem::NativesEnabledScope natives_enabled_scope(
      env()->module_system());
  env()->module_system()->CallModuleMethod("utils_unittest",
                                           "testPromiseOneResult");
  RunResolvedPromises();
}

TEST_F(UtilsUnittest, PromiseTwoResults) {
  ModuleSystem::NativesEnabledScope natives_enabled_scope(
      env()->module_system());
  env()->module_system()->CallModuleMethod("utils_unittest",
                                           "testPromiseTwoResults");
  RunResolvedPromises();
}

TEST_F(UtilsUnittest, PromiseError) {
  ModuleSystem::NativesEnabledScope natives_enabled_scope(
      env()->module_system());
  env()->module_system()->CallModuleMethod("utils_unittest",
                                           "testPromiseError");
  RunResolvedPromises();
}

}  // namespace
}  // namespace extensions
