17c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar//===-- sanitizer_symbolizer_test.cc --------------------------------------===//
27c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar//
37c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar//                     The LLVM Compiler Infrastructure
47c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar//
57c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// This file is distributed under the University of Illinois Open Source
67c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// License. See LICENSE.TXT for details.
77c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar//
87c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar//===----------------------------------------------------------------------===//
97c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar//
107c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar// Tests for sanitizer_symbolizer.h and sanitizer_symbolizer_internal.h
117c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar//
127c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar//===----------------------------------------------------------------------===//
137c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar
147c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar#include "sanitizer_common/sanitizer_allocator_internal.h"
157c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar#include "sanitizer_common/sanitizer_symbolizer_internal.h"
167c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar#include "gtest/gtest.h"
177c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar
187c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainarnamespace __sanitizer {
197c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar
207c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga NainarTEST(Symbolizer, ExtractToken) {
217c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  char *token;
227c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  const char *rest;
237c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar
247c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  rest = ExtractToken("a;b;c", ";", &token);
257c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  EXPECT_STREQ("a", token);
267c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  EXPECT_STREQ("b;c", rest);
277c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  InternalFree(token);
287c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar
297c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  rest = ExtractToken("aaa-bbb.ccc", ";.-*", &token);
307c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  EXPECT_STREQ("aaa", token);
317c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  EXPECT_STREQ("bbb.ccc", rest);
327c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  InternalFree(token);
337c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar}
347c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar
357c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga NainarTEST(Symbolizer, ExtractInt) {
367c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  int token;
377c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  const char *rest = ExtractInt("123,456;789", ";,", &token);
387c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  EXPECT_EQ(123, token);
397c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  EXPECT_STREQ("456;789", rest);
407c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar}
417c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar
427c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga NainarTEST(Symbolizer, ExtractUptr) {
437c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  uptr token;
447c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  const char *rest = ExtractUptr("123,456;789", ";,", &token);
457c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  EXPECT_EQ(123U, token);
467c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  EXPECT_STREQ("456;789", rest);
477c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar}
487c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar
497c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga NainarTEST(Symbolizer, ExtractTokenUpToDelimiter) {
507c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  char *token;
517c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  const char *rest =
527c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar      ExtractTokenUpToDelimiter("aaa-+-bbb-+-ccc", "-+-", &token);
537c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  EXPECT_STREQ("aaa", token);
547c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  EXPECT_STREQ("bbb-+-ccc", rest);
557c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  InternalFree(token);
567c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar}
577c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar
58c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar#if !SANITIZER_WINDOWS
59c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga NainarTEST(Symbolizer, DemangleSwiftAndCXX) {
60c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar  // Swift names are not demangled in default llvm build because Swift
61c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar  // runtime is not linked in.
62c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar  EXPECT_STREQ("_TtSd", DemangleSwiftAndCXX("_TtSd"));
63c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar  // Check that the rest demangles properly.
64c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar  EXPECT_STREQ("f1(char*, int)", DemangleSwiftAndCXX("_Z2f1Pci"));
65c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar  EXPECT_STREQ("foo", DemangleSwiftAndCXX("foo"));
66c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar  EXPECT_STREQ("", DemangleSwiftAndCXX(""));
67c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar}
68c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar#endif
69c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar
707c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar}  // namespace __sanitizer
71