// Copyright 2019 The Fuchsia 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 "src/developer/debug/shared/component_utils.h"

#include <gtest/gtest.h>

namespace debug {

namespace {

#define PACKAGE "some-package"
#define COMPONENT "some-component"

const char kAlmostUrl[] = "fuchsia-pkg://fuchsia.com/asfsad/meta/asda.cmx";
const char kActualUrl[] = "fuchsia-pkg://fuchsia.com/" PACKAGE "#meta/" COMPONENT ".cmx";

}  // namespace

TEST(ComponentUtils, ExtractComponentFromPackageUrl) {
  ComponentDescription desc;

  EXPECT_FALSE(ExtractComponentFromPackageUrl("asgssf", &desc));
  EXPECT_TRUE(desc.package_name.empty());
  EXPECT_TRUE(desc.component_name.empty());

  EXPECT_FALSE(ExtractComponentFromPackageUrl(kAlmostUrl, &desc));
  EXPECT_TRUE(desc.package_name.empty());
  EXPECT_TRUE(desc.component_name.empty());

  EXPECT_TRUE(ExtractComponentFromPackageUrl(kActualUrl, &desc));
  EXPECT_EQ(desc.package_name, PACKAGE);
  EXPECT_EQ(desc.component_name, COMPONENT);
}

}  // namespace debug
