diff options
author | Tor Norbye <tnorbye@google.com> | 2012-01-30 11:16:45 -0800 |
---|---|---|
committer | Tor Norbye <tnorbye@google.com> | 2012-01-30 12:59:41 -0800 |
commit | a218b0fbb0d51a21773b3ec3700c373af96957e2 (patch) | |
tree | 6da90ec035949f563b1fb1194c3026e8bb9b6eab /common/tests | |
parent | 42271f91b7357dc1c1db304141288bbc5b96190d (diff) | |
download | sdk-a218b0fbb0d51a21773b3ec3700c373af96957e2.zip sdk-a218b0fbb0d51a21773b3ec3700c373af96957e2.tar.gz sdk-a218b0fbb0d51a21773b3ec3700c373af96957e2.tar.bz2 |
Fix lint column offset handling, and add columns to API check
The Lint API specifies that columns should be 0-based (like line
numbers), but in a number of places this was not the case; it was
1-based instead (both in the detector code and in the output code,
which is why things looked okay). This changeset cleans this up such
that the columns are properly 0-based (and adds unit tests for it).
The Location API has a mechanism to search in the source code for
tokens, which is useful for bytecode detectors where we only have line
numbers. This changeset adds tokens to the API detectors such that it
identifies the corresponding method, class or field reference in the
source, not just the corresponding line. It also improves the pattern
search to also look backwards a few lines, since some bytecode
references appear a few lines later than the source code reference (at
the nearest executable code; this is the case for parameter local
variables for example).
Change-Id: I3adac20d5f0075e0a919be15dfb68658d5b7bb11
Diffstat (limited to 'common/tests')
-rw-r--r-- | common/tests/src/com/android/util/PositionXmlParserTest.java | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/common/tests/src/com/android/util/PositionXmlParserTest.java b/common/tests/src/com/android/util/PositionXmlParserTest.java index 1573c90..ba560a6 100644 --- a/common/tests/src/com/android/util/PositionXmlParserTest.java +++ b/common/tests/src/com/android/util/PositionXmlParserTest.java @@ -22,6 +22,7 @@ import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; +import org.w3c.dom.Text; import java.io.BufferedOutputStream; import java.io.BufferedWriter; @@ -80,6 +81,7 @@ public class PositionXmlParserTest extends TestCase { Position start = parser.getPosition(attr); Position end = start.getEnd(); assertEquals(2, start.getLine()); + assertEquals(4, start.getColumn()); assertEquals(xml.indexOf("android:layout_width"), start.getOffset()); assertEquals(2, end.getLine()); String target = "android:layout_width=\"match_parent\""; @@ -91,6 +93,7 @@ public class PositionXmlParserTest extends TestCase { end = start.getEnd(); assertNull(end.getEnd()); assertEquals(6, start.getLine()); + assertEquals(4, start.getColumn()); assertEquals(xml.indexOf("<Button"), start.getOffset()); assertEquals(xml.indexOf("/>") + 2, end.getOffset()); assertEquals(10, end.getLine()); @@ -100,6 +103,7 @@ public class PositionXmlParserTest extends TestCase { start = parser.getPosition(button2); end = start.getEnd(); assertEquals(12, start.getLine()); + assertEquals(4, start.getColumn()); assertEquals(xml.indexOf("<Button", button1End), start.getOffset()); assertEquals(xml.indexOf("/>", start.getOffset()) + 2, end.getOffset()); assertEquals(16, end.getLine()); @@ -107,6 +111,52 @@ public class PositionXmlParserTest extends TestCase { file.delete(); } + public void testText() throws Exception { + String xml = + "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + + "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n" + + " android:layout_width=\"match_parent\"\n" + + " android:layout_height=\"wrap_content\"\n" + + " android:orientation=\"vertical\" >\n" + + "\n" + + " <Button\n" + + " android:id=\"@+id/button1\"\n" + + " android:layout_width=\"wrap_content\"\n" + + " android:layout_height=\"wrap_content\"\n" + + " android:text=\"Button\" />\n" + + " some text\n" + + "\n" + + "</LinearLayout>\n"; + PositionXmlParser parser = new PositionXmlParser(); + File file = File.createTempFile("parsertest", ".xml"); + file.deleteOnExit(); + Writer fw = new BufferedWriter(new FileWriter(file)); + fw.write(xml); + fw.close(); + Document document = parser.parse(new FileInputStream(file)); + assertNotNull(document); + + // Basic parsing heart beat tests + Element linearLayout = (Element) document.getElementsByTagName("LinearLayout").item(0); + assertNotNull(linearLayout); + NodeList buttons = document.getElementsByTagName("Button"); + assertEquals(1, buttons.getLength()); + final String ANDROID_URI = "http://schemas.android.com/apk/res/android"; + assertEquals("wrap_content", + linearLayout.getAttributeNS(ANDROID_URI, "layout_height")); + + // Check text positions + Element button = (Element) buttons.item(0); + Text text = (Text) button.getNextSibling(); + assertNotNull(text); + + // Check attribute positions + Position start = parser.getPosition(text); + assertEquals(11, start.getLine()); + assertEquals(10, start.getColumn()); + assertEquals(xml.indexOf("some text"), start.getOffset()); + } + public void testLineEndings() throws Exception { // Test for http://code.google.com/p/android/issues/detail?id=22925 String xml = |