// Copyright 2024 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.

#include "quiche/quic/moqt/moqt_messages.h"

#include <optional>

#include "quiche/common/platform/api/quiche_test.h"

namespace moqt::test {
namespace {

TEST(MoqtMessagesTest, MoqtDatagramType) {
  for (bool payload : {false, true}) {
    for (bool extension : {false, true}) {
      for (bool end_of_group : {false, true}) {
        for (bool zero_object_id : {false, true}) {
          MoqtDatagramType type(payload, extension, end_of_group,
                                zero_object_id);
          EXPECT_EQ(type.has_status(),
                    !payload && (!end_of_group || !zero_object_id));
          EXPECT_EQ(type.has_extension(), extension);
          EXPECT_EQ(type.end_of_group(),
                    end_of_group && (payload || zero_object_id));
          EXPECT_EQ(type.has_object_id(),
                    !zero_object_id || (!payload && !end_of_group));
          // The constructor should always produce a valid value.
          std::optional<MoqtDatagramType> from_value =
              MoqtDatagramType::FromValue(type.value());
          EXPECT_TRUE(from_value.has_value() && type == *from_value);
        }
      }
    }
  }
}

}  // namespace
}  // namespace moqt::test
