1d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org// 2d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved. 3d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org// Use of this source code is governed by a BSD-style license that can be 4d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org// found in the LICENSE file. 5d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org// 6d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 7d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org#include "PreprocessorTest.h" 8d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org#include "Token.h" 9d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 10d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgclass IfTest : public PreprocessorTest 11d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 12d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org}; 13d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 14d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, If_0) 15d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 16d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "pass_1\n" 17d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#if 0\n" 18d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail\n" 19d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n" 20d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n"; 21d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "pass_1\n" 22d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 23d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 24d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 25d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n"; 26d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 27d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 28d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 29d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 30d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, If_1) 31d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 32d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "pass_1\n" 33d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#if 1\n" 34d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 35d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n" 36d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_3\n"; 37d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "pass_1\n" 38d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 39d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 40d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 41d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_3\n"; 42d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 43d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 44d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 45d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 46d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, If_0_Else) 47d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 48d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "pass_1\n" 49d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#if 0\n" 50d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail\n" 51d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 52d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 53d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n" 54d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_3\n"; 55d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "pass_1\n" 56d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 57d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 58d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 59d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 60d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 61d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_3\n"; 62d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 63d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 64d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 65d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 66d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, If_1_Else) 67d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 68d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "pass_1\n" 69d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#if 1\n" 70d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 71d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 72d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail\n" 73d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n" 74d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_3\n"; 75d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "pass_1\n" 76d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 77d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 78d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 79d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 80d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 81d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_3\n"; 82d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 83d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 84d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 85d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 86d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, If_0_Elif) 87d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 88d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "pass_1\n" 89d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#if 0\n" 90d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_1\n" 91d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#elif 0\n" 92d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_2\n" 93d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#elif 1\n" 94d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 95d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#elif 1\n" 96d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_3\n" 97d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 98d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_4\n" 99d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n" 100d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_3\n"; 101d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "pass_1\n" 102d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 103d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 104d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 105d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 106d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 107d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 108d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 109d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 110d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 111d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 112d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 113d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_3\n"; 114d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 115d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 116d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 117d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 118d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, If_1_Elif) 119d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 120d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "pass_1\n" 121d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#if 1\n" 122d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 123d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#elif 0\n" 124d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_1\n" 125d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#elif 1\n" 126d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_2\n" 127d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 128d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_4\n" 129d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n" 130d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_3\n"; 131d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "pass_1\n" 132d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 133d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 134d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 135d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 136d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 137d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 138d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 139d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 140d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 141d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_3\n"; 142d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 143d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 144d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 145d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 146d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, If_Elif_Else) 147d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 148d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "pass_1\n" 149d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#if 0\n" 150d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_1\n" 151d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#elif 0\n" 152d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_2\n" 153d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#elif 0\n" 154d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_3\n" 155d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 156d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 157d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n" 158d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_3\n"; 159d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "pass_1\n" 160d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 161d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 162d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 163d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 164d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 165d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 166d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 167d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 168d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 169d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_3\n"; 170d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 171d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 172d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 173d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 174d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, If_0_Nested) 175d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 176d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "pass_1\n" 177d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#if 0\n" 178d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_1\n" 179d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#if 1\n" 180d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_2\n" 181d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 182d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_3\n" 183d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n" 184d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 185d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 186d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n" 187d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_3\n"; 188d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "pass_1\n" 189d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 190d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 191d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 192d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 193d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 194d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 195d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 196d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 197d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 198d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 199d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_3\n"; 200d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 201d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 202d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 203d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 204d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, If_1_Nested) 205d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 206d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "pass_1\n" 207d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#if 1\n" 208d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 209d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#if 1\n" 210d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_3\n" 211d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 212d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_1\n" 213d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n" 214d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 215d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_2\n" 216d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n" 217d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_4\n"; 218d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "pass_1\n" 219d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 220d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 221d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 222d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_3\n" 223d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 224d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 225d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 226d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 227d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 228d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 229d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_4\n"; 230d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 231d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 232d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 233d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 234d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, OperatorPrecedence) 235d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 236d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#if 1 + 2 * 3 + - (26 % 17 - + 4 / 2)\n" 237d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_1\n" 238d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 239d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_1\n" 240d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 241d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "\n" 242d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 243d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 244d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_1\n" 245d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n"; 246d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 247d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 248d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 249d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 250d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, OperatorDefined) 251d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 252d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#if defined foo\n" 253d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_1\n" 254d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 255d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_1\n" 256d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n" 257d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#define foo\n" 258d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#if defined(foo)\n" 259d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 260d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 261d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_2\n" 262d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n" 263d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#undef foo\n" 264d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#if defined ( foo ) \n" 265d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_3\n" 266d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 267d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_3\n" 268d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 269d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "\n" 270d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 271d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 272d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_1\n" 273d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 274d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 275d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 276d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 277d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 278d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 279d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 280d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 281d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 282d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 283d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 284d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_3\n" 285d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n"; 286d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 287d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 288d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 289d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 290d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, OperatorEQ) 291d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 292d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#if 4 - 1 == 2 + 1\n" 293d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 294d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 295d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail\n" 296d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 297d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "\n" 298d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 299d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 300d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 301d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n"; 302d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 303d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 304d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 305d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 306d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, OperatorNE) 307d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 308d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#if 1 != 2\n" 309d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 310d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 311d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail\n" 312d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 313d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "\n" 314d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 315d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 316d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 317d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n"; 318d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 319d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 320d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 321d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 322d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, OperatorLess) 323d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 324d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#if 1 < 2\n" 325d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 326d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 327d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail\n" 328d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 329d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "\n" 330d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 331d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 332d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 333d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n"; 334d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 335d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 336d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 337d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 338d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, OperatorGreater) 339d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 340d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#if 2 > 1\n" 341d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 342d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 343d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail\n" 344d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 345d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "\n" 346d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 347d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 348d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 349d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n"; 350d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 351d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 352d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 353d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 354d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, OperatorLE) 355d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 356d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#if 1 <= 2\n" 357d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_1\n" 358d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 359d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_1\n" 360d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n" 361d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#if 2 <= 2\n" 362d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 363d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 364d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_2\n" 365d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 366d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "\n" 367d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_1\n" 368d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 369d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 370d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 371d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 372d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 373d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 374d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 375d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n"; 376d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 377d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 378d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 379d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 380d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, OperatorGE) 381d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 382d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#if 2 >= 1\n" 383d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_1\n" 384d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 385d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_1\n" 386d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n" 387d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#if 2 >= 2\n" 388d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 389d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 390d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_2\n" 391d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 392d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "\n" 393d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_1\n" 394d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 395d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 396d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 397d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 398d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 399d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 400d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 401d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n"; 402d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 403d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 404d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 405d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 406d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, OperatorBitwiseOR) 407d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 408d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#if (0xaaaaaaaa | 0x55555555) == 0xffffffff\n" 409d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 410d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 411d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail\n" 412d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 413d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "\n" 414d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 415d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 416d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 417d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n"; 418d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 419d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 420d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 421d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 422d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, OperatorBitwiseAND) 423d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 424d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#if (0xaaaaaaa & 0x5555555) == 0\n" 425d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 426d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 427d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail\n" 428d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 429d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "\n" 430d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 431d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 432d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 433d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n"; 434d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 435d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 436d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 437d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 438d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, OperatorBitwiseXOR) 439d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 440d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#if (0xaaaaaaa ^ 0x5555555) == 0xfffffff\n" 441d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 442d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 443d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail\n" 444d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 445d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "\n" 446d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 447d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 448d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 449d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n"; 450d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 451d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 452d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 453d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 454d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, OperatorBitwiseComplement) 455d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 456d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#if (~ 0xdeadbeef) == -3735928560\n" 457d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 458d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 459d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail\n" 460d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 461d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "\n" 462d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 463d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 464d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 465d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n"; 466d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 467d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 468d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 469d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 470d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, OperatorLeft) 471d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 472d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#if (1 << 12) == 4096\n" 473d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 474d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 475d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail\n" 476d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 477d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "\n" 478d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 479d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 480d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 481d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n"; 482d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 483d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 484d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 485d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 486d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, OperatorRight) 487d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 488d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#if (31762 >> 8) == 124\n" 489d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 490d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 491d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail\n" 492d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 493d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "\n" 494d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 495d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 496d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 497d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n"; 498d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 499d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 500d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 501d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 502d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, ExpressionWithMacros) 503d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 504d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#define one 1\n" 505d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#define two 2\n" 506d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#define three 3\n" 507d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#if one + two == three\n" 508d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 509d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 510d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail\n" 511d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 512d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "\n" 513d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 514d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 515d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 516d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 517d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 518d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 519d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n"; 520d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 521d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 522d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 523d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 524d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, JunkInsideExcludedBlockIgnored) 525d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 526d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#if 0\n" 527d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "foo !@#$%^&* .1bar\n" 528d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#foo\n" 529d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#if bar\n" 530d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail\n" 531d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n" 532d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 533d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 534d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 535d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "\n" 536d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 537d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 538d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 539d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 540d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 541d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 542d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 543d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n"; 544d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 545d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 546d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 547d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 548d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, Ifdef) 549d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 550d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#define foo\n" 551d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#ifdef foo\n" 552d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_1\n" 553d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 554d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_1\n" 555d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n" 556d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#undef foo\n" 557d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#ifdef foo\n" 558d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_2\n" 559d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 560d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 561d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 562d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "\n" 563d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 564d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_1\n" 565d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 566d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 567d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 568d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 569d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 570d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 571d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 572d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 573d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n"; 574d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 575d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 576d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 577d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 578d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, Ifndef) 579d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 580d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#define foo\n" 581d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#ifndef foo\n" 582d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_1\n" 583d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 584d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_1\n" 585d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n" 586d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#undef foo\n" 587d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#ifndef foo\n" 588d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 589d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 590d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail_2\n" 591d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 592d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "\n" 593d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 594d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 595d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 596d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_1\n" 597d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 598d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 599d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 600d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass_2\n" 601d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 602d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 603d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n"; 604d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 605d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 606d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 607d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 608d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, MissingExpression) 609d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 610d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#if\n" 611d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 612d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org ASSERT_TRUE(mPreprocessor.init(1, &str, 0)); 613d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 614d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org EXPECT_CALL(mDiagnostics, 615d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org print(pp::Diagnostics::INVALID_EXPRESSION, 616d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org pp::SourceLocation(0, 1), 617d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "syntax error")); 618d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 619d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org pp::Token token; 620d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org mPreprocessor.lex(&token); 621d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 622d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 623fadc20586b4108117214f87834403c185eb872a6alokp@chromium.orgTEST_F(IfTest, DivisionByZero) 624fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org{ 625fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org const char* str = "#if 1 / (3 - (1 + 2))\n" 626fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org "#endif\n"; 627fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org ASSERT_TRUE(mPreprocessor.init(1, &str, 0)); 628fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org 629fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org EXPECT_CALL(mDiagnostics, 630fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org print(pp::Diagnostics::DIVISION_BY_ZERO, 631fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org pp::SourceLocation(0, 1), "1 / 0")); 632fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org 633fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org pp::Token token; 634fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org mPreprocessor.lex(&token); 635fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org} 636fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org 637fadc20586b4108117214f87834403c185eb872a6alokp@chromium.orgTEST_F(IfTest, ModuloByZero) 638fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org{ 639fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org const char* str = "#if 1 % (3 - (1 + 2))\n" 640fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org "#endif\n"; 641fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org ASSERT_TRUE(mPreprocessor.init(1, &str, 0)); 642fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org 643fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org EXPECT_CALL(mDiagnostics, 644fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org print(pp::Diagnostics::DIVISION_BY_ZERO, 645fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org pp::SourceLocation(0, 1), "1 % 0")); 646fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org 647fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org pp::Token token; 648fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org mPreprocessor.lex(&token); 649fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org} 650fadc20586b4108117214f87834403c185eb872a6alokp@chromium.org 6512e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.orgTEST_F(IfTest, DecIntegerOverflow) 6522e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org{ 6532e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org const char* str = "#if 4294967296\n" 6542e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org "#endif\n"; 6552e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org ASSERT_TRUE(mPreprocessor.init(1, &str, 0)); 6562e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org 6572e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org EXPECT_CALL(mDiagnostics, 6582e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org print(pp::Diagnostics::INTEGER_OVERFLOW, 6592e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org pp::SourceLocation(0, 1), "4294967296")); 6602e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org 6612e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org pp::Token token; 6622e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org mPreprocessor.lex(&token); 6632e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org} 6642e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org 6652e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.orgTEST_F(IfTest, OctIntegerOverflow) 6662e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org{ 6672e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org const char* str = "#if 077777777777\n" 6682e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org "#endif\n"; 6692e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org ASSERT_TRUE(mPreprocessor.init(1, &str, 0)); 6702e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org 6712e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org EXPECT_CALL(mDiagnostics, 6722e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org print(pp::Diagnostics::INTEGER_OVERFLOW, 6732e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org pp::SourceLocation(0, 1), "077777777777")); 6742e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org 6752e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org pp::Token token; 6762e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org mPreprocessor.lex(&token); 6772e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org} 6782e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org 6792e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.orgTEST_F(IfTest, HexIntegerOverflow) 6802e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org{ 6812e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org const char* str = "#if 0xfffffffff\n" 6822e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org "#endif\n"; 6832e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org ASSERT_TRUE(mPreprocessor.init(1, &str, 0)); 6842e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org 6852e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org EXPECT_CALL(mDiagnostics, 6862e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org print(pp::Diagnostics::INTEGER_OVERFLOW, 6872e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org pp::SourceLocation(0, 1), "0xfffffffff")); 6882e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org 6892e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org pp::Token token; 6902e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org mPreprocessor.lex(&token); 6912e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org} 6922e81891c21bfb199bb53f903bf0967f07efb65d8alokp@chromium.org 693d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, UndefinedMacro) 694d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 695d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#if UNDEFINED\n" 696d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 697d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org ASSERT_TRUE(mPreprocessor.init(1, &str, 0)); 698d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 699d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org EXPECT_CALL(mDiagnostics, 700d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org print(pp::Diagnostics::INVALID_EXPRESSION, 701d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org pp::SourceLocation(0, 1), 702d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "syntax error")); 703d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org EXPECT_CALL(mDiagnostics, 704d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org print(pp::Diagnostics::CONDITIONAL_UNEXPECTED_TOKEN, 705d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org pp::SourceLocation(0, 1), 706d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "UNDEFINED")); 707d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 708d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org pp::Token token; 709d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org mPreprocessor.lex(&token); 710d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 711d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 712d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, InvalidExpressionIgnoredForExcludedElif) 713d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 714d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#if 1\n" 715d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 716d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#elif UNDEFINED\n" 717d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "fail\n" 718d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 719d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* expected = "\n" 720d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "pass\n" 721d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 722d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n" 723d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "\n"; 724d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 725d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org // No error or warning. 726d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org using testing::_; 727d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org EXPECT_CALL(mDiagnostics, print(_, _, _)).Times(0); 728d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 729d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org preprocess(str, expected); 730d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 731d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 732d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, ElseWithoutIf) 733d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 734d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#else\n"; 735d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org ASSERT_TRUE(mPreprocessor.init(1, &str, 0)); 736d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 737d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org EXPECT_CALL(mDiagnostics, 738d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org print(pp::Diagnostics::CONDITIONAL_ELSE_WITHOUT_IF, 739d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org pp::SourceLocation(0, 1), 740d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "else")); 741d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 742d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org pp::Token token; 743d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org mPreprocessor.lex(&token); 744d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 745d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 746d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, ElifWithoutIf) 747d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 748d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#elif 1\n"; 749d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org ASSERT_TRUE(mPreprocessor.init(1, &str, 0)); 750d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 751d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org EXPECT_CALL(mDiagnostics, 752d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org print(pp::Diagnostics::CONDITIONAL_ELIF_WITHOUT_IF, 753d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org pp::SourceLocation(0, 1), 754d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "elif")); 755d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 756d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org pp::Token token; 757d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org mPreprocessor.lex(&token); 758d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 759d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 760d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, EndifWithoutIf) 761d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 762d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#endif\n"; 763d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org ASSERT_TRUE(mPreprocessor.init(1, &str, 0)); 764d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 765d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org EXPECT_CALL(mDiagnostics, 766d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org print(pp::Diagnostics::CONDITIONAL_ENDIF_WITHOUT_IF, 767d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org pp::SourceLocation(0, 1), 768d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "endif")); 769d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 770d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org pp::Token token; 771d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org mPreprocessor.lex(&token); 772d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 773d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 774d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, ElseAfterElse) 775d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 776d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#if 1\n" 777d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 778d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 779d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 780d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org ASSERT_TRUE(mPreprocessor.init(1, &str, 0)); 781d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 782d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org EXPECT_CALL(mDiagnostics, 783d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org print(pp::Diagnostics::CONDITIONAL_ELSE_AFTER_ELSE, 784d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org pp::SourceLocation(0, 3), 785d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "else")); 786d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 787d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org pp::Token token; 788d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org mPreprocessor.lex(&token); 789d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 790d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 791d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, ElifAfterElse) 792d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 793d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#if 1\n" 794d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#else\n" 795d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#elif 0\n" 796d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "#endif\n"; 797d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org ASSERT_TRUE(mPreprocessor.init(1, &str, 0)); 798d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 799d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org EXPECT_CALL(mDiagnostics, 800d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org print(pp::Diagnostics::CONDITIONAL_ELIF_AFTER_ELSE, 801d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org pp::SourceLocation(0, 3), 802d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "elif")); 803d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 804d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org pp::Token token; 805d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org mPreprocessor.lex(&token); 806d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 807d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 808d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, UnterminatedIf) 809d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 810d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#if 1\n"; 811d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org ASSERT_TRUE(mPreprocessor.init(1, &str, 0)); 812d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 813d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org EXPECT_CALL(mDiagnostics, 814d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org print(pp::Diagnostics::CONDITIONAL_UNTERMINATED, 815d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org pp::SourceLocation(0, 1), 816d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "if")); 817d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 818d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org pp::Token token; 819d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org mPreprocessor.lex(&token); 820d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 821d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 822d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.orgTEST_F(IfTest, UnterminatedIfdef) 823d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org{ 824d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org const char* str = "#ifdef foo\n"; 825d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org ASSERT_TRUE(mPreprocessor.init(1, &str, 0)); 826d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 827d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org EXPECT_CALL(mDiagnostics, 828d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org print(pp::Diagnostics::CONDITIONAL_UNTERMINATED, 829d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org pp::SourceLocation(0, 1), 830d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org "ifdef")); 831d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 832d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org pp::Token token; 833d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org mPreprocessor.lex(&token); 834d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org} 835d39ec4c15d6e656e027d7ded7ffceaafa0608e89alokp@chromium.org 836