Home | History | Annotate | Download | only in mjsunit
      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 regular expression values
     30 
     31 var all_attributes = debug.PropertyAttribute.ReadOnly |
     32                      debug.PropertyAttribute.DontEnum |
     33                      debug.PropertyAttribute.DontDelete;
     34 var expected_attributes = {
     35   'source': all_attributes,
     36   'global': all_attributes,
     37   'ignoreCase': all_attributes,
     38   'multiline': all_attributes,
     39   'lastIndex': debug.PropertyAttribute.DontEnum | debug.PropertyAttribute.DontDelete
     40 };
     41 
     42 function MirrorRefCache(json_refs) {
     43   var tmp = eval('(' + json_refs + ')');
     44   this.refs_ = [];
     45   for (var i = 0; i < tmp.length; i++) {
     46     this.refs_[tmp[i].handle] = tmp[i];
     47   }
     48 }
     49 
     50 MirrorRefCache.prototype.lookup = function(handle) {
     51   return this.refs_[handle];
     52 }
     53 
     54 function testRegExpMirror(r) {
     55   // Create mirror and JSON representation.
     56   var mirror = debug.MakeMirror(r);
     57   var serializer = debug.MakeMirrorSerializer();
     58   var json = JSON.stringify(serializer.serializeValue(mirror));
     59   var refs = new MirrorRefCache(
     60       JSON.stringify(serializer.serializeReferencedObjects()));
     61 
     62   // Check the mirror hierachy.
     63   assertTrue(mirror instanceof debug.Mirror);
     64   assertTrue(mirror instanceof debug.ValueMirror);
     65   assertTrue(mirror instanceof debug.ObjectMirror);
     66   assertTrue(mirror instanceof debug.RegExpMirror);
     67 
     68   // Check the mirror properties.
     69   assertTrue(mirror.isRegExp());
     70   assertEquals('regexp', mirror.type());
     71   assertFalse(mirror.isPrimitive());
     72   for (var p in expected_attributes) {
     73     assertEquals(expected_attributes[p],
     74                  mirror.property(p).attributes(),
     75                  p + ' attributes');
     76   }
     77 
     78   // Test text representation
     79   assertEquals('/' + r.source + '/', mirror.toText());
     80 
     81   // Parse JSON representation and check.
     82   var fromJSON = eval('(' + json + ')');
     83   assertEquals('regexp', fromJSON.type);
     84   assertEquals('RegExp', fromJSON.className);
     85   for (var p in expected_attributes) {
     86     for (var i = 0; i < fromJSON.properties.length; i++) {
     87       if (fromJSON.properties[i].name == p) {
     88         assertEquals(expected_attributes[p],
     89                      fromJSON.properties[i].attributes,
     90                      'Unexpected value for ' + p + ' attributes');
     91         assertEquals(mirror.property(p).propertyType(),
     92                      fromJSON.properties[i].propertyType,
     93                      'Unexpected value for ' + p + ' propertyType');
     94         assertEquals(mirror.property(p).value().handle(),
     95                      fromJSON.properties[i].ref,
     96                      'Unexpected handle for ' + p);
     97         assertEquals(mirror.property(p).value().value(),
     98                      refs.lookup(fromJSON.properties[i].ref).value,
     99                      'Unexpected value for ' + p);
    100       }
    101     }
    102   }
    103 }
    104 
    105 
    106 // Test Date values.
    107 testRegExpMirror(/x/);
    108 testRegExpMirror(/[abc]/);
    109 testRegExpMirror(/[\r\n]/g);
    110 testRegExpMirror(/a*b/gmi);
    111