# 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",
    "test/paths.cc",
    "test/paths.h",
    "test/run_all_unittests.cc",
    "test/sql_test_suite.cc",
    "test/sql_test_suite.h",
    "transaction_unittest.cc",
  ]

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

  deps = [
    ":sql",
    ":test_support",
    "//base/allocator",
    "//base/test:test_support",
    "//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' ],
}
