SDK Updater: use separate license node in XML. Support extra packages.

This commit is contained in:
Raphael
2009-06-18 16:07:55 -07:00
parent 963aebaffa
commit 48c6578bb6
17 changed files with 582 additions and 157 deletions

View File

@@ -16,6 +16,8 @@
package com.android.sdklib.repository;
import com.android.sdklib.SdkConstants;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
@@ -245,4 +247,57 @@ public class TestSdkRepository extends TestCase {
// If we get here, the validator has not failed as we expected it to.
fail();
}
/** A document an unknown license id. */
public void testLicenseIdNotFound() throws Exception {
// we define a license named "lic1" and then reference "lic2" instead
String document = "<?xml version=\"1.0\"?>" +
"<r:sdk-repository xmlns:r=\"http://schemas.android.com/sdk/android/repository/1\" >" +
"<r:license id=\"lic1\"> some license </r:license> " +
"<r:tool> <r:uses-license ref=\"lic2\" /> <r:revision>1</r:revision> " +
"<r:archives> <r:archive os=\"any\"> <r:size>1</r:size> <r:checksum>2822ae37115ebf13412bbef91339ee0d9454525e</r:checksum> " +
"<r:url>url</r:url> </r:archive> </r:archives> </r:tool>" +
"</r:sdk-repository>";
Source source = new StreamSource(new StringReader(document));
// don't capture the validator errors, we want it to fail and catch the exception
Validator validator = getValidator(null);
try {
validator.validate(source);
} catch (SAXParseException e) {
// We expect a parse error referring to this grammar rule
assertRegex("cvc-id.1: There is no ID/IDREF binding for IDREF 'lic2'.*",
e.getMessage());
return;
}
// If we get here, the validator has not failed as we expected it to.
fail();
}
/** A document a slash in an extra path. */
public void testExtraPathWithSlash() throws Exception {
// we define a license named "lic1" and then reference "lic2" instead
String document = "<?xml version=\"1.0\"?>" +
"<r:sdk-repository xmlns:r=\"http://schemas.android.com/sdk/android/repository/1\" >" +
"<r:extra> <r:revision>1</r:revision> <r:path>path/cannot\\contain\\segments</r:path> " +
"<r:archives> <r:archive os=\"any\"> <r:size>1</r:size> <r:checksum>2822ae37115ebf13412bbef91339ee0d9454525e</r:checksum> " +
"<r:url>url</r:url> </r:archive> </r:archives> </r:extra>" +
"</r:sdk-repository>";
Source source = new StreamSource(new StringReader(document));
// don't capture the validator errors, we want it to fail and catch the exception
Validator validator = getValidator(null);
try {
validator.validate(source);
} catch (SAXParseException e) {
// We expect a parse error referring to this grammar rule
assertRegex("cvc-pattern-valid: Value 'path/cannot\\\\contain\\\\segments' is not facet-valid with respect to pattern.*",
e.getMessage());
return;
}
// If we get here, the validator has not failed as we expected it to.
fail();
}
}

View File

@@ -18,6 +18,17 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sdk="http://schemas.android.com/sdk/android/repository/1">
<!-- Define a couple of licenses. These will be referenced by uses-license later. -->
<sdk:license type="text" id="license1">
This is the license
for this platform.
</sdk:license>
<sdk:license id="license2">
Licenses are only of type 'text' right now, so this is implied.
</sdk:license>
<!-- Inner elements must be either platform, add-on, doc or tool.
There can be 0 or more of each, in any order. -->
@@ -25,9 +36,8 @@
<sdk:version>1.0</sdk:version>
<sdk:api-level>1</sdk:api-level>
<sdk:revision>3</sdk:revision>
<sdk:uses-license ref="license1" />
<sdk:description>Some optional description</sdk:description>
<sdk:license>This is the license
for this platform.</sdk:license>
<sdk:desc-url>http://www.example.com/platform1.html</sdk:desc-url>
<!-- The archives node is mandatory and it cannot be empty. -->
<sdk:archives>
@@ -42,8 +52,8 @@
<sdk:doc>
<sdk:api-level>1</sdk:api-level>
<sdk:revision>1</sdk:revision>
<sdk:description>Some optional description</sdk:description>
<!-- the license element is not mandatory. -->
<sdk:description>Some optional description</sdk:description>
<sdk:desc-url>http://www.example.com/docs.html</sdk:desc-url>
<sdk:archives>
<sdk:archive os="any">
@@ -59,8 +69,7 @@
<sdk:api-level>1</sdk:api-level>
<sdk:vendor>John Doe</sdk:vendor>
<sdk:revision>1</sdk:revision>
<!-- license can be empty. -->
<sdk:license></sdk:license>
<sdk:uses-license ref="license2" />
<sdk:description>Some optional description</sdk:description>
<sdk:desc-url>http://www.example.com/myfirstaddon</sdk:desc-url>
<sdk:archives>
@@ -87,7 +96,7 @@
<sdk:version>1.1</sdk:version>
<sdk:api-level>2</sdk:api-level>
<sdk:revision>12</sdk:revision>
<sdk:license>This is the license for this package.</sdk:license>
<sdk:uses-license ref="license1" />
<!-- sdk:description and sdk:desc-url are optional -->
<sdk:archives>
<sdk:archive os="windows">
@@ -145,14 +154,14 @@
<sdk:name>com.android.mymaps</sdk:name>
</sdk:lib>
</sdk:libs>
<sdk:license>This is the license for this package.</sdk:license>
<sdk:uses-license ref="license2" />
</sdk:add-on>
<sdk:tool>
<sdk:revision>1</sdk:revision>
<sdk:description>Some optional description</sdk:description>
<sdk:desc-url>http://www.example.com/tools.html</sdk:desc-url>
<sdk:license>This is the license for this package.</sdk:license>
<sdk:uses-license ref="license1" />
<sdk:archives>
<sdk:archive os="any">
<sdk:size>65536</sdk:size>
@@ -165,7 +174,7 @@
<sdk:doc>
<sdk:api-level>2</sdk:api-level>
<sdk:revision>42</sdk:revision>
<sdk:license>This is the license for this package.</sdk:license>
<sdk:uses-license ref="license2" />
<sdk:archives>
<sdk:archive os="windows">
<sdk:size>65536</sdk:size>
@@ -187,7 +196,7 @@
<sdk:tool>
<sdk:revision>42</sdk:revision>
<sdk:license>This is the license for this package.</sdk:license>
<sdk:uses-license ref="license1" />
<sdk:archives>
<sdk:archive os="windows">
<sdk:size>65536</sdk:size>
@@ -208,7 +217,7 @@
</sdk:tool>
<sdk:add-on>
<sdk:license>This is the license for this package.</sdk:license>
<sdk:uses-license ref="license2" />
<sdk:name>This add-on has no libraries</sdk:name>
<sdk:api-level>4</sdk:api-level>
<sdk:vendor>Joe Bar</sdk:vendor>
@@ -224,4 +233,19 @@
<sdk:libs />
</sdk:add-on>
<sdk:extra>
<sdk:path>usb_driver</sdk:path>
<sdk:uses-license ref="license2" />
<sdk:revision>43</sdk:revision>
<sdk:archives>
<sdk:archive os="any" arch="any">
<sdk:size>65536</sdk:size>
<sdk:checksum type="sha1">2822ae37115ebf13412bbef91339ee0d9454525e</sdk:checksum>
<sdk:url>distrib/extraduff.zip</sdk:url>
</sdk:archive>
</sdk:archives>
<sdk:description>An Extra package for the USB driver, it will install in $SDK/usb_driver</sdk:description>
<sdk:desc-url>http://www.example.com/extra.html</sdk:desc-url>
</sdk:extra>
</sdk:sdk-repository>