1*40c261c4SJan Svoboda //===- unittests/Basic/SanitizersTest.cpp - Test Sanitizers ---------------===//
2*40c261c4SJan Svoboda //
3*40c261c4SJan Svoboda // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*40c261c4SJan Svoboda // See https://llvm.org/LICENSE.txt for license information.
5*40c261c4SJan Svoboda // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*40c261c4SJan Svoboda //
7*40c261c4SJan Svoboda //===----------------------------------------------------------------------===//
8*40c261c4SJan Svoboda
9*40c261c4SJan Svoboda #include "clang/Basic/Sanitizers.h"
10*40c261c4SJan Svoboda
11*40c261c4SJan Svoboda #include "gmock/gmock-matchers.h"
12*40c261c4SJan Svoboda #include "gtest/gtest.h"
13*40c261c4SJan Svoboda
14*40c261c4SJan Svoboda using namespace clang;
15*40c261c4SJan Svoboda
16*40c261c4SJan Svoboda using testing::Contains;
17*40c261c4SJan Svoboda using testing::Not;
18*40c261c4SJan Svoboda
TEST(SanitizersTest,serializeSanitizers)19*40c261c4SJan Svoboda TEST(SanitizersTest, serializeSanitizers) {
20*40c261c4SJan Svoboda SanitizerSet Set;
21*40c261c4SJan Svoboda Set.set(parseSanitizerValue("memory", false), true);
22*40c261c4SJan Svoboda Set.set(parseSanitizerValue("nullability-arg", false), true);
23*40c261c4SJan Svoboda
24*40c261c4SJan Svoboda SmallVector<StringRef, 4> Serialized;
25*40c261c4SJan Svoboda serializeSanitizerSet(Set, Serialized);
26*40c261c4SJan Svoboda
27*40c261c4SJan Svoboda ASSERT_EQ(Serialized.size(), 2u);
28*40c261c4SJan Svoboda ASSERT_THAT(Serialized, Contains("memory"));
29*40c261c4SJan Svoboda ASSERT_THAT(Serialized, Contains("nullability-arg"));
30*40c261c4SJan Svoboda }
31*40c261c4SJan Svoboda
TEST(SanitizersTest,serializeSanitizersIndividual)32*40c261c4SJan Svoboda TEST(SanitizersTest, serializeSanitizersIndividual) {
33*40c261c4SJan Svoboda SanitizerSet Set;
34*40c261c4SJan Svoboda Set.set(parseSanitizerValue("memory", false), true);
35*40c261c4SJan Svoboda Set.set(parseSanitizerValue("nullability-arg", false), true);
36*40c261c4SJan Svoboda Set.set(parseSanitizerValue("nullability-assign", false), true);
37*40c261c4SJan Svoboda Set.set(parseSanitizerValue("nullability-return", false), true);
38*40c261c4SJan Svoboda
39*40c261c4SJan Svoboda SmallVector<StringRef, 4> Serialized;
40*40c261c4SJan Svoboda serializeSanitizerSet(Set, Serialized);
41*40c261c4SJan Svoboda
42*40c261c4SJan Svoboda ASSERT_EQ(Serialized.size(), 4u);
43*40c261c4SJan Svoboda ASSERT_THAT(Serialized, Contains("memory"));
44*40c261c4SJan Svoboda ASSERT_THAT(Serialized, Contains("nullability-arg"));
45*40c261c4SJan Svoboda ASSERT_THAT(Serialized, Contains("nullability-assign"));
46*40c261c4SJan Svoboda ASSERT_THAT(Serialized, Contains("nullability-return"));
47*40c261c4SJan Svoboda // Individual sanitizers don't get squashed into a single group.
48*40c261c4SJan Svoboda ASSERT_THAT(Serialized, Not(Contains("nullability")));
49*40c261c4SJan Svoboda }
50