c7ad40f76f
Most of this is (obviously) not necessary to do, but once I started, I figured I'd just get it all. Tools (nanobench, DM, skiaserve), all GMs, benches, and unit tests, plus support code (command line parsing and config stuff). This is almost entirely mechanical. Bug: skia: Change-Id: I209500f8df8c5bd43f8298ff26440d1c4d7425fb Reviewed-on: https://skia-review.googlesource.com/131153 Reviewed-by: Mike Klein <mtklein@google.com> Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Brian Osman <brianosman@google.com>
122 lines
4.3 KiB
C++
122 lines
4.3 KiB
C++
/*
|
|
* Copyright 2014 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#include "Test.h"
|
|
|
|
#include "GrSKSLPrettyPrint.h"
|
|
|
|
#define ASSERT(x) REPORTER_ASSERT(r, x)
|
|
|
|
const SkString input1("#this is not a realshader\nvec4 some stuff;outside of a function;"
|
|
"int i(int b, int c) { { some stuff;} fake block; //comments\n return i;}"
|
|
"void main()");
|
|
const SkString input2("{nowin a function;{indenting;{abit more;dreadedfor((;;)(;)((;;);)){"
|
|
"doingstuff"
|
|
";for(;;;){and more stufff;mixed garbage\n\n\t\t\t\t\n/*using this"
|
|
" comment\n is");
|
|
const SkString input3(" dangerous\ndo so at your own\n risk*/;\n\n\t\t\t\n"
|
|
"//a comment");
|
|
const SkString input4("breaking in comment");
|
|
const SkString input5("continuing the comment");
|
|
const SkString input6("\n}}a; little ; love; for ; leading; spaces;} "
|
|
"an struct = { int a; int b; };"
|
|
"int[5] arr = int[5](1,2,3,4,5);} some code at the bottom; for(;;) {} }");
|
|
|
|
const SkSL::String output1(
|
|
" 1\t#this is not a realshader\n"
|
|
" 2\tvec4 some stuff;\n"
|
|
" 3\toutside of a function;\n"
|
|
" 4\tint i(int b, int c) \n"
|
|
" 5\t{\n"
|
|
" 6\t\t{\n"
|
|
" 7\t\t\tsome stuff;\n"
|
|
" 8\t\t}\n"
|
|
" 9\t\tfake block;\n"
|
|
" 10\t\t//comments\n"
|
|
" 11\t\treturn i;\n"
|
|
" 12\t}\n"
|
|
" 13\tvoid main()\n"
|
|
" 14\t{\n"
|
|
" 15\t\tnowin a function;\n"
|
|
" 16\t\t{\n"
|
|
" 17\t\t\tindenting;\n"
|
|
" 18\t\t\t{\n"
|
|
" 19\t\t\t\tabit more;\n"
|
|
" 20\t\t\t\tdreadedfor((;;)(;)((;;);))\n"
|
|
" 21\t\t\t\t{\n"
|
|
" 22\t\t\t\t\tdoingstuff;\n"
|
|
" 23\t\t\t\t\tfor(;;;)\n"
|
|
" 24\t\t\t\t\t{\n"
|
|
" 25\t\t\t\t\t\tand more stufff;\n"
|
|
" 26\t\t\t\t\t\tmixed garbage/*using this comment\n"
|
|
" 27\t\t\t\t\t\t is dangerous\n"
|
|
" 28\t\t\t\t\t\tdo so at your own\n"
|
|
" 29\t\t\t\t\t\t risk*/;\n"
|
|
" 30\t\t\t\t\t\t//a commentbreaking in commentcontinuing the comment\n"
|
|
" 31\t\t\t\t\t}\n"
|
|
" 32\t\t\t\t}\n"
|
|
" 33\t\t\t\ta;\n"
|
|
" 34\t\t\t\tlittle ;\n"
|
|
" 35\t\t\t\tlove;\n"
|
|
" 36\t\t\t\tfor ;\n"
|
|
" 37\t\t\t\tleading;\n"
|
|
" 38\t\t\t\tspaces;\n"
|
|
" 39\t\t\t}\n"
|
|
" 40\t\t\tan struct = \n"
|
|
" 41\t\t\t{\n"
|
|
" 42\t\t\t\tint a;\n"
|
|
" 43\t\t\t\tint b;\n"
|
|
" 44\t\t\t}\n"
|
|
" 45\t\t\t;\n"
|
|
" 46\t\t\tint[5] arr = int[5](1,2,3,4,5);\n"
|
|
" 47\t\t}\n"
|
|
" 48\t\tsome code at the bottom;\n"
|
|
" 49\t\tfor(;;) \n"
|
|
" 50\t\t{\n"
|
|
" 51\t\t}\n"
|
|
" 52\t}\n"
|
|
" 53\t");
|
|
|
|
const SkString neg1("{;;{{{{;;;{{{{{{{{{{{");
|
|
const SkString neg2("###\n##\n#####(((((((((((((unbalanced verything;;;");
|
|
const SkString neg3("}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}"
|
|
";;;;;;/////");
|
|
|
|
DEF_TEST(GrSKSLPrettyPrint, r) {
|
|
SkTArray<const char*> testStr;
|
|
SkTArray<int> lengths;
|
|
testStr.push_back(input1.c_str());
|
|
lengths.push_back((int)input1.size());
|
|
testStr.push_back(input2.c_str());
|
|
lengths.push_back((int)input2.size());
|
|
testStr.push_back(input3.c_str());
|
|
lengths.push_back((int)input3.size());
|
|
testStr.push_back(input4.c_str());
|
|
lengths.push_back((int)input4.size());
|
|
testStr.push_back(input5.c_str());
|
|
lengths.push_back((int)input5.size());
|
|
testStr.push_back(input6.c_str());
|
|
lengths.push_back((int)input6.size());
|
|
|
|
SkSL::String test = GrSKSLPrettyPrint::PrettyPrint(testStr.begin(), lengths.begin(),
|
|
testStr.count(), true);
|
|
ASSERT(output1 == test);
|
|
|
|
testStr.reset();
|
|
lengths.reset();
|
|
testStr.push_back(neg1.c_str());
|
|
lengths.push_back((int)neg1.size());
|
|
testStr.push_back(neg2.c_str());
|
|
lengths.push_back((int)neg2.size());
|
|
testStr.push_back(neg3.c_str());
|
|
lengths.push_back((int)neg3.size());
|
|
|
|
// Just test we don't crash with garbage input
|
|
ASSERT(GrSKSLPrettyPrint::PrettyPrint(testStr.begin(), lengths.begin(), 1,
|
|
true).c_str() != nullptr);
|
|
}
|