/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "gtest/gtest.h"
#include "mozilla/dom/quota/ClientStorageScope.h"

namespace mozilla::dom::quota {

TEST(DOM_Quota_ClientStorageScope, SanityChecks)
{
  // Sanity checks.

  {
    const auto clientStorageScope(
        ClientStorageScope::CreateFromClient(Client::IDB));
    ASSERT_TRUE(clientStorageScope.IsClient());
    ASSERT_EQ(clientStorageScope.GetClientType(), Client::IDB);
  }

  {
    const auto clientStorageScope(ClientStorageScope::CreateFromMetadata());
    ASSERT_TRUE(clientStorageScope.IsMetadata());
  }

  {
    const auto clientStorageScope(ClientStorageScope::CreateFromNull());
    ASSERT_TRUE(clientStorageScope.IsNull());
  }
}

TEST(DOM_Quota_ClientStorageScope, MatchesClient)
{
  // Test each client storage scope type against particular client types.

  {
    const auto clientStorageScope(
        ClientStorageScope::CreateFromClient(Client::IDB));

    ASSERT_TRUE(clientStorageScope.Matches(
        ClientStorageScope::CreateFromClient(Client::IDB)));
    ASSERT_FALSE(clientStorageScope.Matches(
        ClientStorageScope::CreateFromClient(Client::DOMCACHE)));
    ASSERT_FALSE(clientStorageScope.Matches(
        ClientStorageScope::CreateFromClient(Client::SDB)));
    ASSERT_FALSE(clientStorageScope.Matches(
        ClientStorageScope::CreateFromClient(Client::FILESYSTEM)));
    ASSERT_FALSE(clientStorageScope.Matches(
        ClientStorageScope::CreateFromClient(Client::LS)));
  }

  {
    const auto clientStorageScope(ClientStorageScope::CreateFromMetadata());

    ASSERT_FALSE(clientStorageScope.Matches(
        ClientStorageScope::CreateFromClient(Client::IDB)));
    ASSERT_FALSE(clientStorageScope.Matches(
        ClientStorageScope::CreateFromClient(Client::DOMCACHE)));
    ASSERT_FALSE(clientStorageScope.Matches(
        ClientStorageScope::CreateFromClient(Client::SDB)));
    ASSERT_FALSE(clientStorageScope.Matches(
        ClientStorageScope::CreateFromClient(Client::FILESYSTEM)));
    ASSERT_FALSE(clientStorageScope.Matches(
        ClientStorageScope::CreateFromClient(Client::LS)));
  }

  {
    const auto clientStorageScope(ClientStorageScope::CreateFromNull());

    ASSERT_TRUE(clientStorageScope.Matches(
        ClientStorageScope::CreateFromClient(Client::IDB)));
    ASSERT_TRUE(clientStorageScope.Matches(
        ClientStorageScope::CreateFromClient(Client::DOMCACHE)));
    ASSERT_TRUE(clientStorageScope.Matches(
        ClientStorageScope::CreateFromClient(Client::SDB)));
    ASSERT_TRUE(clientStorageScope.Matches(
        ClientStorageScope::CreateFromClient(Client::FILESYSTEM)));
    ASSERT_TRUE(clientStorageScope.Matches(
        ClientStorageScope::CreateFromClient(Client::LS)));
  }
}

TEST(DOM_Quota_ClientStorageScope, MatchesMetadata)
{
  // Test each client storage scope type against particular client types.

  {
    const auto clientStorageScope(
        ClientStorageScope::CreateFromClient(Client::IDB));

    ASSERT_FALSE(
        clientStorageScope.Matches(ClientStorageScope::CreateFromMetadata()));
  }

  {
    const auto clientStorageScope(ClientStorageScope::CreateFromMetadata());

    ASSERT_TRUE(
        clientStorageScope.Matches(ClientStorageScope::CreateFromMetadata()));
  }

  {
    const auto clientStorageScope(ClientStorageScope::CreateFromNull());

    ASSERT_TRUE(
        clientStorageScope.Matches(ClientStorageScope::CreateFromMetadata()));
  }
}

}  //  namespace mozilla::dom::quota
