Linux ubuntu 6.8.0-90-generic #91-Ubuntu SMP PREEMPT_DYNAMIC Tue Nov 18 14:14:30 UTC 2025 x86_64
nginx/1.24.0
: 67.217.245.49 | : 216.73.216.153
Cant Read [ /etc/named.conf ]
8.3.6
www-data
Bypass.pw
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
Backdoor Scanner
Backdoor Create
Alfa Webshell
CPANEL RESET
CREATE WP USER
README
+ Create Folder
+ Create File
/
usr /
share /
augeas /
lenses /
dist /
tests /
[ HOME SHELL ]
Name
Size
Permission
Action
test_access.aug
3.44
KB
-rw-r--r--
test_activemq_conf.aug
758
B
-rw-r--r--
test_activemq_xml.aug
1.63
KB
-rw-r--r--
test_afs_cellalias.aug
1.31
KB
-rw-r--r--
test_aliases.aug
2.99
KB
-rw-r--r--
test_anaconda.aug
2.07
KB
-rw-r--r--
test_anacron.aug
1.21
KB
-rw-r--r--
test_approx.aug
1.44
KB
-rw-r--r--
test_apt_update_manager.aug
1.12
KB
-rw-r--r--
test_aptcacherngsecurity.aug
1.17
KB
-rw-r--r--
test_aptconf.aug
5.26
KB
-rw-r--r--
test_aptpreferences.aug
1.86
KB
-rw-r--r--
test_aptsources.aug
3.42
KB
-rw-r--r--
test_authinfo2.aug
991
B
-rw-r--r--
test_authorized_keys.aug
4.47
KB
-rw-r--r--
test_authselectpam.aug
1.34
KB
-rw-r--r--
test_automaster.aug
1.53
KB
-rw-r--r--
test_automounter.aug
5.2
KB
-rw-r--r--
test_avahi.aug
545
B
-rw-r--r--
test_backuppchosts.aug
623
B
-rw-r--r--
test_bbhosts.aug
3.68
KB
-rw-r--r--
test_bootconf.aug
980
B
-rw-r--r--
test_build.aug
8.12
KB
-rw-r--r--
test_cachefilesd.aug
579
B
-rw-r--r--
test_carbon.aug
2.54
KB
-rw-r--r--
test_ceph.aug
4.86
KB
-rw-r--r--
test_cgconfig.aug
5.93
KB
-rw-r--r--
test_cgrules.aug
903
B
-rw-r--r--
test_channels.aug
4.72
KB
-rw-r--r--
test_chrony.aug
7.51
KB
-rw-r--r--
test_clamav.aug
8.48
KB
-rw-r--r--
test_cmdline.aug
1.01
KB
-rw-r--r--
test_cobblermodules.aug
620
B
-rw-r--r--
test_cobblersettings.aug
1.34
KB
-rw-r--r--
test_cockpit.aug
2.07
KB
-rw-r--r--
test_collectd.aug
1.3
KB
-rw-r--r--
test_cpanel.aug
1.62
KB
-rw-r--r--
test_cron.aug
1.96
KB
-rw-r--r--
test_cron_user.aug
779
B
-rw-r--r--
test_crypttab.aug
1.78
KB
-rw-r--r--
test_csv.aug
1.56
KB
-rw-r--r--
test_cups.aug
13.93
KB
-rw-r--r--
test_cyrus_imapd.aug
1.33
KB
-rw-r--r--
test_darkice.aug
575
B
-rw-r--r--
test_debctrl.aug
13.94
KB
-rw-r--r--
test_desktop.aug
1.23
KB
-rw-r--r--
test_devfsrules.aug
2.17
KB
-rw-r--r--
test_device_map.aug
797
B
-rw-r--r--
test_dhclient.aug
4.69
KB
-rw-r--r--
test_dhcpd.aug
15.07
KB
-rw-r--r--
test_dns_zone.aug
10.33
KB
-rw-r--r--
test_dnsmasq.aug
1.19
KB
-rw-r--r--
test_dovecot.aug
22.3
KB
-rw-r--r--
test_dpkg.aug
322
B
-rw-r--r--
test_dput.aug
3.37
KB
-rw-r--r--
test_erlang.aug
2.58
KB
-rw-r--r--
test_ethers.aug
1.4
KB
-rw-r--r--
test_exports.aug
1.69
KB
-rw-r--r--
test_fai_diskconfig.aug
15.04
KB
-rw-r--r--
test_fail2ban.aug
413
B
-rw-r--r--
test_fonts.aug
19.45
KB
-rw-r--r--
test_fstab.aug
4.45
KB
-rw-r--r--
test_fuse.aug
590
B
-rw-r--r--
test_gdm.aug
620
B
-rw-r--r--
test_getcap.aug
3.77
KB
-rw-r--r--
test_group.aug
1.09
KB
-rw-r--r--
test_grub.aug
10.67
KB
-rw-r--r--
test_grubenv.aug
2.44
KB
-rw-r--r--
test_gshadow.aug
359
B
-rw-r--r--
test_gtkbookmarks.aug
820
B
-rw-r--r--
test_host_conf.aug
834
B
-rw-r--r--
test_hostname.aug
103
B
-rw-r--r--
test_hosts.aug
1.78
KB
-rw-r--r--
test_hosts_access.aug
6.12
KB
-rw-r--r--
test_htpasswd.aug
468
B
-rw-r--r--
test_httpd.aug
16.32
KB
-rw-r--r--
test_inetd.aug
4.51
KB
-rw-r--r--
test_inifile.aug
11.64
KB
-rw-r--r--
test_inittab.aug
1.82
KB
-rw-r--r--
test_inputrc.aug
5.13
KB
-rw-r--r--
test_interfaces.aug
3.65
KB
-rw-r--r--
test_iproute2.aug
945
B
-rw-r--r--
test_iptables.aug
7.39
KB
-rw-r--r--
test_iscsid.aug
2.45
KB
-rw-r--r--
test_jaas.aug
5.35
KB
-rw-r--r--
test_jettyrealm.aug
982
B
-rw-r--r--
test_jmxaccess.aug
637
B
-rw-r--r--
test_jmxpassword.aug
653
B
-rw-r--r--
test_json.aug
17.26
KB
-rw-r--r--
test_kdump.aug
2.91
KB
-rw-r--r--
test_keepalived.aug
14.56
KB
-rw-r--r--
test_known_hosts.aug
1.79
KB
-rw-r--r--
test_koji.aug
1.65
KB
-rw-r--r--
test_krb5.aug
29.96
KB
-rw-r--r--
test_ldap.aug
398
B
-rw-r--r--
test_ldif.aug
3.88
KB
-rw-r--r--
test_ldso.aug
486
B
-rw-r--r--
test_lightdm.aug
3.98
KB
-rw-r--r--
test_limits.aug
1.04
KB
-rw-r--r--
test_login_defs.aug
528
B
-rw-r--r--
test_logrotate.aug
7.95
KB
-rw-r--r--
test_logwatch.aug
322
B
-rw-r--r--
test_lokkit.aug
2.1
KB
-rw-r--r--
test_lvm.aug
4.56
KB
-rw-r--r--
test_mailscanner.aug
32.15
KB
-rw-r--r--
test_mailscanner_rules.aug
2.6
KB
-rw-r--r--
test_masterpasswd.aug
3.21
KB
-rw-r--r--
test_mcollective.aug
1.2
KB
-rw-r--r--
test_mdadm_conf.aug
2.52
KB
-rw-r--r--
test_memcached.aug
1.15
KB
-rw-r--r--
test_mke2fs.aug
3.08
KB
-rw-r--r--
test_modprobe.aug
4.07
KB
-rw-r--r--
test_modules.aug
229
B
-rw-r--r--
test_modules_conf.aug
3.23
KB
-rw-r--r--
test_mongodbserver.aug
775
B
-rw-r--r--
test_monit.aug
1.03
KB
-rw-r--r--
test_multipath.aug
6.5
KB
-rw-r--r--
test_mysql.aug
8.75
KB
-rw-r--r--
test_nagioscfg.aug
2.95
KB
-rw-r--r--
test_nagiosobjects.aug
1.69
KB
-rw-r--r--
test_netmasks.aug
640
B
-rw-r--r--
test_networkmanager.aug
1.93
KB
-rw-r--r--
test_networks.aug
1.16
KB
-rw-r--r--
test_nginx.aug
7.64
KB
-rw-r--r--
test_nrpe.aug
2.13
KB
-rw-r--r--
test_nslcd.aug
12.84
KB
-rw-r--r--
test_nsswitch.aug
1.54
KB
-rw-r--r--
test_ntp.aug
5.09
KB
-rw-r--r--
test_ntpd.aug
1.87
KB
-rw-r--r--
test_odbc.aug
1.62
KB
-rw-r--r--
test_opendkim.aug
7.57
KB
-rw-r--r--
test_openshift_config.aug
3.64
KB
-rw-r--r--
test_openshift_http.aug
2.16
KB
-rw-r--r--
test_openshift_quickstarts.aug
12.42
KB
-rw-r--r--
test_openvpn.aug
28.09
KB
-rw-r--r--
test_oz.aug
611
B
-rw-r--r--
test_pagekite.aug
2.75
KB
-rw-r--r--
test_pam.aug
2.13
KB
-rw-r--r--
test_pamconf.aug
1010
B
-rw-r--r--
test_passwd.aug
2.44
KB
-rw-r--r--
test_pbuilder.aug
531
B
-rw-r--r--
test_pg_hba.aug
6.97
KB
-rw-r--r--
test_pgbouncer.aug
1.97
KB
-rw-r--r--
test_php.aug
1.4
KB
-rw-r--r--
test_phpvars.aug
1.63
KB
-rw-r--r--
test_postfix_access.aug
1.52
KB
-rw-r--r--
test_postfix_main.aug
1.03
KB
-rw-r--r--
test_postfix_master.aug
4.1
KB
-rw-r--r--
test_postfix_passwordmap.aug
1.31
KB
-rw-r--r--
test_postfix_sasl_smtpd.aug
530
B
-rw-r--r--
test_postfix_transport.aug
1.71
KB
-rw-r--r--
test_postfix_virtual.aug
1.23
KB
-rw-r--r--
test_postgresql.aug
8.18
KB
-rw-r--r--
test_properties.aug
3.62
KB
-rw-r--r--
test_protocols.aug
1.3
KB
-rw-r--r--
test_puppet.aug
547
B
-rw-r--r--
test_puppet_auth.aug
1.1
KB
-rw-r--r--
test_puppetfile.aug
4.45
KB
-rw-r--r--
test_puppetfileserver.aug
949
B
-rw-r--r--
test_pylonspaste.aug
1.73
KB
-rw-r--r--
test_pythonpaste.aug
1.23
KB
-rw-r--r--
test_qpid.aug
1.3
KB
-rw-r--r--
test_quote.aug
8.66
KB
-rw-r--r--
test_rabbitmq.aug
3.66
KB
-rw-r--r--
test_radicale.aug
1.04
KB
-rw-r--r--
test_rancid.aug
706
B
-rw-r--r--
test_redis.aug
8.74
KB
-rw-r--r--
test_reprepro_uploaders.aug
4.68
KB
-rw-r--r--
test_resolv.aug
1.91
KB
-rw-r--r--
test_rhsm.aug
4.46
KB
-rw-r--r--
test_rmt.aug
826
B
-rw-r--r--
test_rsyncd.aug
1.27
KB
-rw-r--r--
test_rsyslog.aug
7.06
KB
-rw-r--r--
test_rtadvd.aug
859
B
-rw-r--r--
test_rx.aug
4.12
KB
-rw-r--r--
test_samba.aug
3.52
KB
-rw-r--r--
test_schroot.aug
2.25
KB
-rw-r--r--
test_securetty.aug
636
B
-rw-r--r--
test_semanage.aug
1.72
KB
-rw-r--r--
test_services.aug
2.87
KB
-rw-r--r--
test_shadow.aug
2.01
KB
-rw-r--r--
test_shells.aug
348
B
-rw-r--r--
test_shellvars.aug
19.15
KB
-rw-r--r--
test_shellvars_list.aug
4.18
KB
-rw-r--r--
test_simplelines.aug
724
B
-rw-r--r--
test_simplevars.aug
994
B
-rw-r--r--
test_sip_conf.aug
3.61
KB
-rw-r--r--
test_slapd.aug
3.03
KB
-rw-r--r--
test_smbusers.aug
664
B
-rw-r--r--
test_solaris_system.aug
2.48
KB
-rw-r--r--
test_soma.aug
424
B
-rw-r--r--
test_sos.aug
1.16
KB
-rw-r--r--
test_spacevars.aug
431
B
-rw-r--r--
test_splunk.aug
2.96
KB
-rw-r--r--
test_squid.aug
5.09
KB
-rw-r--r--
test_ssh.aug
3.32
KB
-rw-r--r--
test_sshd.aug
6.42
KB
-rw-r--r--
test_sssd.aug
896
B
-rw-r--r--
test_star.aug
1.56
KB
-rw-r--r--
test_strongswan.aug
2.57
KB
-rw-r--r--
test_stunnel.aug
791
B
-rw-r--r--
test_subversion.aug
3.06
KB
-rw-r--r--
test_sudoers.aug
10.72
KB
-rw-r--r--
test_sysconfig.aug
4.1
KB
-rw-r--r--
test_sysconfig_route.aug
522
B
-rw-r--r--
test_sysctl.aug
2.47
KB
-rw-r--r--
test_syslog.aug
11.05
KB
-rw-r--r--
test_systemd.aug
8.71
KB
-rw-r--r--
test_termcap.aug
16.69
KB
-rw-r--r--
test_thttpd.aug
1.17
KB
-rw-r--r--
test_tinc.aug
725
B
-rw-r--r--
test_tmpfiles.aug
12.09
KB
-rw-r--r--
test_toml.aug
8.9
KB
-rw-r--r--
test_trapperkeeper.aug
4.15
KB
-rw-r--r--
test_tuned.aug
259
B
-rw-r--r--
test_up2date.aug
6.23
KB
-rw-r--r--
test_updatedb.aug
855
B
-rw-r--r--
test_util.aug
428
B
-rw-r--r--
test_vfstab.aug
2.79
KB
-rw-r--r--
test_vmware_config.aug
1.7
KB
-rw-r--r--
test_vsftpd.aug
2.49
KB
-rw-r--r--
test_webmin.aug
195
B
-rw-r--r--
test_wine.aug
5.58
KB
-rw-r--r--
test_xendconfsxp.aug
7.74
KB
-rw-r--r--
test_xinetd.aug
2.78
KB
-rw-r--r--
test_xml.aug
20.04
KB
-rw-r--r--
test_xorg.aug
2.51
KB
-rw-r--r--
test_xymon.aug
4.29
KB
-rw-r--r--
test_xymon_alerting.aug
7.44
KB
-rw-r--r--
test_yaml.aug
1.34
KB
-rw-r--r--
test_yum.aug
8.31
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : test_xml.aug
(* Module: Test_Xml Provides unit tests and examples for the <Xml> lens. *) module Test_Xml = (* View: knode A simple flag function Parameters: r:regexp - the pattern for the flag *) let knode (r:regexp) = [ key r ] (************************************************************************ * Group: Utilities lens *************************************************************************) (* let _ = print_regexp(lens_ctype(Xml.text)) let _ = print_endline "" *) (* Group: Comments *) (* Test: Xml.comment Comments get mapped into "#comment" nodes. *) test Xml.comment get "<!-- declarations for <head> & <body> -->" = { "#comment" = " declarations for <head> & <body> " } (* Test: Xml.comment This syntax is not understood. *) test Xml.comment get "<!-- B+, B, or B--->" = * (* Group: Prolog and declarations *) (* Test: Xml.prolog The XML prolog tag is mapped in a "#declaration" node, which contains an "#attribute" node with various attributes of the tag. *) test Xml.prolog get "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" = { "#declaration" { "#attribute" { "version" = "1.0" } { "encoding" = "UTF-8" } } } (* Test: Xml.decl_def_item !ELEMENT declaration tags are mapped in "!ELEMENT" nodes. The associated declaration attribute is mapped in a "#decl" subnode. *) test Xml.decl_def_item get "<!ELEMENT greeting (#PCDATA)>" = { "!ELEMENT" = "greeting" { "#decl" = "(#PCDATA)" } } (* Test: Xml.decl_def_item !ENTITY declaration tags are mapped in "!ENTITY" nodes. The associated declaration attribute is mapped in a "#decl" subnode. *) test Xml.decl_def_item get "<!ENTITY da \"
\">" = { "!ENTITY" = "da" { "#decl" = "
" } } (* Test: Xml.doctype !DOCTYPE tags are mapped in "!DOCTYPE" nodes. The associated system attribute is mapped in a "SYSTEM" subnode. *) test Xml.doctype get "<!DOCTYPE greeting:foo SYSTEM \"hello.dtd\">" = { "!DOCTYPE" = "greeting:foo" { "SYSTEM" = "hello.dtd" } } (* Test: Xml.doctype This is an example of a !DOCTYPE tag with !ELEMENT children tags. *) test Xml.doctype get "<!DOCTYPE foo [ <!ELEMENT bar (#PCDATA)> <!ELEMENT baz (bar)* > ]>" = { "!DOCTYPE" = "foo" { "!ELEMENT" = "bar" { "#decl" = "(#PCDATA)" } } { "!ELEMENT" = "baz" { "#decl" = "(bar)*" } } } (* Group: Attributes *) (* Variable: att_def1 *) let att_def1 = "<!ATTLIST termdef id ID #REQUIRED name CDATA #IMPLIED>" (* Variable: att_def2 *) let att_def2 = "<!ATTLIST list type (bullets|ordered|glossary) \"ordered\">" (* Variable: att_def3 *) let att_def3 = "<!ATTLIST form method CDATA #FIXED \"POST\">" (* Test: Xml.att_list_def *) test Xml.att_list_def get att_def1 = { "!ATTLIST" = "termdef" { "1" { "#name" = "id" } { "#type" = "ID" } { "#REQUIRED" } } { "2" { "#name" = "name" } { "#type" = "CDATA" } { "#IMPLIED" } } } (* Test: Xml.att_list_def *) test Xml.att_list_def get att_def2 = { "!ATTLIST" = "list" { "1" { "#name" = "type" } { "#type" = "(bullets|ordered|glossary)" } { "#FIXED" = "ordered" } } } (* Test: Xml.att_list_def *) test Xml.att_list_def get att_def3 = { "!ATTLIST" = "form" { "1" { "#name" = "method" } { "#type" = "CDATA" } { "#FIXED" = "POST" } } } (* Test: Xml.notation_def *) test Xml.notation_def get "<!NOTATION not3 SYSTEM \"\">" = { "!NOTATION" = "not3" { "SYSTEM" = "" } } (* Variable: cdata1 *) let cdata1 = "<![CDATA[testing]]>" (* Test: Xml.cdata *) test Xml.cdata get cdata1 = { "#CDATA" = "testing" } (* Variable: attr1 *) let attr1 = " attr1=\"value1\" attr2=\"value2\"" (* Variable: attr2 *) let attr2 = " attr2=\"foo\"" (* Test: Xml.attributes *) test Xml.attributes get attr1 = { "#attribute" { "attr1" = "value1" } { "attr2" = "value2" } } (* Test: Xml.attributes *) test Xml.attributes get " refs=\"A1\nA2 A3\"" = { "#attribute" { "refs" = "A1\nA2 A3" } } (* Test: Xml.attributes *) test Xml.attributes put attr1 after rm "/#attribute[1]"; set "/#attribute/attr2" "foo" = attr2 (* test quoting *) (* well formed values *) test Xml.attributes get " attr1=\"value1\"" = { "#attribute" { "attr1" = "value1" } } test Xml.attributes get " attr1='value1'" = { "#attribute" { "attr1" = "value1" } } test Xml.attributes get " attr1='va\"lue1'" = { "#attribute" { "attr1" = "va\"lue1" } } test Xml.attributes get " attr1=\"va'lue1\"" = { "#attribute" { "attr1" = "va'lue1" } } (* illegal as per the XML standard *) test Xml.attributes get " attr1=\"va\"lue1\"" = * test Xml.attributes get " attr1='va'lue1'" = * (* malformed values *) test Xml.attributes get " attr1=\"value1'" = * test Xml.attributes get " attr1='value1\"" = * (* Group: empty *) (* Variable: empty1 *) let empty1 = "<a/>" (* Variable: empty2 *) let empty2 = "<a foo=\"bar\"/>" (* Variable: empty3 *) let empty3 = "<a foo=\"bar\"></a>\n" (* Variable: empty4 *) let empty4 = "<a foo=\"bar\" far=\"baz\"/>" (* Test: Xml.empty_element *) test Xml.empty_element get empty1 = { "a" = "#empty" } (* Test: Xml.empty_element *) test Xml.empty_element get empty2 = { "a" = "#empty" { "#attribute" { "foo" = "bar"} } } (* Test: Xml.empty_element *) test Xml.empty_element put empty1 after set "/a/#attribute/foo" "bar" = empty2 (* Test: Xml.empty_element The attribute node must be the first child of the element *) test Xml.empty_element put empty1 after set "/a/#attribute/foo" "bar"; set "/a/#attribute/far" "baz" = empty4 (* Test: Xml.content *) test Xml.content put "<a><b/></a>" after clear "/a/b" = "<a><b></b>\n</a>" (* Group: Full lens *) (* Test: Xml.lns *) test Xml.lns put "<a></a >" after set "/a/#text[1]" "foo"; set "/a/#text[2]" "bar" = "<a>foobar</a >" (* Test: Xml.lns *) test Xml.lns get "<?xml version=\"1.0\"?> <!DOCTYPE catalog PUBLIC \"-//OASIS//DTD XML Catalogs V1.0//EN\" \"file:///usr/share/xml/schema/xml-core/catalog.dtd\"> <doc/>" = { "#declaration" { "#attribute" { "version" = "1.0" } } } { "!DOCTYPE" = "catalog" { "PUBLIC" { "#literal" = "-//OASIS//DTD XML Catalogs V1.0//EN" } { "#literal" = "file:///usr/share/xml/schema/xml-core/catalog.dtd" } } } { "doc" = "#empty" } (* Test: Xml.lns *) test Xml.lns get "<oor:component-data xmlns:oor=\"http://openoffice.org/2001/registry\"/> " = { "oor:component-data" = "#empty" { "#attribute" { "xmlns:oor" = "http://openoffice.org/2001/registry" } } } (* Variable: input1 *) let input1 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <html>\r <head> <title>Wiki</title> </head> <body> <h1>Augeas</h1> <p class=\"main\">Augeas is now able to parse XML files!</p> <ul> <li>Translate from XML to a tree syntax</li> <li>Translate from the tree back to XML</li> <!-- this is some comment --> <li>this</li> </ul> </body> </html> " (* Test: Xml.doc Test <input1> with <Xml.doc> *) test Xml.doc get input1 = { "#declaration" { "#attribute" { "version" = "1.0" } { "encoding" = "UTF-8" } } } { "html" { "#text" = "\r\n " } { "head" { "#text" = "\n " } { "title" { "#text" = "Wiki" } } { "#text" = " " } } { "#text" = " " } { "body" { "#text" = " " } { "h1" { "#text" = "Augeas" } } { "#text" = " " } { "p" { "#attribute" { "class" = "main" } } { "#text" = "Augeas is now able to parse XML files!" } } { "#text" = " " } { "ul" { "#text" = "\n " } { "li" { "#text" = "Translate from XML to a tree syntax" } } { "#text" = " " } { "li" { "#text" = "Translate from the tree back to XML" } } { "#text" = " " } { "#comment" = " this is some comment " } { "#text" = " " } { "li" { "#text" = "this" } } { "#text" = " " } } { "#text" = " " } } } (* Test: Xml.doc Modify <input1> with <Xml.doc> *) test Xml.doc put input1 after rm "/html/body" = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <html>\r <head> <title>Wiki</title> </head> </html> " (* Variable: ul1 *) let ul1 = " <ul> <li>test1</li> <li>test2</li> <li>test3</li> <li>test4</li> </ul> " test Xml.doc get ul1 = { "ul" { "#text" = " " } { "li" { "#text" = "test1" } } { "#text" = " " } { "li" { "#text" = "test2" } } { "#text" = " " } { "li" { "#text" = "test3" } } { "#text" = " " } { "li" { "#text" = "test4" } } } test Xml.doc put ul1 after set "/ul/li[3]/#text" "bidon" = " <ul> <li>test1</li> <li>test2</li> <li>bidon</li> <li>test4</li> </ul> " test Xml.doc put ul1 after rm "/ul/li[2]" = " <ul> <li>test1</li> <li>test3</li> <li>test4</li> </ul> " (* #text nodes don't move when inserting a node, the result depends on where the node is added *) test Xml.doc put ul1 after insb "a" "/ul/li[2]" = " <ul> <li>test1</li> <a></a> <li>test2</li> <li>test3</li> <li>test4</li> </ul> " test Xml.doc put ul1 after insa "a" "/ul/li[1]" = " <ul> <li>test1</li> <a></a> <li>test2</li> <li>test3</li> <li>test4</li> </ul> " (* Attributes must be added before text nodes *) test Xml.doc put ul1 after insb "#attribute" "/ul/li[2]/#text"; set "/ul/li[2]/#attribute/bidon" "gazou"; set "/ul/li[2]/#attribute/foo" "bar" = " <ul> <li>test1</li> <li bidon=\"gazou\" foo=\"bar\">test2</li> <li>test3</li> <li>test4</li> </ul> " (* if empty element is allowed to be as root, this test triggers error *) test Xml.lns get "<doc> <a><c/><b><c/></b><c/><c/><a></a></a> </doc>" = { "doc" { "#text" = "\n" } { "a" { "c" = "#empty" } { "b" { "c" = "#empty" } } { "c" = "#empty" } { "c" = "#empty" } { "a" } } } let p01pass2 = "<?PI before document element?> <!-- comment after document element--> <?PI before document element?> <!-- comment after document element--> <?PI before document element?> <!-- comment after document element--> <?PI before document element?> <!DOCTYPE doc [ <!ELEMENT doc ANY> <!ELEMENT a ANY> <!ELEMENT b ANY> <!ELEMENT c ANY> ]> <doc> <a><b><c/></b></a> </doc> <!-- comment after document element--> <?PI after document element?> <!-- comment after document element--> <?PI after document element?> <!-- comment after document element--> <?PI after document element?> " test Xml.lns get p01pass2 = { "#pi" { "#target" = "PI" } { "#instruction" = "before document element" } } { "#comment" = " comment after document element" } { "#pi" { "#target" = "PI" } { "#instruction" = "before document element" } } { "#comment" = " comment after document element" } { "#pi" { "#target" = "PI" } { "#instruction" = "before document element" } } { "#comment" = " comment after document element" } { "#pi" { "#target" = "PI" } { "#instruction" = "before document element" } } { "!DOCTYPE" = "doc" { "!ELEMENT" = "doc" { "#decl" = "ANY" } } { "!ELEMENT" = "a" { "#decl" = "ANY" } } { "!ELEMENT" = "b" { "#decl" = "ANY" } } { "!ELEMENT" = "c" { "#decl" = "ANY" } } } { "doc" { "#text" = " " } { "a" { "b" { "c" = "#empty" } } } } { "#comment" = " comment after document element" } { "#pi" { "#target" = "PI" } { "#instruction" = "after document element" } } { "#comment" = " comment after document element" } { "#pi" { "#target" = "PI" } { "#instruction" = "after document element" } } { "#comment" = " comment after document element" } { "#pi" { "#target" = "PI" } { "#instruction" = "after document element" } } (* various valid Name constructions *) test Xml.lns get "<doc>\n<A:._-0/>\n<::._-0/>\n<_:._-0/>\n<A/>\n<_/>\n<:/>\n</doc>" = { "doc" { "#text" = "\n" } { "A:._-0" = "#empty" } { "::._-0" = "#empty" } { "_:._-0" = "#empty" } { "A" = "#empty" } { "_" = "#empty" } { ":" = "#empty" } } test Xml.lns get "<doc> <abcdefghijklmnopqrstuvwxyz/> <ABCDEFGHIJKLMNOPQRSTUVWXYZ/> <A01234567890/> <A.-:/> </doc>" = { "doc" { "#text" = "\n" } { "abcdefghijklmnopqrstuvwxyz" = "#empty" } { "ABCDEFGHIJKLMNOPQRSTUVWXYZ" = "#empty" } { "A01234567890" = "#empty" } { "A.-:" = "#empty" } } let p06fail1 = "<!--non-validating processors may pass this instance because they don't check the IDREFS attribute type--> <!DOCTYPE doc [ <!ELEMENT doc (a|refs)*> <!ELEMENT a EMPTY> <!ELEMENT refs EMPTY> <!ATTLIST refs refs IDREFS #REQUIRED> <!ATTLIST a id ID #REQUIRED> ]> <doc> <a id=\"A1\"/><a id=\"A2\"/><a id=\"A3\"/> <refs refs=\"\"/> </doc>" (* we accept this test because we do not verify XML references *) test Xml.lns get p06fail1 = { "#comment" = "non-validating processors may pass this instance because they don't check the IDREFS attribute type" } { "!DOCTYPE" = "doc" { "!ELEMENT" = "doc" { "#decl" = "(a|refs)*" } } { "!ELEMENT" = "a" { "#decl" = "EMPTY" } } { "!ELEMENT" = "refs" { "#decl" = "EMPTY" } } { "!ATTLIST" = "refs" { "1" { "#name" = "refs" } { "#type" = "IDREFS" } { "#REQUIRED" } } } { "!ATTLIST" = "a" { "1" { "#name" = "id" } { "#type" = "ID" } { "#REQUIRED" } } } } { "doc" { "#text" = " " } { "a" = "#empty" { "#attribute" { "id" = "A1" } } } { "a" = "#empty" { "#attribute" { "id" = "A2" } } } { "a" = "#empty" { "#attribute" { "id" = "A3" } } } { "refs" = "#empty" { "#attribute" { "refs" = "" } } } } (* we accept dquote, but not single quotes, because of resulting ambiguity *) let p10pass1_1 = "<doc><A a=\"asdf>'">\nasdf\n ?>%\"/></doc>" let p10pass1_2 = "<doc><A a='\"\">'"'/></doc>" test Xml.lns get p10pass1_1 = { "doc" { "A" = "#empty" { "#attribute" { "a" = "asdf>'">\nasdf\n ?>%" } } } } test Xml.lns get p10pass1_2 = { "doc" { "A" = "#empty" { "#attribute" { "a" = "\"\">'"" } } } } (* here again, test exclude single quote *) let p11pass1 = "<!--Inability to resolve a notation should not be reported as an error--> <!DOCTYPE doc [ <!ELEMENT doc EMPTY> <!NOTATION not1 SYSTEM \"a%a&b�<!ELEMENT<!--<?</>?>/\''\"> <!NOTATION not3 SYSTEM \"\"> ]> <doc></doc>" test Xml.lns get p11pass1 = { "#comment" = "Inability to resolve a notation should not be reported as an error" } { "!DOCTYPE" = "doc" { "!ELEMENT" = "doc" { "#decl" = "EMPTY" } } { "!NOTATION" = "not1" { "SYSTEM" = "a%a&b�<!ELEMENT<!--<?</>?>/\''" } } { "!NOTATION" = "not3" { "SYSTEM" = "" } } } { "doc" } test Xml.lns get "<doc>a%b%</doc></doc>]]<&</doc>" = { "doc" { "#text" = "a%b%</doc></doc>]]<&" } } let p15pass1 = "<!--a <!DOCTYPE <?- ]]>-<[ CDATA [ \"- -'- -<doc>--> <!----> <doc></doc>" test Xml.lns get p15pass1 = { "#comment" = "a <!DOCTYPE <?- ]]>-<[ CDATA [ \"- -'- -<doc>" } { "#comment" = "" } { "doc" } let p22pass3 = "<?xml version=\"1.0\"?> <!--comment--> <?pi some instruction ?> <doc><?pi?></doc>" test Xml.lns get p22pass3 = { "#declaration" { "#attribute" { "version" = "1.0" } } } { "#comment" = "comment" } { "#pi" { "#target" = "pi" } { "#instruction" = "some instruction" } } { "doc" { "#pi" { "#target" = "pi" } } } let p25pass2 = "<?xml version = \"1.0\"?> <doc></doc>" test Xml.lns get p25pass2 = { "#declaration" { "#attribute" { "version" = "1.0" } } } { "doc" } test Xml.lns get "<!DOCTYPE doc [ <!ELEMENT doc EMPTY> ]> <doc></doc>" = { "!DOCTYPE" = "doc" { "!ELEMENT" = "doc" { "#decl" = "EMPTY" } } } { "doc" } test Xml.lns get "<doc></doc \n>" = { "doc" } test Xml.lns get "<a><doc att=\"val\" \natt2=\"val2\" att3=\"val3\"/></a>" = { "a" { "doc" = "#empty" { "#attribute" { "att" = "val" } { "att2" = "val2" } { "att3" = "val3" } } } } test Xml.lns get "<doc/>" = { "doc" = "#empty" } test Xml.lns get "<a><![CDATA[Thu, 13 Feb 2014 12:22:35 +0000]]></a>" = { "a" { "#CDATA" = "Thu, 13 Feb 2014 12:22:35 +0000" } } (* failure tests *) (* only one document element *) test Xml.lns get "<doc></doc><bad/>" = * (* document element must be complete *) test Xml.lns get "<doc>" = * (* accept empty document *) test Xml.lns get "\n" = {} (* malformed element *) test Xml.lns get "<a><A@/></a>" = * (* a Name cannot start with a digit *) test Xml.lns get "<a><0A/></a>" = * (* no space before "CDATA" *) test Xml.lns get "<doc><![ CDATA[a]]></doc>" = * (* no space after "CDATA" *) test Xml.lns get "<doc><![CDATA [a]]></doc>" = * (* FIXME: CDSect's can't nest *) test Xml.lns get "<doc> <![CDATA[ <![CDATA[XML doesn't allow CDATA sections to nest]]> ]]> </doc>" = { "doc" { "#text" = "\n" } { "#CDATA" = "\n<![CDATA[XML doesn't allow CDATA sections to nest" } { "#text" = "\n]]" } { "#text" = ">\n" } } (* Comment is illegal in VersionInfo *) test Xml.lns get "<?xml version <!--bad comment--> =\"1.0\"?> <doc></doc>" = * (* only declarations in DTD *) test Xml.lns get "<!DOCTYPE doc [ <!ELEMENT doc EMPTY> <doc></doc> ]>" = * (* we do not support external entities *) test Xml.lns get "<!DOCTYPE doc [ <!ENTITY % eldecl \"<!ELEMENT doc EMPTY>\"> %eldecl; ]> <doc></doc>" = * (* Escape character in attributes *) test Xml.lns get "<a password=\"my\!pass\" />" = { "a" = "#empty" { "#attribute" { "password" = "my\!pass" } } } test Xml.lns put "" after set "/a" "#empty" = "<a/>\n" (* Issue #142 *) test Xml.entity_def get "<!ENTITY open-hatch SYSTEM \"http://examplecom/OpenHatch.xml\">" = { "!ENTITY" = "open-hatch" { "SYSTEM" { "#systemliteral" = "http://examplecom/OpenHatch.xml" } } } test Xml.entity_def get "<!ENTITY open-hatch PUBLIC \"-//Textuality//TEXT Standard open-hatch boilerplate//EN\" \"http://www.textuality.com/boilerplate/OpenHatch.xml\">" = { "!ENTITY" = "open-hatch" { "PUBLIC" { "#pubidliteral" = "-//Textuality//TEXT Standard open-hatch boilerplate//EN" } { "#systemliteral" = "http://www.textuality.com/boilerplate/OpenHatch.xml" } } } let dt_with_entities = "<!DOCTYPE server-xml [ <!ENTITY sys-ent SYSTEM \"sys-file.xml\"> <!ENTITY pub-ent PUBLIC \"-//something public//TEXT\" \"pub-file.xml\"> ]>" test Xml.doctype get dt_with_entities = { "!DOCTYPE" = "server-xml" { "!ENTITY" = "sys-ent" { "SYSTEM" { "#systemliteral" = "sys-file.xml" } } } { "!ENTITY" = "pub-ent" { "PUBLIC" { "#pubidliteral" = "-//something public//TEXT" } { "#systemliteral" = "pub-file.xml" } } } } test Xml.doctype put dt_with_entities after rm "/\!DOCTYPE/\!ENTITY[2]"; set "/\!DOCTYPE/\!ENTITY[. = \"sys-ent\"]/SYSTEM/#systemliteral" "other-file.xml" = "<!DOCTYPE server-xml [ <!ENTITY sys-ent SYSTEM \"other-file.xml\"> ]>" test Xml.lns get (dt_with_entities . "<body></body>") = { "!DOCTYPE" = "server-xml" { "!ENTITY" = "sys-ent" { "SYSTEM" { "#systemliteral" = "sys-file.xml" } } } { "!ENTITY" = "pub-ent" { "PUBLIC" { "#pubidliteral" = "-//something public//TEXT" } { "#systemliteral" = "pub-file.xml" } } } } { "body" } test Xml.lns put "<?xml version=\"1.0\"?> <body> </body>" after insa "!DOCTYPE" "#declaration"; set "\\!DOCTYPE" "Server"; set "\\!DOCTYPE/\\!ENTITY" "resourcesFile"; set "\\!DOCTYPE/\\!ENTITY/SYSTEM/#systemliteral" "data.xml" = "<?xml version=\"1.0\"?><!DOCTYPE Server[ <!ENTITY resourcesFile SYSTEM \"data.xml\">]> <body>\n</body>"
Close