fix minor skp-found bugs

remove globals from pathops_unittest

BUG=skia:2460
TBR=mtklein

Author: caryclark@google.com

Review URL: https://codereview.chromium.org/239563004

git-svn-id: http://skia.googlecode.com/svn/trunk@14378 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/tests/PathOpsSkpClipTest.cpp b/tests/PathOpsSkpClipTest.cpp
index 3959fc7..df6770d 100755
--- a/tests/PathOpsSkpClipTest.cpp
+++ b/tests/PathOpsSkpClipTest.cpp
@@ -26,22 +26,86 @@
     #define OUT_DIR "D:\\skpOut\\1\\"
 #else
     #define PATH_SLASH "/"
-    #define IN_DIR "/skp/slave"
-    #define OUT_DIR "/skpOut/1/"
+    #define IN_DIR "/skp/2311328-7fc2228/slave"
+    #define OUT_DIR "/skpOut/2/"
 #endif
 
 const struct {
     int directory;
     const char* filename;
 } skipOverSept[] = {
-    {1, "http___elpais_com_.skp"},
-    {1, "http___namecheap_com_.skp"},
-    {1, "http___www_alrakoba_net_.skp"},
-    {1, "http___www_briian_com_.skp"},  // triggers assert at line 467 of SkRRect.cpp
-    {1, "http___www_cityads_ru_.skp"},
-    {3, "http___www_abeautifulmess_com_.skp"},  // asserts in IntToFixed from SkScan::AntiFilllXRect
-    {1, "http___www_dealnews_com_.skp"},
-    {1, "http___www_inmotionhosting_com.skp"},
+    { 9, "http___www_catingueiraonline_com_.skp"},  // infinite loop
+    {13, "http___www_galaxystwo_com_.skp"},  // infinite loop
+    {15, "http___www_giffingtool_com_.skp"},  // joinCoincidence / findT / assert
+    {15, "http___www_thaienews_blogspot_com_.skp"},  // infinite loop
+    {17, "http___www_gruposejaumdivulgador_com_br_.skp"}, // calcCoincidentWinding asserts zeroSpan
+    {18, "http___www_argus_presse_fr_.skp"},  // can't find winding of remaining vertical edge
+    {21, "http___www_fashionscandal_com_.skp"},  // infinite loop
+    {21, "http___www_kenlevine_blogspot_com_.skp"},  // infinite loop
+    {25, "http___www_defense_studies_blogspot_com_.skp"},  // infinite loop
+    {27, "http___www_brokeroutpost_com_.skp"},  // suspect infinite loop
+    {28, "http___www_jaimebatistadasilva_blogspot_com_br_.skp"},  // suspect infinite loop
+    {28, "http___www_odia_com_br_.skp"},  // !simple->isClosed()
+    {29, "http___www_hubbyscook_com_.skp"},  // joinCoincidence / findT / assert
+    {30, "http___www_spankystokes_com_.skp"},  // suspect infinite loop
+    {32, "http___www_adalbertoday_blogspot_com_br_.skp"},  // suspect infinite loop
+    {32, "http___www_galery_annisa_com_.skp"},  // suspect infinite loop
+    {33, "http___www_pindosiya_com_.skp"},  // line quad intersection SkIntersections::assert
+    {36, "http___www_educationalcraft_com_.skp"},  // cubic / cubic near end / assert in SkIntersections::insert (missing skp test)
+    {36, "http___www_shaam_org_.skp"},  // suspect infinite loop
+    {36, "http___www_my_pillow_book_blogspot_gr_.skp"},  // suspect infinite loop
+    {39, "http___www_opbeat_com_.skp"},  // suspect infinite loop
+    {40, "http___www_phototransferapp_com_.skp"},  // !simple->isClosed()
+    {41, "http___www_freeismylife_com_.skp"},  // suspect infinite loop
+    {41, "http___www_accordidelmomento_com_.skp"},  // suspect infinite loop
+    {41, "http___www_evolvehq_com_.skp"},  // joinCoincidence / findT / assert
+    {44, "http___www_contextualnewsfeeds_com_.skp"},  // !simple->isClosed()
+    {44, "http___www_cooksnaps_com_.skp"},  // !simple->isClosed()
+    {44, "http___www_helha_be_.skp"},  // !simple->isClosed()
+    {45, "http___www_blondesmakemoney_blogspot_com_.skp"},  // suspect infinite loop
+    {46, "http___www_cheaphealthygood_blogspot_com_.skp"},  // suspect infinite loop
+    {47, "http___www_ajitvadakayil_blogspot_in_.skp"},  // suspect infinite loop
+    {49, "http___www_karnivool_com_au_.skp"},  // SkOpAngle::setSector SkASSERT(fSectorStart >= 0);
+    {49, "http___www_tunero_de_.skp"},  // computeonesumreverse calls markwinding with 0 winding
+    {49, "http___www_thaienews_blogspot_sg_.skp"},  // suspect infinite loop
+    {50, "http___www_docgelo_com_.skp"},  // rightAngleWinding (probably same as argus_presse)
+    {53, "http___www_lojaanabotafogo_com_br_.skp"},  // rrect validate assert
+    {54, "http___www_odecktestanswer2013_blogspot_in_.skp"},  // suspect infinite loop
+    {54, "http___www_cleristonsilva_com_br_.skp"},  // suspect infinite loop
+    {56, "http___www_simplysaru_com_.skp"},  // joinCoincidence / findT / assert
+    {57, "http___www_koukfamily_blogspot_gr_.skp"},  // suspect infinite loop
+    {57, "http___www_dinar2010_blogspot_com_.skp"},  // suspect infinite loop
+    {58, "http___www_artblart_com_.skp"},  // rightAngleWinding
+    {59, "http___www_accrispin_blogspot_com_.skp"},  // suspect infinite loop
+    {59, "http___www_vicisitudysordidez_blogspot_com_es_.skp"},  // suspect infinite loop
+    {60, "http___www_thehousingbubbleblog_com_.skp"},  // suspect infinite loop
+    {61, "http___www_jessicaslens_wordpress_com_.skp"},  // joinCoincidence / findT / assert
+    {61, "http___www_partsdata_de_.skp"},  // cubic-cubic intersection reduce checkLinear assert
+    {62, "http___www_blondesmakemoney_blogspot_com_au_.skp"},  // suspect infinite loop
+    {62, "http___www_intellibriefs_blogspot_in_.skp"},  // suspect infinite loop
+    {63, "http___www_tankerenemy_com_.skp"},  // suspect infinite loop
+    {65, "http___www_kpopexplorer_net_.skp"},  // joinCoincidence / findT / assert
+    {65, "http___www_bestthingsinbeauty_blogspot_com_.skp"},  // suspect infinite loop
+    {65, "http___www_wartepop_blogspot_com_br_.skp"},  // !simple->isClosed()
+    {65, "http___www_eolake_blogspot_com_.skp"},  // suspect infinite loop
+    {67, "http___www_cacadordemisterio_blogspot_com_br_.skp"},  // suspect infinite loop
+    {69, "http___www_misnotasyapuntes_blogspot_mx_.skp"},  // suspect infinite loop
+    {69, "http___www_awalkintheparknyc_blogspot_com_.skp"},  // suspect infinite loop
+    {71, "http___www_lokado_de_.skp"},  // joinCoincidence / findT / assert
+    {72, "http___www_karlosdesanjuan_blogspot_com_.skp"},  // suspect infinite loop
+    {73, "http___www_cyberlawsinindia_blogspot_in_.skp"},  // suspect infinite loop
+    {73, "http___www_taxiemmovimento_blogspot_com_br_.skp"},  // suspect infinite loop
+    {74, "http___www_giveusliberty1776_blogspot_com_.skp"},  // suspect infinite loop
+    {75, "http___www_e_cynical_blogspot_gr_.skp"},  // suspect infinite loop
+    {76, "http___www_seopack_blogspot_com_.skp"},  // SkOpAngle::setSector SkASSERT(fSectorStart >= 0);
+    {77, "http___www_sunsky_russia_com_.skp"},  // joinCoincidence / findT / assert (no op test, already fixed hopefully)
+    {78, "http___www_bisnisonlineinfo_com_.skp"},  // suspect infinite loop
+    {79, "http___www_danielsgroupcpa_com_.skp"},  // joinCoincidence / findT / assert (no op test, already fixed hopefully)
+    {80, "http___www_clinique_portugal_com_.skp"},  // suspect infinite loop
+    {81, "http___www_europebusines_blogspot_com_.skp"},  // suspect infinite loop
+    {82, "http___www_apopsignomi_blogspot_gr_.skp"},  // suspect infinite loop
+    {85, "http___www_ajitvadakayil_blogspot_com_.skp"},  // suspect infinite loop
+    {86, "http___www_madhousefamilyreviews_blogspot_co_uk_.skp"},  // suspect infinite loop
 };
 
 size_t skipOverSeptCount = sizeof(skipOverSept) / sizeof(skipOverSept[0]);
@@ -409,6 +473,9 @@
         int height = pic->height();
         SkBitmap oldBitmap, opBitmap;
         fScale = 1;
+        while (width / fScale > 32767 || height / fScale > 32767) {
+            ++fScale;
+        }
         do {
             int dimX = (width + fScale - 1) / fScale;
             int dimY = (height + fScale - 1) / fScale;
@@ -417,7 +484,7 @@
                 break;
             }
             SkDebugf("-%d-", fScale);
-        } while ((fScale *= 2) < 256);
+        } while (++fScale < 256);
         if (fScale >= 256) {
             SkDebugf("unable to allocate bitmap for %s (w=%d h=%d)\n", fFilename,
                     width, height);
@@ -458,9 +525,10 @@
 
 class PreParser {
 public:
-    PreParser(int dirNo)
+    PreParser(int dirNo, bool threaded)
         : fDirNo(dirNo)
-        , fIndex(0) {
+        , fIndex(0)
+        , fThreaded(threaded) {
         SkString statusPath = makeStatusString(dirNo);
         if (!sk_exists(statusPath.c_str())) {
             return;
@@ -481,7 +549,7 @@
         do {
             bool readOne = reader.read(&c, 1) != 0;
             if (!readOne) {
-                SkASSERT(i == 0);
+//                SkASSERT(i == 0);   // the current text may be incomplete -- if so, ignore it
                 return false;
             }
             if (c == ' ') {
@@ -492,7 +560,9 @@
             SkASSERT(i < kMaxLength);
         } while (true);
         do {
-            SkAssertResult(reader.read(&c, 1));
+            if (!reader.read(&c, 1)) {
+                return false;
+            }   
             if (c == ' ') {
                 break;
             }
@@ -501,7 +571,9 @@
         } while (true);
         bool minus = false;
         do {
-            SkAssertResult(reader.read(&c, 1));
+            if (!reader.read(&c, 1)) {
+                return false;
+            }
             if (c == '\n') {
                 break;
             }
@@ -519,7 +591,17 @@
     }
 
     bool match(const SkString& filename, SkFILEWStream* stream, TestResult* result) {
-        if (fIndex < fResults.count()) {
+        if (fThreaded) {
+            for (int index = 0; index < fResults.count(); ++index) {
+                const TestResult& test = fResults[index];
+                if (filename.equals(test.fFilename)) {
+                    *result = test;
+                    SkString outStr(result->status());
+                    stream->write(outStr.c_str(), outStr.size());
+                    return true;
+                }
+            }
+        } else if (fIndex < fResults.count()) {
             *result = fResults[fIndex++];
             SkASSERT(filename.equals(result->fFilename));
             SkString outStr(result->status());
@@ -533,9 +615,10 @@
     int fDirNo;
     int fIndex;
     SkTArray<TestResult, true> fResults;
+    bool fThreaded;
 };
 
-static bool doOneDir(TestState* state) {
+static bool doOneDir(TestState* state, bool threaded) {
     int dirNo = state->fResult.fDirNo;
     skiatest::Reporter* reporter = state->fReporter;
     SkString dirName = make_in_dir_name(dirNo);
@@ -545,7 +628,7 @@
     SkOSFile::Iter iter(dirName.c_str(), "skp");
     SkString filename;
     int testCount = 0;
-    PreParser preParser(dirNo);
+    PreParser preParser(dirNo, threaded);
     SkFILEWStream statusStream(makeStatusString(dirNo).c_str());
     while (iter.next(&filename)) {
         for (size_t index = 0; index < skipOverSeptCount; ++index) {
@@ -632,7 +715,7 @@
             SkDebugf("dirNo=%d\n", dirNo);
         }
         state.fResult.fDirNo = dirNo;
-        if (!doOneDir(&state)) {
+        if (!doOneDir(&state, false)) {
             break;
         }
     }
@@ -640,7 +723,7 @@
 }
 
 static void testSkpClipMain(TestState* data) {
-        (void) doOneDir(data);
+        (void) doOneDir(data, true);
 }
 
 DEF_TEST(PathOpsSkpClipThreaded, reporter) {