// Copyright 2020 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#if SB_API_VERSION < 16
#include "starboard/ui_navigation.h"
#else
#include "starboard/extension/ui_navigation.h"
#endif  // SB_API_VERSION
#include "testing/gtest/include/gtest/gtest.h"

namespace starboard {
namespace nplb {
namespace {

// This verifies that the UI navigation API is not implemented.
TEST(UiNavigationTest, GetInterface) {
#if SB_API_VERSION < 16
  SbUiNavInterface interface;
  EXPECT_FALSE(SbUiNavGetInterface(&interface));
#else
  const SbUiNavInterface* interface = static_cast<const SbUiNavInterface*>(
      SbSystemGetExtension(kCobaltExtensionUiNavigationName));
  EXPECT_FALSE(interface != nullptr);
#endif  //  SB_API_VERSION
}

}  // namespace.
}  // namespace nplb.
}  // namespace starboard.
