Home | History | Annotate | Download | only in testing
      1 /*
      2  * Copyright (C) 2013 Google Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions are
      6  * met:
      7  *
      8  *     * Redistributions of source code must retain the above copyright
      9  * notice, this list of conditions and the following disclaimer.
     10  *     * Redistributions in binary form must reproduce the above
     11  * copyright notice, this list of conditions and the following disclaimer
     12  * in the documentation and/or other materials provided with the
     13  * distribution.
     14  *     * Neither the name of Google Inc. nor the names of its
     15  * contributors may be used to endorse or promote products derived from
     16  * this software without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29  */
     30 
     31 #include "config.h"
     32 #include "wtf/testing/WTFTestHelpers.h"
     33 
     34 #include "wtf/text/WTFString.h"
     35 #include <ios> // NOLINT
     36 #include <ostream> // NOLINT
     37 
     38 namespace WTF {
     39 
     40 std::ostream& operator<<(std::ostream& out, const String& string)
     41 {
     42     if (string.isNull())
     43         return out << "<null>";
     44 
     45     out << '"';
     46     for (unsigned index = 0; index < string.length(); ++index) {
     47         // Print shorthands for select cases.
     48         UChar character = string[index];
     49         switch (character) {
     50         case '\t':
     51             out << "\\t";
     52             break;
     53         case '\n':
     54             out << "\\n";
     55             break;
     56         case '\r':
     57             out << "\\r";
     58             break;
     59         case '"':
     60             out << "\\\"";
     61             break;
     62         case '\\':
     63             out << "\\\\";
     64             break;
     65         default:
     66             if (character >= 0x20 && character < 0x7F) {
     67                 out << static_cast<char>(character);
     68             } else {
     69                 // Print "\uXXXX" for control or non-ASCII characters.
     70                 out << "\\u";
     71                 out.width(4);
     72                 out.fill('0');
     73                 out.setf(std::ios_base::hex, std::ios_base::basefield);
     74                 out.setf(std::ios::uppercase);
     75                 out << character;
     76             }
     77             break;
     78         }
     79     }
     80     return out << '"';
     81 }
     82 
     83 } // namespace WTF
     84