// Copyright 2023 The Tint Authors.
//
// 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.

#include <string>

#include "gtest/gtest-spi.h"
#include "src/tint/ast/diagnostic_rule_name.h"
#include "src/tint/ast/test_helper.h"

namespace tint::ast {
namespace {

using DiagnosticRuleNameTest = TestHelper;

TEST_F(DiagnosticRuleNameTest, String) {
    EXPECT_EQ(DiagnosticRuleName("name")->String(), "name");
    EXPECT_EQ(DiagnosticRuleName("category", "name")->String(), "category.name");
}

TEST_F(DiagnosticRuleNameTest, Assert_NameNotTemplated) {
    EXPECT_FATAL_FAILURE(
        {
            ProgramBuilder b;
            b.create<ast::DiagnosticRuleName>(b.Ident("name", "a", "b", "c"));
        },
        "internal compiler error");
}

TEST_F(DiagnosticRuleNameTest, Assert_CategoryNotTemplated) {
    EXPECT_FATAL_FAILURE(
        {
            ProgramBuilder b;
            b.create<ast::DiagnosticRuleName>(b.Ident("name"), b.Ident("category", "a", "b", "c"));
        },
        "internal compiler error");
}

}  // namespace
}  // namespace tint::ast
