Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(471)

Side by Side Diff: unittests/Bitcode/NaClObjDumpTest.cpp

Issue 939073008: Rebased PNaCl localmods in LLVM to 223109 (Closed)
Patch Set: undo localmod Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 //===- llvm/unittest/Bitcode/NaClObjDumpTest.cpp -------------------------===//
2 // Tests objdump stream for PNaCl bitcode.
3 //
4 // The LLVM Compiler Infrastructure
5 //
6 // This file is distributed under the University of Illinois Open Source
7 // License. See LICENSE.TXT for details.
8 //
9 //===----------------------------------------------------------------------===//
10
11 // Tests if the objdump stream for PNaCl bitcode works as expected.
12
13 #include "llvm/Bitcode/NaCl/NaClObjDumpStream.h"
14
15 #include "gtest/gtest.h"
16
17 #include <iostream>
18
19 using namespace llvm;
20 using namespace llvm::naclbitc;
21
22 namespace {
23
24 // Writes out the record, if non-null. Otherwise just writes comments
25 // and errors.
26 static inline void Write(ObjDumpStream &Stream, uint64_t Bit,
27 const NaClBitcodeRecordData *Record,
28 int32_t AbbrevIndex) {
29 if (Record)
30 Stream.Write(Bit, *Record, AbbrevIndex);
31 else
32 Stream.Flush();
33 }
34
35 // Runs some simple assembly examples against the given bitcode
36 // record, using an objdump stream.
37 static void RunAssemblyExamples(
38 ObjDumpStream &Stream, uint64_t Bit,
39 const NaClBitcodeRecordData *Record,
40 int32_t AbbrevIndex,
41 bool AddErrors) {
42
43 // First assume no assembly.
44 if (AddErrors)
45 Stream.Error(Bit) << "This is an error\n";
46 Write(Stream, Bit, Record, AbbrevIndex);
47 // Increment bit to new fictitious address, assuming Record takes 21 bits.
48 Bit += 21;
49
50 // Now a single line assembly.
51 if (AddErrors)
52 Stream.Error(Bit) << "Oops, an error!\n";
53 Stream.Assembly() << "One line assembly.";
54 Write(Stream, Bit, Record, AbbrevIndex);
55 // Increment bit to new fictitious address, assuming Record takes 17 bits.
56 Bit += 17;
57
58 // Now multiple line assembly.
59 if (AddErrors)
60 Stream.Error(Bit) << "The record looks bad\n";
61 Stream.Assembly() << "Two Line\nexample assembly.";
62 if (AddErrors)
63 Stream.Error(Bit) << "Actually, it looks really bad\n";
64 Write(Stream, Bit, Record, AbbrevIndex);
65 }
66
67 // Runs some simple assembly examples against the given bitcode record
68 // using an objdump stream. Adds a message describing the test
69 // and the record indent being used.
70 static std::string RunIndentedAssemblyWithAbbrevTest(
71 bool DumpRecords, bool DumpAssembly,
72 unsigned NumRecordIndents, uint64_t Bit,
73 const NaClBitcodeRecordData *Record, int32_t AbbrevIndex, bool AddErrors) {
74 std::string Buffer;
75 raw_string_ostream BufStream(Buffer);
76 ObjDumpStream DumpStream(BufStream, DumpRecords, DumpAssembly);
77 for (unsigned i = 0; i < NumRecordIndents; ++i) {
78 DumpStream.IncRecordIndent();
79 }
80 RunAssemblyExamples(DumpStream, Bit, Record, AbbrevIndex, AddErrors);
81 return BufStream.str();
82 }
83
84 // Runs some simple assembly examples against the given bitcode record
85 // using an objdump stream. Adds a message describing the test
86 // and the record indent being used. Assumes no abbreviation index
87 // is associated with the record.
88 static std::string RunIndentedAssemblyTest(
89 bool DumpRecords, bool DumpAssembly,
90 unsigned NumRecordIndents, uint64_t Bit,
91 const NaClBitcodeRecordData *Record, bool AddErrors) {
92 return
93 RunIndentedAssemblyWithAbbrevTest(
94 DumpRecords, DumpAssembly, NumRecordIndents, Bit, Record,
95 naclbitc::ABBREV_INDEX_NOT_SPECIFIED, AddErrors);
96 }
97
98 // Tests effects of objdump when there isn't a record to write.
99 TEST(NaClObjDumpTest, NoDumpRecords) {
100 EXPECT_EQ(
101 " | |One line assembly.\n"
102 " | |Two Line\n"
103 " | |example assembly.\n",
104 RunIndentedAssemblyTest(true, true, 0, 11, 0, false));
105
106 EXPECT_EQ(
107 "One line assembly.\n"
108 "Two Line\n"
109 "example assembly.\n",
110 RunIndentedAssemblyTest(false, true, 0, 91, 0, false));
111
112 EXPECT_EQ(
113 "",
114 RunIndentedAssemblyTest(true, false, 0, 37, 0, false));
115
116
117 EXPECT_EQ(
118 "",
119 RunIndentedAssemblyTest(false, false, 0, 64, 0, false));
120 }
121
122 // Tests simple cases where there is both a record and corresponding
123 // assembly code.
124 TEST(NaClObjDumpTest, SimpleRecords) {
125 NaClBitcodeRecordData Record;
126 Record.Code = 5;
127 Record.Values.push_back(10);
128 Record.Values.push_back(15);
129
130 EXPECT_EQ(
131 " 1:3|<5, 10, 15> |\n"
132 " 4:0|<5, 10, 15> |One line assembly.\n"
133 " 6:1|<5, 10, 15> |Two Line\n"
134 " | |example assembly.\n",
135 RunIndentedAssemblyTest(true, true, 0, 11, &Record, false));
136
137 EXPECT_EQ(
138 "One line assembly.\n"
139 "Two Line\n"
140 "example assembly.\n",
141 RunIndentedAssemblyTest(false, true, 0, 91, &Record, false));
142
143 EXPECT_EQ(
144 " 4:5|<5, 10, 15>\n"
145 " 7:2|<5, 10, 15>\n"
146 " 9:3|<5, 10, 15>\n",
147 RunIndentedAssemblyTest(true, false, 0, 37, &Record, false));
148
149 EXPECT_EQ(
150 "",
151 RunIndentedAssemblyTest(false, false, 0, 64, &Record, false));
152 }
153
154 // Test case where record is printed using two lines.
155 TEST(NaClObjDumpText, LongRecords) {
156 NaClBitcodeRecordData Record;
157 Record.Code = 5;
158 Record.Values.push_back(static_cast<uint64_t>(-1));
159 Record.Values.push_back(100);
160 Record.Values.push_back(15);
161 Record.Values.push_back(107056);
162
163 EXPECT_EQ(
164 " 127:1|<5, 18446744073709551615, |\n"
165 " | 100, 15, 107056> |\n"
166 " 129:6|<5, 18446744073709551615, |One line assembly.\n"
167 " | 100, 15, 107056> |\n"
168 " 131:7|<5, 18446744073709551615, |Two Line\n"
169 " | 100, 15, 107056> |example assembly.\n",
170 RunIndentedAssemblyTest(true, true, 0, 1017, &Record, false));
171
172 EXPECT_EQ(
173 "One line assembly.\n"
174 "Two Line\n"
175 "example assembly.\n",
176 RunIndentedAssemblyTest(false, true, 0, 91, &Record, false));
177
178 EXPECT_EQ(
179 " 47073:6|<5, 18446744073709551615, 100, 15, 107056>\n"
180 " 47076:3|<5, 18446744073709551615, 100, 15, 107056>\n"
181 " 47078:4|<5, 18446744073709551615, 100, 15, 107056>\n",
182 RunIndentedAssemblyTest(true, false, 0, 376590, &Record, false));
183
184 EXPECT_EQ(
185 "",
186 RunIndentedAssemblyTest(false, false, 0, 64564, &Record, false));
187 }
188
189 // Test case where comma hits boundary.
190 TEST(NaClObjDumpText, CommaBoundaryRecords) {
191 NaClBitcodeRecordData Record;
192 Record.Code = 5;
193 Record.Values.push_back(static_cast<uint64_t>(-1));
194 Record.Values.push_back(10);
195 Record.Values.push_back(15);
196 Record.Values.push_back(107056);
197
198 EXPECT_EQ(
199 " 127:1|<5, 18446744073709551615, 10,|\n"
200 " | 15, 107056> |\n"
201 " 129:6|<5, 18446744073709551615, 10,|One line assembly.\n"
202 " | 15, 107056> |\n"
203 " 131:7|<5, 18446744073709551615, 10,|Two Line\n"
204 " | 15, 107056> |example assembly.\n",
205 RunIndentedAssemblyTest(true, true, 0, 1017, &Record, false));
206
207 EXPECT_EQ(
208 "One line assembly.\n"
209 "Two Line\n"
210 "example assembly.\n",
211 RunIndentedAssemblyTest(false, true, 0, 91, &Record, false));
212
213 EXPECT_EQ(
214 " 47073:6|<5, 18446744073709551615, 10, 15, 107056>\n"
215 " 47076:3|<5, 18446744073709551615, 10, 15, 107056>\n"
216 " 47078:4|<5, 18446744073709551615, 10, 15, 107056>\n",
217 RunIndentedAssemblyTest(true, false, 0, 376590, &Record, false));
218
219 EXPECT_EQ(
220 "",
221 RunIndentedAssemblyTest(false, false, 0, 64564, &Record, false));
222 }
223
224 // Test case where comma wraps to next line.
225 TEST(NaClObjDumpText, CommaWrapRecords) {
226 NaClBitcodeRecordData Record;
227 Record.Code = 5;
228 Record.Values.push_back(static_cast<uint64_t>(-1));
229 Record.Values.push_back(100);
230 Record.Values.push_back(15);
231 Record.Values.push_back(107056);
232
233 EXPECT_EQ(
234 " 127:1|<5, 18446744073709551615, |\n"
235 " | 100, 15, 107056> |\n"
236 " 129:6|<5, 18446744073709551615, |One line assembly.\n"
237 " | 100, 15, 107056> |\n"
238 " 131:7|<5, 18446744073709551615, |Two Line\n"
239 " | 100, 15, 107056> |example assembly.\n",
240 RunIndentedAssemblyTest(true, true, 0, 1017, &Record, false));
241
242 EXPECT_EQ(
243 "One line assembly.\n"
244 "Two Line\n"
245 "example assembly.\n",
246 RunIndentedAssemblyTest(false, true, 0, 91, &Record, false));
247
248 EXPECT_EQ(
249 " 47073:6|<5, 18446744073709551615, 100, 15, 107056>\n"
250 " 47076:3|<5, 18446744073709551615, 100, 15, 107056>\n"
251 " 47078:4|<5, 18446744073709551615, 100, 15, 107056>\n",
252 RunIndentedAssemblyTest(true, false, 0, 376590, &Record, false));
253
254 EXPECT_EQ(
255 "",
256 RunIndentedAssemblyTest(false, false, 0, 64564, &Record, false));
257 }
258
259 // Test case where record is printed using more than two lines.
260 TEST(NaClObjDumpText, VeryLongRecords) {
261 NaClBitcodeRecordData Record;
262 Record.Code = 5;
263 Record.Values.push_back(static_cast<uint64_t>(-1));
264 Record.Values.push_back(100);
265 Record.Values.push_back(15);
266 Record.Values.push_back(107056);
267 Record.Values.push_back(static_cast<uint64_t>(-5065));
268 Record.Values.push_back(101958788);
269
270 EXPECT_EQ(
271 " 127:1|<5, 18446744073709551615, |\n"
272 " | 100, 15, 107056, |\n"
273 " | 18446744073709546551, |\n"
274 " | 101958788> |\n"
275 " 129:6|<5, 18446744073709551615, |One line assembly.\n"
276 " | 100, 15, 107056, |\n"
277 " | 18446744073709546551, |\n"
278 " | 101958788> |\n"
279 " 131:7|<5, 18446744073709551615, |Two Line\n"
280 " | 100, 15, 107056, |example assembly.\n"
281 " | 18446744073709546551, |\n"
282 " | 101958788> |\n",
283 RunIndentedAssemblyTest(true, true, 0, 1017, &Record, false));
284
285 EXPECT_EQ(
286 "One line assembly.\n"
287 "Two Line\n"
288 "example assembly.\n",
289 RunIndentedAssemblyTest(false, true, 0, 91, &Record, false));
290
291 EXPECT_EQ(
292 " 47073:6|<5, 18446744073709551615, 100, 15, 107056, 18446744073709546551, \n"
293 " | 101958788>\n"
294 " 47076:3|<5, 18446744073709551615, 100, 15, 107056, 18446744073709546551, \n"
295 " | 101958788>\n"
296 " 47078:4|<5, 18446744073709551615, 100, 15, 107056, 18446744073709546551, \n"
297 " | 101958788>\n",
298 RunIndentedAssemblyTest(true, false, 0, 376590, &Record, false));
299
300 EXPECT_EQ(
301 "",
302 RunIndentedAssemblyTest(false, false, 0, 64564, &Record, false));
303 }
304
305
306 // Tests effects of objdump when there isn't a record to write, but errors occur .
307 TEST(NaClObjDumpTest, ErrorsErrorsNoDumpRecords) {
308
309 EXPECT_EQ(
310 "Error(1:3): This is an error\n"
311 " | |One line assembly.\n"
312 "Error(4:0): Oops, an error!\n"
313 " | |Two Line\n"
314 " | |example assembly.\n"
315 "Error(6:1): The record looks bad\n"
316 "Error(6:1): Actually, it looks really bad\n",
317 RunIndentedAssemblyTest(true, true, 0, 11, 0, true));
318
319 EXPECT_EQ(
320 "Error(11:3): This is an error\n"
321 "One line assembly.\n"
322 "Error(14:0): Oops, an error!\n"
323 "Two Line\n"
324 "example assembly.\n"
325 "Error(16:1): The record looks bad\n"
326 "Error(16:1): Actually, it looks really bad\n",
327 RunIndentedAssemblyTest(false, true, 0, 91, 0, true));
328
329 EXPECT_EQ(
330 "Error(4:5): This is an error\n"
331 "Error(7:2): Oops, an error!\n"
332 "Error(9:3): The record looks bad\n"
333 "Error(9:3): Actually, it looks really bad\n",
334 RunIndentedAssemblyTest(true, false, 0, 37, 0, true));
335
336
337 EXPECT_EQ(
338 "Error(8:0): This is an error\n"
339 "Error(10:5): Oops, an error!\n"
340 "Error(12:6): The record looks bad\n"
341 "Error(12:6): Actually, it looks really bad\n",
342 RunIndentedAssemblyTest(false, false, 0, 64, 0, true));
343 }
344
345 // Test case where record is printed using two lines, but errors
346 // occur.
347 TEST(NaClObjDumpText, ErrorsLongRecords) {
348 NaClBitcodeRecordData Record;
349 Record.Code = 5;
350 Record.Values.push_back(static_cast<uint64_t>(-1));
351 Record.Values.push_back(100);
352 Record.Values.push_back(15);
353 Record.Values.push_back(107056);
354
355 EXPECT_EQ(
356 " 127:1|<5, 18446744073709551615, |\n"
357 " | 100, 15, 107056> |\n"
358 "Error(127:1): This is an error\n"
359 " 129:6|<5, 18446744073709551615, |One line assembly.\n"
360 " | 100, 15, 107056> |\n"
361 "Error(129:6): Oops, an error!\n"
362 " 131:7|<5, 18446744073709551615, |Two Line\n"
363 " | 100, 15, 107056> |example assembly.\n"
364 "Error(131:7): The record looks bad\n"
365 "Error(131:7): Actually, it looks really bad\n",
366 RunIndentedAssemblyTest(true, true, 0, 1017, &Record, true));
367
368 EXPECT_EQ(
369 "Error(11:3): This is an error\n"
370 "One line assembly.\n"
371 "Error(14:0): Oops, an error!\n"
372 "Two Line\n"
373 "example assembly.\n"
374 "Error(16:1): The record looks bad\n"
375 "Error(16:1): Actually, it looks really bad\n",
376 RunIndentedAssemblyTest(false, true, 0, 91, &Record, true));
377
378 EXPECT_EQ(
379 " 47073:6|<5, 18446744073709551615, 100, 15, 107056>\n"
380 "Error(47073:6): This is an error\n"
381 " 47076:3|<5, 18446744073709551615, 100, 15, 107056>\n"
382 "Error(47076:3): Oops, an error!\n"
383 " 47078:4|<5, 18446744073709551615, 100, 15, 107056>\n"
384 "Error(47078:4): The record looks bad\n"
385 "Error(47078:4): Actually, it looks really bad\n",
386 RunIndentedAssemblyTest(true, false, 0, 376590, &Record, true));
387
388 EXPECT_EQ(
389 "Error(8070:4): This is an error\n"
390 "Error(8073:1): Oops, an error!\n"
391 "Error(8075:2): The record looks bad\n"
392 "Error(8075:2): Actually, it looks really bad\n",
393 RunIndentedAssemblyTest(false, false, 0, 64564, &Record, true));
394
395 }
396
397 // Test case where record is printed using more than two lines, but
398 // errors occur.
399 TEST(NaClObjDumpText, ErrorsVeryLongRecords) {
400 NaClBitcodeRecordData Record;
401 Record.Code = 5;
402 Record.Values.push_back(static_cast<uint64_t>(-1));
403 Record.Values.push_back(100);
404 Record.Values.push_back(15);
405 Record.Values.push_back(107056);
406 Record.Values.push_back(static_cast<uint64_t>(-5065));
407 Record.Values.push_back(101958788);
408
409 EXPECT_EQ(
410 " 127:1|<5, 18446744073709551615, |\n"
411 " | 100, 15, 107056, |\n"
412 " | 18446744073709546551, |\n"
413 " | 101958788> |\n"
414 "Error(127:1): This is an error\n"
415 " 129:6|<5, 18446744073709551615, |One line assembly.\n"
416 " | 100, 15, 107056, |\n"
417 " | 18446744073709546551, |\n"
418 " | 101958788> |\n"
419 "Error(129:6): Oops, an error!\n"
420 " 131:7|<5, 18446744073709551615, |Two Line\n"
421 " | 100, 15, 107056, |example assembly.\n"
422 " | 18446744073709546551, |\n"
423 " | 101958788> |\n"
424 "Error(131:7): The record looks bad\n"
425 "Error(131:7): Actually, it looks really bad\n",
426 RunIndentedAssemblyTest(true, true, 0, 1017, &Record, true));
427
428 EXPECT_EQ(
429 "Error(11:3): This is an error\n"
430 "One line assembly.\n"
431 "Error(14:0): Oops, an error!\n"
432 "Two Line\n"
433 "example assembly.\n"
434 "Error(16:1): The record looks bad\n"
435 "Error(16:1): Actually, it looks really bad\n",
436 RunIndentedAssemblyTest(false, true, 0, 91, &Record, true));
437
438 EXPECT_EQ(
439 " 47073:6|<5, 18446744073709551615, 100, 15, 107056, 18446744073709546551, \n"
440 " | 101958788>\n"
441 "Error(47073:6): This is an error\n"
442 " 47076:3|<5, 18446744073709551615, 100, 15, 107056, 18446744073709546551, \n"
443 " | 101958788>\n"
444 "Error(47076:3): Oops, an error!\n"
445 " 47078:4|<5, 18446744073709551615, 100, 15, 107056, 18446744073709546551, \n"
446 " | 101958788>\n"
447 "Error(47078:4): The record looks bad\n"
448 "Error(47078:4): Actually, it looks really bad\n",
449 RunIndentedAssemblyTest(true, false, 0, 376590, &Record, true));
450
451 EXPECT_EQ(
452 "Error(8070:4): This is an error\n"
453 "Error(8073:1): Oops, an error!\n"
454 "Error(8075:2): The record looks bad\n"
455 "Error(8075:2): Actually, it looks really bad\n",
456 RunIndentedAssemblyTest(false, false, 0, 64564, &Record, true));
457 }
458
459 // Tests effects of objdump when there isn't a record to write, and we indent.
460 TEST(NaClObjDumpTest, NoDumpIndentRecords) {
461
462 EXPECT_EQ(
463 " | |One line assembly.\n"
464 " | |Two Line\n"
465 " | |example assembly.\n",
466 RunIndentedAssemblyTest(true, true, 1, 11, 0, false));
467
468 EXPECT_EQ(
469 " | |One line assembly.\n"
470 " | |Two Line\n"
471 " | |example assembly.\n",
472 RunIndentedAssemblyTest(true, true, 2, 11, 0, false));
473
474 EXPECT_EQ(
475 "One line assembly.\n"
476 "Two Line\n"
477 "example assembly.\n",
478 RunIndentedAssemblyTest(false, true, 1, 91, 0, false));
479
480 EXPECT_EQ(
481 "One line assembly.\n"
482 "Two Line\n"
483 "example assembly.\n",
484 RunIndentedAssemblyTest(false, true, 2, 91, 0, false));
485
486 EXPECT_EQ(
487 "",
488 RunIndentedAssemblyTest(true, false, 1, 37, 0, false));
489
490 EXPECT_EQ(
491 "",
492 RunIndentedAssemblyTest(true, false, 2, 37, 0, false));
493
494 EXPECT_EQ(
495 "",
496 RunIndentedAssemblyTest(false, false, 1, 64, 0, false));
497
498 EXPECT_EQ(
499 "",
500 RunIndentedAssemblyTest(false, false, 2, 64, 0, false));
501 }
502
503 // Tests simple cases where there is both a record and corresponding
504 // assembly code, and the records are indented.
505 TEST(NaClObjDumpTest, SimpleIndentRecords) {
506 NaClBitcodeRecordData Record;
507 Record.Code = 5;
508 Record.Values.push_back(10);
509 Record.Values.push_back(15);
510
511 EXPECT_EQ(
512 " 1:3| <5, 10, 15> |\n"
513 " 4:0| <5, 10, 15> |One line assembly.\n"
514 " 6:1| <5, 10, 15> |Two Line\n"
515 " | |example assembly.\n",
516 RunIndentedAssemblyTest(true, true, 1, 11, &Record, false));
517
518 EXPECT_EQ(
519 " 1:3| <5, 10, 15> |\n"
520 " 4:0| <5, 10, 15> |One line assembly.\n"
521 " 6:1| <5, 10, 15> |Two Line\n"
522 " | |example assembly.\n",
523 RunIndentedAssemblyTest(true, true, 2, 11, &Record, false));
524
525 EXPECT_EQ(
526 "One line assembly.\n"
527 "Two Line\n"
528 "example assembly.\n",
529 RunIndentedAssemblyTest(false, true, 1, 91, &Record, false));
530
531 EXPECT_EQ(
532 "One line assembly.\n"
533 "Two Line\n"
534 "example assembly.\n",
535 RunIndentedAssemblyTest(false, true, 2, 91, &Record, false));
536
537 EXPECT_EQ(
538 " 4:5| <5, 10, 15>\n"
539 " 7:2| <5, 10, 15>\n"
540 " 9:3| <5, 10, 15>\n",
541 RunIndentedAssemblyTest(true, false, 1, 37, &Record, false));
542
543 EXPECT_EQ(
544 " 4:5| <5, 10, 15>\n"
545 " 7:2| <5, 10, 15>\n"
546 " 9:3| <5, 10, 15>\n",
547 RunIndentedAssemblyTest(true, false, 2, 37, &Record, false));
548
549 EXPECT_EQ(
550 "",
551 RunIndentedAssemblyTest(false, false, 1, 64, &Record, false));
552
553 EXPECT_EQ(
554 "",
555 RunIndentedAssemblyTest(false, false, 2, 64, &Record, false));
556
557 }
558
559 // Test case where record is printed using more than two lines.
560 TEST(NaClObjDumpText, VeryLongIndentRecords) {
561 NaClBitcodeRecordData Record;
562 Record.Code = 5;
563 Record.Values.push_back(static_cast<uint64_t>(-1));
564 Record.Values.push_back(100);
565 Record.Values.push_back(15);
566 Record.Values.push_back(107056);
567 Record.Values.push_back(static_cast<uint64_t>(-5065));
568 Record.Values.push_back(101958788);
569
570 EXPECT_EQ(
571 " 127:1| <5, 18446744073709551615, |\n"
572 " | 100, 15, 107056, |\n"
573 " | 18446744073709546551, |\n"
574 " | 101958788> |\n"
575 " 129:6| <5, 18446744073709551615, |One line assembly.\n"
576 " | 100, 15, 107056, |\n"
577 " | 18446744073709546551, |\n"
578 " | 101958788> |\n"
579 " 131:7| <5, 18446744073709551615, |Two Line\n"
580 " | 100, 15, 107056, |example assembly.\n"
581 " | 18446744073709546551, |\n"
582 " | 101958788> |\n",
583 RunIndentedAssemblyTest(true, true, 1, 1017, &Record, false));
584
585 EXPECT_EQ(
586 " 127:1| <5, |\n"
587 " | 18446744073709551615, |\n"
588 " | 100, 15, 107056, |\n"
589 " | 18446744073709546551, |\n"
590 " | 101958788> |\n"
591 " 129:6| <5, |One line assembly.\n"
592 " | 18446744073709551615, |\n"
593 " | 100, 15, 107056, |\n"
594 " | 18446744073709546551, |\n"
595 " | 101958788> |\n"
596 " 131:7| <5, |Two Line\n"
597 " | 18446744073709551615, |example assembly.\n"
598 " | 100, 15, 107056, |\n"
599 " | 18446744073709546551, |\n"
600 " | 101958788> |\n",
601 RunIndentedAssemblyTest(true, true, 3, 1017, &Record, false));
602
603 EXPECT_EQ(
604 "One line assembly.\n"
605 "Two Line\n"
606 "example assembly.\n",
607 RunIndentedAssemblyTest(false, true, 1, 91, &Record, false));
608
609 EXPECT_EQ(
610 "One line assembly.\n"
611 "Two Line\n"
612 "example assembly.\n",
613 RunIndentedAssemblyTest(false, true, 2, 91, &Record, false));
614
615 EXPECT_EQ(
616 " 47073:6| <5, 18446744073709551615, 100, 15, 107056, 18446744073709546551, \ n"
617 " | 101958788>\n"
618 " 47076:3| <5, 18446744073709551615, 100, 15, 107056, 18446744073709546551, \ n"
619 " | 101958788>\n"
620 " 47078:4| <5, 18446744073709551615, 100, 15, 107056, 18446744073709546551, \ n"
621 " | 101958788>\n",
622 RunIndentedAssemblyTest(true, false, 1, 376590, &Record, false));
623
624
625 EXPECT_EQ(
626 " 47073:6| <5, 18446744073709551615, 100, 15, 107056, \n"
627 " | 18446744073709546551, 101958788>\n"
628 " 47076:3| <5, 18446744073709551615, 100, 15, 107056, \n"
629 " | 18446744073709546551, 101958788>\n"
630 " 47078:4| <5, 18446744073709551615, 100, 15, 107056, \n"
631 " | 18446744073709546551, 101958788>\n",
632 RunIndentedAssemblyTest(true, false, 5, 376590, &Record, false));
633
634 EXPECT_EQ(
635 "",
636 RunIndentedAssemblyTest(false, false, 1, 64564, &Record, false));
637
638 EXPECT_EQ(
639 "",
640 RunIndentedAssemblyTest(false, false, 2, 64564, &Record, false));
641 }
642
643 // Tests that Clustering doesn't effect (intraline) indenting.
644 TEST(NaClObjDumpTest, ClusterIndentInteraction) {
645 std::string Buffer;
646 raw_string_ostream BufStream(Buffer);
647 ObjDumpStream Stream(BufStream, true, true);
648
649 TextFormatter Formatter(Stream.Assembly(), 40, " ");
650 TokenTextDirective Comma(&Formatter, ",");
651 SpaceTextDirective Space(&Formatter);
652 OpenTextDirective OpenParen(&Formatter, "(");
653 CloseTextDirective CloseParen(&Formatter, ")");
654 StartClusteringDirective StartCluster(&Formatter);
655 FinishClusteringDirective FinishCluster(&Formatter);
656 EndlineTextDirective Endline(&Formatter);
657
658 Formatter.Tokens() << "begin" << Space;
659 // Generates text on single line, setting indent at "(".
660 Formatter.Tokens()
661 << StartCluster << "SomeReasonablylongText" << OpenParen << FinishCluster;
662 // Generates a long cluster that should move to the next line.
663 Formatter.Tokens()
664 << StartCluster << "ThisIsBoring" << Space
665 << "VeryBoring" << Space << "longggggggggggggggggg"
666 << Space << "Example" << Comma << FinishCluster;
667 Formatter.Tokens() << CloseParen << Comma << Endline;
668 Stream.Flush();
669 EXPECT_EQ(
670 " | |begin SomeReasonablylongText(\n"
671 " | | ThisIsBoring \n"
672 " | | VeryBoring \n"
673 " | | longgggggggggggggg ggg\n"
674 " | | Example,),\n",
675 BufStream.str());
676 }
677
678 // Tests the insertion of an abbreviation index.
679 TEST(NaClObjDumpTest, UseOfAbbrevationIndex) {
680 NaClBitcodeRecordData Record;
681 Record.Code = 5;
682 Record.Values.push_back(static_cast<uint64_t>(-1));
683 Record.Values.push_back(100);
684 Record.Values.push_back(15);
685 Record.Values.push_back(107056);
686 Record.Values.push_back(static_cast<uint64_t>(-5065));
687 Record.Values.push_back(101958788);
688
689 EXPECT_EQ(
690 " 127:1|3: <5, 18446744073709551615, |\n"
691 " | 100, 15, 107056, |\n"
692 " | 18446744073709546551, |\n"
693 " | 101958788> |\n"
694 " 129:6|3: <5, 18446744073709551615, |One line assembly.\n"
695 " | 100, 15, 107056, |\n"
696 " | 18446744073709546551, |\n"
697 " | 101958788> |\n"
698 " 131:7|3: <5, 18446744073709551615, |Two Line\n"
699 " | 100, 15, 107056, |example assembly.\n"
700 " | 18446744073709546551, |\n"
701 " | 101958788> |\n",
702 RunIndentedAssemblyWithAbbrevTest(true, true, 0, 1017, &Record,
703 naclbitc::UNABBREV_RECORD, false));
704
705 EXPECT_EQ(
706 " 127:1| 3: <5, |\n"
707 " | 18446744073709551615, |\n"
708 " | 100, 15, 107056, |\n"
709 " | 18446744073709546551, |\n"
710 " | 101958788> |\n"
711 " 129:6| 3: <5, |One line assembly.\n"
712 " | 18446744073709551615, |\n"
713 " | 100, 15, 107056, |\n"
714 " | 18446744073709546551, |\n"
715 " | 101958788> |\n"
716 " 131:7| 3: <5, |Two Line\n"
717 " | 18446744073709551615, |example assembly.\n"
718 " | 100, 15, 107056, |\n"
719 " | 18446744073709546551, |\n"
720 " | 101958788> |\n",
721 RunIndentedAssemblyWithAbbrevTest(true, true, 1, 1017, &Record,
722 naclbitc::UNABBREV_RECORD, false));
723
724 EXPECT_EQ(
725 " 127:1| 3: <5, |\n"
726 " | 18446744073709551615,|\n"
727 " | 100, 15, 107056, |\n"
728 " | 18446744073709546551,|\n"
729 " | 101958788> |\n"
730 " 129:6| 3: <5, |One line assembly.\n"
731 " | 18446744073709551615,|\n"
732 " | 100, 15, 107056, |\n"
733 " | 18446744073709546551,|\n"
734 " | 101958788> |\n"
735 " 131:7| 3: <5, |Two Line\n"
736 " | 18446744073709551615,|example assembly.\n"
737 " | 100, 15, 107056, |\n"
738 " | 18446744073709546551,|\n"
739 " | 101958788> |\n",
740 RunIndentedAssemblyWithAbbrevTest(true, true, 3, 1017, &Record,
741 naclbitc::UNABBREV_RECORD, false));
742
743 EXPECT_EQ(
744 "One line assembly.\n"
745 "Two Line\n"
746 "example assembly.\n",
747 RunIndentedAssemblyWithAbbrevTest(false, true, 1, 91, &Record,
748 naclbitc::UNABBREV_RECORD, false));
749
750 EXPECT_EQ(
751 "One line assembly.\n"
752 "Two Line\n"
753 "example assembly.\n",
754 RunIndentedAssemblyWithAbbrevTest(false, true, 2, 91, &Record,
755 naclbitc::UNABBREV_RECORD, false));
756
757 EXPECT_EQ(
758 " 47073:6| 3: <5, 18446744073709551615, 100, 15, 107056, 18446744073709546551 ,\n"
759 " | 101958788>\n"
760 " 47076:3| 3: <5, 18446744073709551615, 100, 15, 107056, 18446744073709546551 ,\n"
761 " | 101958788>\n"
762 " 47078:4| 3: <5, 18446744073709551615, 100, 15, 107056, 18446744073709546551 ,\n"
763 " | 101958788>\n",
764 RunIndentedAssemblyWithAbbrevTest(true, false, 1, 376590, &Record,
765 naclbitc::UNABBREV_RECORD, false));
766
767
768 EXPECT_EQ(
769 " 47073:6| 3: <5, 18446744073709551615, 100, 15, 107056, \n"
770 " | 18446744073709546551, 101958788>\n"
771 " 47076:3| 3: <5, 18446744073709551615, 100, 15, 107056, \n"
772 " | 18446744073709546551, 101958788>\n"
773 " 47078:4| 3: <5, 18446744073709551615, 100, 15, 107056, \n"
774 " | 18446744073709546551, 101958788>\n",
775 RunIndentedAssemblyWithAbbrevTest(true, false, 5, 376590, &Record,
776 naclbitc::UNABBREV_RECORD, false));
777
778 EXPECT_EQ(
779 "",
780 RunIndentedAssemblyWithAbbrevTest(false, false, 1, 64564, &Record,
781 naclbitc::UNABBREV_RECORD, false));
782
783 EXPECT_EQ(
784 "",
785 RunIndentedAssemblyWithAbbrevTest(false, false, 2, 64564, &Record,
786 naclbitc::UNABBREV_RECORD, false));
787 }
788
789 }
OLDNEW
« no previous file with comments | « unittests/Bitcode/NaClBitstreamReaderTest.cpp ('k') | unittests/Bitcode/NaClObjDumpTypesTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698