# 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.

import("//build/config/ui.gni")
import("//sky/engine/config.gni")
import("//testing/test.gni")

visibility = [ "//sky/*" ]

platform_web_unittest_files = [
  "//sky/engine/platform/graphics/BitmapImageTest.cpp",
  "//sky/engine/platform/graphics/DeferredImageDecoderTest.cpp",
  "//sky/engine/platform/graphics/ImageDecodingStoreTest.cpp",
  "//sky/engine/platform/graphics/ImageFrameGeneratorTest.cpp",
  "//sky/engine/platform/graphics/test/MockImageDecoder.h",
  "//sky/engine/platform/graphics/test/MockWebGraphicsContext3D.h",
  "//sky/engine/platform/image-decoders/gif/GIFImageDecoderTest.cpp",
  "//sky/engine/platform/image-decoders/jpeg/JPEGImageDecoderTest.cpp",
]

component("web") {
  output_name = "sky_web"

  deps = [
    "//sky/engine/core",
    "//sky/engine/platform",

    # FIXME: v8_inspector should not depend on core types and be separate
    # from both web and core.
    "//sky/engine/v8_inspector",
  ]

  configs += [
    "//sky/engine:config",
    "//sky/engine:inside_blink",
    "//sky/engine:non_test_config",
  ]

  sources = [
    "AssertMatchingEnums.cpp",
    "ChromeClientImpl.cpp",
    "ChromeClientImpl.h",
    "CompositionUnderlineBuilder.h",
    "CompositionUnderlineVectorBuilder.cpp",
    "CompositionUnderlineVectorBuilder.h",
    "EditorClientImpl.cpp",
    "EditorClientImpl.h",
    "FrameLoaderClientImpl.cpp",
    "FrameLoaderClientImpl.h",
    "SpellCheckerClientImpl.cpp",
    "SpellCheckerClientImpl.h",
    "WebCache.cpp",
    "WebCachedURLRequest.cpp",
    "WebDocument.cpp",
    "WebElement.cpp",
    "WebFontDescription.cpp",
    "WebFontImpl.cpp",
    "WebFontImpl.h",
    "WebFrame.cpp",
    "WebHitTestResult.cpp",
    "Sky.cpp",
    "WebLeakDetector.cpp",
    "WebLocalFrameImpl.cpp",
    "WebLocalFrameImpl.h",
    "WebNode.cpp",
    "WebRange.cpp",
    "WebRuntimeFeatures.cpp",
    "WebSettingsImpl.cpp",
    "WebSettingsImpl.h",
    "WebTextCheckingCompletionImpl.cpp",
    "WebTextCheckingCompletionImpl.h",
    "WebTextCheckingResult.cpp",
    "WebTextInputInfo.cpp",
    "WebTextRun.cpp",
    "WebViewImpl.cpp",
    "WebViewImpl.h",
    "linux/WebFontRendering.cpp",
  ]
}

test("sky_unittests") {
  deps = [
    "//base",
    "//base/test:test_support",
    "//base:i18n",
    "//sky/engine/testing/platform",
    "//sky/engine/wtf:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/zlib",
    "//url",
    "//v8",
    ":web",
  ]

  # TODO(abarth): This is a lie - this test is not embedded in an environment
  # that injects the system thunks, so system calls don't actually work. This
  # just tricks the linker into thinking that an implementation of these calls
  # will be injected at runtime so the link succeeds.
  deps += [ "//mojo/public/platform/native:system" ]

  sources = [
    "tests/RunAllTests.cpp",
  ]

  configs += [ "//sky/engine:config" ]

  if (!is_component_build) {
    deps += [ "//sky/engine/core" ]

    configs += [ "//sky/engine:inside_blink" ]

    sources += platform_web_unittest_files
  }
}
