]> source.dussan.org Git - gwtquery.git/commitdiff
Fix for __gwt_ObjectId attribute in JsCache (chrome dev mode). Fix Properties parser...
authorManolo Carrasco <manolo@apache.org>
Sat, 23 Apr 2011 09:32:45 +0000 (09:32 +0000)
committerManolo Carrasco <manolo@apache.org>
Sat, 23 Apr 2011 09:32:45 +0000 (09:32 +0000)
gwtquery-core/src/main/java/com/google/gwt/query/client/Properties.java
gwtquery-core/src/main/java/com/google/gwt/query/client/js/JsCache.java
gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryJsTest.java
gwtquery-core/src/test/java/com/google/gwt/query/client/JreQueryCoreTest.java

index ce70e5a2c4fb73d5f59535e665660d0bfed81683..fecad1e4e9387c7d3c0484b7c5cd6b6e394118d8 100644 (file)
  */\r
 package com.google.gwt.query.client;\r
 \r
-import java.util.ArrayList;\r
-\r
 import com.google.gwt.core.client.JavaScriptObject;\r
-import com.google.gwt.core.client.JsArrayString;\r
+import com.google.gwt.query.client.js.JsCache;\r
+import com.google.gwt.regexp.shared.MatchResult;\r
+import com.google.gwt.regexp.shared.RegExp;\r
 \r
 /**\r
  * JSO for accessing Javascript objective literals used by GwtQuery functions.\r
@@ -44,11 +44,16 @@ public class Properties extends JavaScriptObject {
   }-*/;\r
 \r
   public static String wrapPropertiesString(String s) {\r
-    String ret = "({"\r
-        + s.replaceFirst("^[({]+", "").replaceFirst("[})]+$", "")\r
-        .replaceAll("\\s*/\\*[\\s\\S]*?\\*/\\s*", "")\r
-        .replaceAll(":\\s*[\"']?([^;,]+)([,;]|$)[\"']?\\s*", ":'$1',")\r
-        .replaceFirst("[;,]$", "").replaceAll("\\s*[']+\\s*", "'")\r
+    String ret = "({" + s //\r
+        .replaceAll("\\s*/\\*[\\s\\S]*?\\*/\\s*", "") //\r
+        .replaceAll("([:\\)\\(,;}{'\"])\\s+" , "$1") //\r
+        .replaceAll("\\s+([:\\)\\(,;}{'\"])" , "$1") //\r
+        .replaceFirst("^[{\\(]+(.+[^}\\)])[}\\)]+$", "$1") //\r
+        .replaceAll("\\('([^\\)]+)'\\)" , "($1)") //\r
+        .replaceAll(",([\\w-]+:+)" , ";$1") //\r
+        .replaceAll(":\\s*[\"']?([^;]+)([;]|$)[\"']?\\s*", ":'$1',") //\r
+        .replaceFirst("[;,]$", "") //\r
+        .replaceAll("\\s*[']+\\s*", "'") //\r
         + "})";\r
     return ret;\r
   }\r
@@ -90,26 +95,9 @@ public class Properties extends JavaScriptObject {
   }-*/;\r
 \r
   public final String[] keys() {\r
-    JsArrayString a = keysImpl();\r
-    ArrayList<String> list = new ArrayList<String>();\r
-    for (int i = 0; i < a.length(); i++) {\r
-      String key = a.get(i).toString();\r
-      // Chrome in DevMode injects a property to JS objects\r
-      if (!"__gwt_ObjectId".equals(key)) {\r
-        list.add(key);\r
-      }\r
-    }\r
-    return list.toArray(new String[list.size()]);\r
+    return this.<JsCache>cast().keys();\r
   }\r
 \r
-  public final native JsArrayString keysImpl() /*-{\r
-    var key, keys=[];\r
-    for(key in this) {\r
-      keys.push("" + key); \r
-    }\r
-    return keys;\r
-  }-*/;\r
-\r
   public final native void set(String key, Object val) /*-{\r
     this[key]=val;\r
   }-*/;\r
index fad4b1ca00f343218ad179a4411117e2775af3c6..5533c579a4da3e8203450334edcaab3029a5db0f 100644 (file)
@@ -1,5 +1,6 @@
 package com.google.gwt.query.client.js;
 
+import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.JavaScriptObject;
 import com.google.gwt.core.client.JsArrayString;
 
@@ -93,9 +94,12 @@ public class JsCache extends JavaScriptObject {
   }-*/;
   
   public final native int length() /*-{
-    if (this.length) return this.length;
-    var key, ret = 0; 
-    for (key in this) ret ++;
+    if (typeof(this.length) == 'number') 
+     return this.length;
+     
+    var key, ret = 0;
+    // Chrome in DevMode injects a property to JS objects
+    for (key in this) if (key != "__gwt_ObjectId") ret ++;
     return ret; 
   }-*/;
   
@@ -116,7 +120,7 @@ public class JsCache extends JavaScriptObject {
     JsArrayString a = keysImpl();
     String[] ret = new String[a.length()];
     for (int i = 0; i < a.length(); i++) {
-      ret[i] = a.get(i);
+        ret[i] = a.get(i);
     }
     return ret;
   }
@@ -141,7 +145,8 @@ public class JsCache extends JavaScriptObject {
   
   private final native JsArrayString keysImpl() /*-{
     var key, keys=[];
-    for(key in this) keys.push(String(key));
+    // Chrome in DevMode injects a property to JS objects
+    for(key in this) if (key != '__gwt_ObjectId') keys.push(String(key));
     return keys;
   }-*/;
 }
index 748fb49f73e2bc6fbb89044cd2c3e70310125035..f740964d59a7a7da146cbca7bd59c6c2e783dcaf 100644 (file)
  */
 package com.google.gwt.query.client;
 
+import static com.google.gwt.query.client.GQuery.$;
+
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.junit.client.GWTTestCase;
 import com.google.gwt.query.client.js.JsCache;
+import com.google.gwt.query.client.js.JsNodeArray;
 import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.RootPanel;
 
@@ -83,4 +86,26 @@ public class GQueryJsTest extends GWTTestCase {
     assertEquals(6, c.length());
     assertEquals("N", c.get(-1));
   }
+  
+  public void testChrome__gwt_ObjectId() {
+    JsCache a = JsCache.create();
+    assertEquals(0, a.length());
+    assertEquals(0, a.keys().length);
+    assertEquals(0, a.elements().length);
+    
+    a.put("obj", new Long(21));
+    assertEquals(1, a.length());
+    assertEquals(1, a.keys().length);
+    assertEquals(1, a.elements().length);
+    
+    JsNodeArray n = JsNodeArray.create();
+    assertEquals(0, n.getLength());
+    assertEquals(0, n.<JsCache>cast().keys().length);
+    assertEquals(0, n.elements().length);
+    
+    n.addNode($("<hr/>").get(0));
+    assertEquals(1, n.getLength());
+    assertEquals(1, n.<JsCache>cast().keys().length);
+    assertEquals(1, n.elements().length);
+  }
 }
index bafac246e9dc4b33b3c0d72c9b351d1321e94874..24337b7771623d7e20cefaa32cdddffb3df5e90c 100644 (file)
@@ -48,8 +48,10 @@ public class JreQueryCoreTest extends GWTTestCase {
         .wrapPropertiesString("{(border:'1px solid black')}"));
     assertEquals("({border:'1px solid black'})", Properties
         .wrapPropertiesString("({border:'1px solid black'})"));
-    assertEquals("({b:'a',c:'1',d:'url('adfafa')'})", Properties
-        .wrapPropertiesString("b: 'a'; c: 1, /*gg: aadf*/d: url('adfafa');"));
+    assertEquals("({b:'a',c:'1',d:'url(https://test.com)'})", Properties
+        .wrapPropertiesString("b: 'a'; c: 1, /*gg: aadf*/d: url('https://test.com');"));
+    assertEquals("({color:'rgb(0,0,139)',background:'red'})", Properties
+        .wrapPropertiesString("color: 'rgb(0, 0,139)', background: red"));
   }
 
 }