public void DoctypeParser() { var result = grammar.DoctypeDecl( Source( "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/2002/REC-xhtml1-20020801/DTD/xhtml1-strict.dtd\">")); Assert.IsNotNull(result); Assert.AreEqual("html", result.Value.Name); Assert.AreEqual("PUBLIC", result.Value.ExternalId.ExternalIdType); Assert.AreEqual("-//W3C//DTD XHTML 1.0 Strict//EN", result.Value.ExternalId.PublicId); Assert.AreEqual("http://www.w3.org/TR/2002/REC-xhtml1-20020801/DTD/xhtml1-strict.dtd", result.Value.ExternalId.SystemId); var result2 = grammar.DoctypeDecl( Source( "<!DOCTYPE html PUBLIC \"http://www.w3.org/TR/2002/REC-xhtml1-20020801/DTD/xhtml1-strict.dtd\">")); Assert.IsNull(result2); var result3 = grammar.DoctypeDecl( Source( "<!DOCTYPE html SYSTEM 'hello world'>")); Assert.IsNotNull(result); Assert.AreEqual("html", result3.Value.Name); Assert.AreEqual("SYSTEM", result3.Value.ExternalId.ExternalIdType); Assert.AreEqual("hello world", result3.Value.ExternalId.SystemId); var result4 = grammar.DoctypeDecl( Source( "<!DOCTYPE foo >")); Assert.IsNotNull(result4); Assert.AreEqual("foo", result4.Value.Name); Assert.IsNull(result4.Value.ExternalId); }