1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project This Java source file was generated by test-to-java.xsl 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project and is a derived work from the source document. 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project The source document contained the following notice: 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 8f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes Copyright (c) 2001 World Wide Web Consortium, 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project (Massachusetts Institute of Technology, Institut National de 10f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes Recherche en Informatique et en Automatique, Keio University). All 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Rights Reserved. This program is distributed under the W3C's Software 12f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes Intellectual Property License. This program is distributed in the 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hope that it will be useful, but WITHOUT ANY WARRANTY; without even 14f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 15f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes PURPOSE. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project See W3C License http://www.w3.org/Consortium/Legal/ for more details. 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.org.w3c.dom; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.ArrayList; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.List; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.DOMImplementation; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.Document; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.DOMException; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.DocumentType; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.xml.parsers.DocumentBuilder; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The "createDocumentType(qualifiedName,publicId,systemId)" method for a 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * DOMImplementation should raise NAMESPACE_ERR DOMException if qualifiedName is 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * malformed. 38f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Retrieve the DOMImplementation on the XMLNS Document. Invoke method 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * createDocumentType(qualifiedName,publicId,systemId) on the retrieved 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * DOMImplementation with qualifiedName being the literal string 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * "prefix::local", publicId as "STAFF", and systemId as "staff". Method should 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * raise NAMESPACE_ERR DOMException. 44f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @author NIST 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @author Mary Brady 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see <a 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * href="http://www.w3.org/TR/DOM-Level-2-Core/core#xpointer(id('ID-258A00AF')/constant[@name='NAMESPACE_ERR'])">http://www.w3.org/TR/DOM-Level-2-Core/core#xpointer(id('ID-258A00AF')/constant[@name='NAMESPACE_ERR'])</a> 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see <a 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * href="http://www.w3.org/TR/DOM-Level-2-Core/core#Level-2-Core-DOM-createDocType">http://www.w3.org/TR/DOM-Level-2-Core/core#Level-2-Core-DOM-createDocType</a> 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see <a 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * href="http://www.w3.org/TR/DOM-Level-2-Core/core#xpointer(id('Level-2-Core-DOM-createDocType')/raises/exception[@name='DOMException']/descr/p[substring-before(.,':')='NAMESPACE_ERR'])">http://www.w3.org/TR/DOM-Level-2-Core/core#xpointer(id('Level-2-Core-DOM-createDocType')/raises/exception[@name='DOMException']/descr/p[substring-before(.,':')='NAMESPACE_ERR'])</a> 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic final class CreateDocumentType extends DOMTestCase { 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DOMDocumentBuilderFactory factory; 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DocumentBuilder builder; 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void setUp() throws Exception { 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.setUp(); 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project factory = new DOMDocumentBuilderFactory(DOMDocumentBuilderFactory 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getConfiguration1()); 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project builder = factory.getBuilder(); 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception" + e.getMessage()); 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void tearDown() throws Exception { 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project factory = null; 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project builder = null; 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.tearDown(); 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Runs the test case. 79f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws Throwable 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Any uncaught exception causes test to fail 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testCreateDocumentType1() throws Throwable { 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String publicId = "STAFF"; 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String systemId = "staff.xml"; 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String malformedName = "prefix::local"; 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Document doc; 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DOMImplementation domImpl; 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project doc = (Document) load("staffNS", builder); 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project domImpl = doc.getImplementation(); 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean success = false; 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project domImpl.createDocumentType(malformedName, publicId, systemId); 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (DOMException ex) { 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project success = (ex.code == DOMException.NAMESPACE_ERR); 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("throw_NAMESPACE_ERR", success); 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testCreateDocumentType2() throws Throwable { 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String publicId = "http://www.localhost.com/"; 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String systemId = "myDoc.dtd"; 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String qualifiedName; 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Document doc; 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DOMImplementation domImpl; 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project List<String> illegalQNames = new ArrayList<String>(); 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:{"); 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:}"); 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:~"); 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:'"); 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:!"); 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:@"); 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:#"); 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:$"); 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:%"); 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:^"); 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:&"); 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:*"); 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:("); 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:)"); 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:+"); 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:="); 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:["); 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:]"); 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:\\"); 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:/"); 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:;"); 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:`"); 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:<"); 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:>"); 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:,"); 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:a "); 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project illegalQNames.add("edi:\""); 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project doc = (Document) load("staffNS", builder); 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int indexN1009A = 0; indexN1009A < illegalQNames.size(); indexN1009A++) { 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project qualifiedName = (String) illegalQNames.get(indexN1009A); 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project domImpl = doc.getImplementation(); 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean success = false; 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project domImpl.createDocumentType(qualifiedName, publicId, 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project systemId); 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (DOMException ex) { 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project success = (ex.code == DOMException.INVALID_CHARACTER_ERR); 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("throw_INVALID_CHARACTER_ERR", success); 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testCreateDocumentType3() throws Throwable { 157f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String qualifiedName = "prefix:myDoc"; 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String publicId = "http://www.localhost.com"; 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String systemId = "myDoc.dtd"; 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Document doc; 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DOMImplementation domImpl; 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DocumentType newType = null; 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String nodeName; 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String nodeValue; 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project doc = (Document) load("staffNS", builder); 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project domImpl = doc.getImplementation(); 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project newType = domImpl.createDocumentType(qualifiedName, publicId, systemId); 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project nodeName = newType.getNodeName(); 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("nodeName", "prefix:myDoc", nodeName); 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project nodeValue = newType.getNodeValue(); 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("nodeValue", nodeValue); 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testCreateDocumentType4() throws Throwable { 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String publicId = "http://www.example.com/"; 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String systemId = "myDoc.dtd"; 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DOMImplementation domImpl; 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project domImpl = builder.getDOMImplementation(); 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project { 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean success = false; 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project domImpl.createDocumentType("", publicId, systemId); 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (DOMException ex) { 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project success = (ex.code == DOMException.NAMESPACE_ERR); 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("throw_NAMESPACE_ERR", success); 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 193