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

component("sql") {
  sources = [
    "connection.cc",
    "connection.h",
    "error_delegate_util.cc",
    "error_delegate_util.h",
    "init_status.h",
    "meta_table.cc",
    "meta_table.h",
    "recovery.cc",
    "recovery.h",
    "statement.cc",
    "statement.h",
    "transaction.cc",
    "transaction.h",
  ]

  defines = [ "SQL_IMPLEMENTATION" ]

  if (is_win) {
    cflags = [ "/wd4267" ]  # size_t to int.
  }

  deps = [
    "//base",
    "//third_party/sqlite",
    "//base/third_party/dynamic_annotations",
  ]
}

source_set("test_support") {
  sources = [
    "test/error_callback_support.cc",
    "test/error_callback_support.h",
    "test/scoped_error_ignorer.cc",
    "test/scoped_error_ignorer.h",
    "test/test_helpers.cc",
    "test/test_helpers.h",
  ]

  deps = [
    ":sql",
    "//base",
    "//testing/gtest",
  ]
}

test("sql_unittests") {
  sources = [
    "connection_unittest.cc",
    "meta_table_unittest.cc",
    "recovery_unittest.cc",
    "sqlite_features_unittest.cc",
    "statement_unittest.cc",
    "transaction_unittest.cc",
  ]

  if (is_win) {
    cflags = [ "/wd4267" ]  # size_t -> int
  }

  deps = [
    ":sql",
    ":test_support",
    "//base/allocator",
    "//base/test:run_all_unittests",
    "//testing/gtest",
    "//third_party/sqlite",
  ]

  # TODO(GYP)
  #['OS == "android"', {
  #  'dependencies': [
  #    '../testing/android/native_test.gyp:native_test_native_code',
  #  ],
  #}],
}

if (is_android) {
  #TODO(GYP)
  #'target_name': 'sql_unittests_apk',
  #'type': 'none',
  #'dependencies': [
  #  'sql_unittests',
  #],
  #'variables': {
  #  'test_suite_name': 'sql_unittests',
  #},
  #'includes': [ '../build/apk_test.gypi' ],
}
