// Copyright 2021 PDFium 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 "xfa/fxfa/parser/cxfa_timezoneprovider.h"

#include "testing/gtest/include/gtest/gtest.h"
#include "testing/scoped_set_tz.h"

TEST(CXFA_TimeZoneProviderTest, HourOffsets) {
  {
    ScopedSetTZ scoped_set_tz("UTC");
    EXPECT_EQ(0, CXFA_TimeZoneProvider().GetTimeZoneInMinutes());
  }
  {
    ScopedSetTZ scoped_set_tz("UTC+1");
    EXPECT_EQ(-60, CXFA_TimeZoneProvider().GetTimeZoneInMinutes());
  }
  {
    ScopedSetTZ scoped_set_tz("UTC-1");
    EXPECT_EQ(60, CXFA_TimeZoneProvider().GetTimeZoneInMinutes());
  }
  {
    ScopedSetTZ scoped_set_tz("UTC+14");
    EXPECT_EQ(-840, CXFA_TimeZoneProvider().GetTimeZoneInMinutes());
  }
  {
    ScopedSetTZ scoped_set_tz("UTC-14");
    EXPECT_EQ(840, CXFA_TimeZoneProvider().GetTimeZoneInMinutes());
  }
}

TEST(CXFA_TimeZoneProviderTest, HalfHourOffsets) {
  {
    ScopedSetTZ scoped_set_tz("UTC+0:30");
    EXPECT_EQ(-30, CXFA_TimeZoneProvider().GetTimeZoneInMinutes());
  }
  {
    ScopedSetTZ scoped_set_tz("UTC-0:30");
    EXPECT_EQ(30, CXFA_TimeZoneProvider().GetTimeZoneInMinutes());
  }
  {
    ScopedSetTZ scoped_set_tz("UTC+1:30");
    EXPECT_EQ(-90, CXFA_TimeZoneProvider().GetTimeZoneInMinutes());
  }
  {
    ScopedSetTZ scoped_set_tz("UTC-1:30");
    EXPECT_EQ(90, CXFA_TimeZoneProvider().GetTimeZoneInMinutes());
  }
  {
    ScopedSetTZ scoped_set_tz("UTC+9:30");
    EXPECT_EQ(-570, CXFA_TimeZoneProvider().GetTimeZoneInMinutes());
  }
  {
    ScopedSetTZ scoped_set_tz("UTC-9:30");
    EXPECT_EQ(570, CXFA_TimeZoneProvider().GetTimeZoneInMinutes());
  }
}
