1 // Copyright 2008 the V8 project authors. All rights reserved. 2 // Redistribution and use in source and binary forms, with or without 3 // modification, are permitted provided that the following conditions are 4 // met: 5 // 6 // * Redistributions of source code must retain the above copyright 7 // notice, this list of conditions and the following disclaimer. 8 // * Redistributions in binary form must reproduce the above 9 // copyright notice, this list of conditions and the following 10 // disclaimer in the documentation and/or other materials provided 11 // with the distribution. 12 // * Neither the name of Google Inc. nor the names of its 13 // contributors may be used to endorse or promote products derived 14 // from this software without specific prior written permission. 15 // 16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 28 // Flags: --expose-debug-as debug 29 // Test the mirror object for string values 30 31 const kMaxProtocolStringLength = 80; // Constant from mirror-delay.js 32 33 function testStringMirror(s) { 34 // Create mirror and JSON representation. 35 var mirror = debug.MakeMirror(s); 36 var serializer = debug.MakeMirrorSerializer(); 37 var json = JSON.stringify(serializer.serializeValue(mirror)); 38 39 // Check the mirror hierachy. 40 assertTrue(mirror instanceof debug.Mirror); 41 assertTrue(mirror instanceof debug.ValueMirror); 42 assertTrue(mirror instanceof debug.StringMirror); 43 44 // Check the mirror properties. 45 assertTrue(mirror.isString()); 46 assertEquals('string', mirror.type()); 47 assertTrue(mirror.isPrimitive()); 48 49 // Test text representation 50 if (s.length <= kMaxProtocolStringLength) { 51 assertEquals(s, mirror.toText()); 52 } else { 53 assertEquals(s.substring(0, kMaxProtocolStringLength), 54 mirror.toText().substring(0, kMaxProtocolStringLength)); 55 } 56 57 // Parse JSON representation and check. 58 var fromJSON = eval('(' + json + ')'); 59 assertEquals('string', fromJSON.type); 60 if (s.length <= kMaxProtocolStringLength) { 61 assertEquals(s, fromJSON.value); 62 } else { 63 assertEquals(s.substring(0, kMaxProtocolStringLength), 64 fromJSON.value.substring(0, kMaxProtocolStringLength)); 65 assertEquals(fromJSON.fromIndex, 0); 66 assertEquals(fromJSON.toIndex, kMaxProtocolStringLength); 67 } 68 } 69 70 // Test a number of different strings. 71 testStringMirror(''); 72 testStringMirror('abcdABCD'); 73 testStringMirror('1234'); 74 testStringMirror('"'); 75 testStringMirror('"""'); 76 testStringMirror("'"); 77 testStringMirror("'''"); 78 testStringMirror("'\"'"); 79 testStringMirror('\\'); 80 testStringMirror('\b\t\n\f\r'); 81 testStringMirror('\u0001\u0002\u001E\u001F'); 82 testStringMirror('"a":1,"b":2'); 83 84 var s = "1234567890" 85 s = s + s + s + s + s + s + s + s; 86 assertEquals(kMaxProtocolStringLength, s.length); 87 testStringMirror(s); 88 s = s + 'X'; 89 testStringMirror(s); 90