xref: /llvm-project/clang-tools-extra/unittests/clang-tidy/ObjCModuleTest.cpp (revision 2946cd701067404b99c39fb29dc9c74bd7193eb3)
1abcd64ccSHaojian Wu //===---- ObjCModuleTest.cpp - clang-tidy ---------------------------------===//
2abcd64ccSHaojian Wu //
3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6abcd64ccSHaojian Wu //
7abcd64ccSHaojian Wu //===----------------------------------------------------------------------===//
8abcd64ccSHaojian Wu 
9abcd64ccSHaojian Wu #include "ClangTidyTest.h"
10abcd64ccSHaojian Wu #include "gtest/gtest.h"
11e010406eSHaojian Wu #include "objc/ForbiddenSubclassingCheck.h"
12e010406eSHaojian Wu 
13e010406eSHaojian Wu using namespace clang::tidy::objc;
14abcd64ccSHaojian Wu 
15abcd64ccSHaojian Wu namespace clang {
16abcd64ccSHaojian Wu namespace tidy {
17abcd64ccSHaojian Wu namespace test {
18abcd64ccSHaojian Wu 
TEST(ObjCForbiddenSubclassing,AllowedSubclass)19e010406eSHaojian Wu TEST(ObjCForbiddenSubclassing, AllowedSubclass) {
20e010406eSHaojian Wu   std::vector<ClangTidyError> Errors;
21e010406eSHaojian Wu   runCheckOnCode<ForbiddenSubclassingCheck>(
22e010406eSHaojian Wu       "@interface Foo\n"
23e010406eSHaojian Wu       "@end\n"
24e010406eSHaojian Wu       "@interface Bar : Foo\n"
25e010406eSHaojian Wu       "@end\n",
26e010406eSHaojian Wu       &Errors,
27e010406eSHaojian Wu       "input.m");
28e010406eSHaojian Wu   EXPECT_EQ(0ul, Errors.size());
29e010406eSHaojian Wu }
30e010406eSHaojian Wu 
TEST(ObjCForbiddenSubclassing,ForbiddenSubclass)31e010406eSHaojian Wu TEST(ObjCForbiddenSubclassing, ForbiddenSubclass) {
32e010406eSHaojian Wu   std::vector<ClangTidyError> Errors;
33e010406eSHaojian Wu   runCheckOnCode<ForbiddenSubclassingCheck>(
34e010406eSHaojian Wu       "@interface UIImagePickerController\n"
35e010406eSHaojian Wu       "@end\n"
36e010406eSHaojian Wu       "@interface Foo : UIImagePickerController\n"
37e010406eSHaojian Wu       "@end\n",
38e010406eSHaojian Wu       &Errors,
39e010406eSHaojian Wu       "input.m");
40e010406eSHaojian Wu   EXPECT_EQ(1ul, Errors.size());
41e010406eSHaojian Wu   EXPECT_EQ(
42e010406eSHaojian Wu       "Objective-C interface 'Foo' subclasses 'UIImagePickerController', which is not intended to be subclassed",
43e010406eSHaojian Wu       Errors[0].Message.Message);
44e010406eSHaojian Wu }
45abcd64ccSHaojian Wu 
46abcd64ccSHaojian Wu } // namespace test
47abcd64ccSHaojian Wu } // namespace tidy
48abcd64ccSHaojian Wu } // namespace clang
49