SDK Updater: use separate license node in XML. Support extra packages.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user