diff --git a/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/BridgeTest.java b/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/BridgeTest.java
index e424f1d..c66ae37 100644
--- a/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/BridgeTest.java
+++ b/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/BridgeTest.java
@@ -73,6 +73,48 @@
         }
     }
 
+    /**
+     * Mock implementation of {@link IStyleResourceValue}.
+     */
+    private static class StyleResourceValueMock extends ResourceValue
+            implements IStyleResourceValue {
+
+        private String mParentStyle = null;
+        private HashMap<String, IResourceValue> mItems = new HashMap<String, IResourceValue>();
+
+        StyleResourceValueMock(String name) {
+            super(name);
+        }
+
+        StyleResourceValueMock(String name, String parentStyle) {
+            super(name);
+            mParentStyle = parentStyle;
+        }
+
+        public String getParentStyle() {
+            return mParentStyle;
+        }
+
+        public IResourceValue findItem(String name) {
+            return mItems.get(name);
+        }
+
+        public void addItem(IResourceValue value) {
+            mItems.put(value.getName(), value);
+        }
+
+        @Override
+        public void replaceWith(ResourceValue value) {
+            super.replaceWith(value);
+
+            if (value instanceof StyleResourceValueMock) {
+                mItems.clear();
+                mItems.putAll(((StyleResourceValueMock)value).mItems);
+            }
+        }
+    }
+
+
     public void testComputeLayout() throws Exception {
         
         TestParser parser = new TestParser();
@@ -88,8 +130,10 @@
         
         // FIXME need a dummy font for the tests!
         ILayoutResult result = mBridge.computeLayout(parser, new Integer(1) /* projectKey */, 
-                screenWidth, screenHeight,
-                "Theme", projectResources, frameworkResources, null, null);
+                screenWidth, screenHeight, false /* full render */,
+                160, 160f, 160f,
+                "Theme", false /* is project theme */,
+                projectResources, frameworkResources, null, null);
                 
         display(result.getRootView(), "");
     }
@@ -191,7 +235,7 @@
      * a style item value. If the number of string in the array is not even, an exception is thrown.
      */
     private IStyleResourceValue createStyle(String styleName, String... items) {
-        StyleResourceValue value = new StyleResourceValue(styleName);
+        StyleResourceValueMock value = new StyleResourceValueMock(styleName);
         
         if (items.length % 3 == 0) {
             for (int i = 0 ; i < items.length;) {
@@ -220,8 +264,10 @@
 
         // FIXME need a dummy font for the tests!
         ILayoutResult result = mBridge.computeLayout(parser, new Integer(1) /* projectKey */,
-                screenWidth, screenHeight,
-                "Theme", projectResources, frameworkResources, null, null);
+                screenWidth, screenHeight, false /* full render */,
+                160, 160f, 160f,
+                "Theme", false /* is project theme */,
+                projectResources, frameworkResources, null, null);
                 
         display(result.getRootView(), "");
     }
diff --git a/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/BridgeXmlBlockParserTest.java b/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/BridgeXmlBlockParserTest.java
index cac1f95..ef7442c 100644
--- a/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/BridgeXmlBlockParserTest.java
+++ b/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/BridgeXmlBlockParserTest.java
@@ -41,7 +41,7 @@
     @Override
     protected void setUp() throws Exception {
         super.setUp();
-        URL url = this.getClass().getClassLoader().getResource("data/layout1.xml");
+        URL url = this.getClass().getClassLoader().getResource("layout1.xml");
         mXmlPath = url.getFile();
         mDoc = getXmlDocument(mXmlPath);
     }
diff --git a/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/NinePatchTest.java b/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/NinePatchTest.java
index 67ec5e1..e667472 100644
--- a/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/NinePatchTest.java
+++ b/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/NinePatchTest.java
@@ -12,7 +12,7 @@
 
     @Override
     protected void setUp() throws Exception {
-        URL url = this.getClass().getClassLoader().getResource("data/button.9.png");
+        URL url = this.getClass().getClassLoader().getResource("button.9.png");
 
         mPatch = NinePatch.load(url, false /* convert */);
     }
diff --git a/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/StyleResourceValue.java b/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/StyleResourceValue.java
deleted file mode 100644
index 84bdc2f..0000000
--- a/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/StyleResourceValue.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.layoutlib.bridge;
-
-import com.android.layoutlib.api.IResourceValue;
-import com.android.layoutlib.api.IStyleResourceValue;
-
-import java.util.HashMap;
-
-class StyleResourceValue extends ResourceValue implements IStyleResourceValue {
-
-    private String mParentStyle = null;
-    private HashMap<String, IResourceValue> mItems = new HashMap<String, IResourceValue>();
-
-    StyleResourceValue(String name) {
-        super(name);
-    }
-
-    StyleResourceValue(String name, String parentStyle) {
-        super(name);
-        mParentStyle = parentStyle;
-    }
-
-    public String getParentStyle() {
-        return mParentStyle;
-    }
-    
-    public IResourceValue findItem(String name) {
-        return mItems.get(name);
-    }
-    
-    public void addItem(IResourceValue value) {
-        mItems.put(value.getName(), value);
-    }
-    
-    @Override
-    public void replaceWith(ResourceValue value) {
-        super.replaceWith(value);
-        
-        if (value instanceof StyleResourceValue) {
-            mItems.clear();
-            mItems.putAll(((StyleResourceValue)value).mItems);
-        }
-    }
-
-}
diff --git a/tools/layoutlib/bridge/tests/data/button.9.png b/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/button.9.png
similarity index 100%
rename from tools/layoutlib/bridge/tests/data/button.9.png
rename to tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/button.9.png
Binary files differ
diff --git a/tools/layoutlib/bridge/tests/data/layout1.xml b/tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/layout1.xml
similarity index 100%
rename from tools/layoutlib/bridge/tests/data/layout1.xml
rename to tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/layout1.xml
