<?xml version="1.0" encoding="us-ascii" ?>
<!--

    Copyright (c) 2001-2013 Oracle and/or its affiliates. All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions
    are met:

      - Redistributions of source code must retain the above copyright
        notice, this list of conditions and the following disclaimer.

      - Redistributions in binary form must reproduce the above copyright
        notice, this list of conditions and the following disclaimer in the
        documentation and/or other materials provided with the distribution.

      - Neither the name of Oracle nor the names of its
        contributors may be used to endorse or promote products derived
        from this software without specific prior written permission.

    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
    IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
    THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-->

<suite>

<!--
	untested types
		
-->

<case name="test for QName">
	<!--
		test suite provides ValidationContextProvideder that
		resolves prefixes as follows:
		
		foo     -> http://foo.examples.com/
		bar     -> http://bar.examples.com/
		baz     -> http://bar.examples.com/
		emp     -> http://empty.examples.com/
		<empty> -> http://empty.examples.com/
	-->
	
	<value>  foo:head </value>
	<value > foo:mod</value>
	<value  >bar:role</value>
	<value>  baz:role  </value>
	<value > ascii </value>
	
	<answer for="QName"				>ooooo</answer>
	
	<comment><!-- semantics of "length" for QName is unclear. -->
		<choice>
			<!-- length -->
			<facet	answer=			"o.oo."	name="length"	value="8" />
			<facet	answer=			"....o"	name="length"	value="5" />
			
			<!-- min/maxLength -->
			<combination>
				<choice>
					<facet answer=	"ooooo"	name="minLength"	value="5" />
					<facet answer=	"oooo."	name="minLength"	value="6" />
				</choice>
				<choice>
					<facet answer=	"o.ooo"	name="maxLength"	value="7" />
					<facet answer=	"ooooo"	name="maxLength"	value="8" />
				</choice>
			</combination>
		</choice>
	</comment>
	
	<facets><combination>
		
		<!-- pattern -->
		<combination mode="or">
			<facet answer=			"oo..."	name="pattern"	value="foo:.*" />
			<facet answer=			"..oo."	name="pattern"	value="ba.:.*" />
		</combination>
		
		<!-- enumeration -->
		<combination mode="or">
			<facet answer=			"..oo." name="enumeration" value="bar:role" />
			<facet answer=			"....o" name="enumeration" value="emp:ascii" />
		</combination>
	</combination></facets>
	
	<wrongs>
		<value>:foo</value>
		<value>foo:</value>
		<value>not:a:qname</value>
		<value>unknown:prefix</value>
		<value>12345</value>	<!-- not even a Name -->
		<value>:</value>
		<value>-joe</value>
	</wrongs>
</case>


<case name="test for anyURI">
	<value>http://www.swiftinc.co.jp/	</value>
	<value>http://www.swiftinc.co.jp/mypage.html#fragment	</value>
	<value>ftp://user:pwd@www.swiftinc.co.jp/?query=a+b-c	</value>
	<value>telnet://192.168.0.1:1234/ip/v4#address </value>
	
	<!-- IPv6 addresses (taken from RFC2732) -->
	<value>http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html</value>
	<value>http://[1080:0:0:0:8:800:200C:417A]/index.html</value>
	<value>http://[3ffe:2a00:100:7031::1]</value>
	<value>http://[1080::8:800:200C:417A]/foo</value>
	<value>http://[::192.9.5.5]/ipng</value>
	<value>http://[::FFFF:129.144.52.38]:80/index.html</value>
	<value>http://[2010:836B:4179::836B:4179]</value>
	

	<!-- examples from RFC2396 -->
	<value>ftp://ftp.is.co.za/rfc/rfc1808.txt</value>
	<value>gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles</value>
	<value>http://www.math.uio.no/faq/compression-faq/part1.html</value>
	<value>mailto:mduerst@ifi.unizh.ch</value>
	<value>news:comp.infosystems.www.servers.unix</value>
	<value>telnet://melvyl.ucop.edu/</value>
	
	<!-- relative URIs taken from http://www.ics.uci.edu/~fielding/url/test1.html 40 items. -->
	<value>g:h</value>
	<value>g</value>
	<value>./g</value>
	<value>g/</value>
	<value>/g</value>
	<value>//g</value>
	<value>g?y</value>
	<value>#s</value>
	<value>g#s</value>
	
	<value>g?y#s</value>
	<value>;x</value>
	<value>g;x</value>
	<value>g;x?y#s</value>
	<value>.</value>
	<value>./</value>
	<value>..</value>
	<value>../g</value>
	<value>../../</value>
	<value>../../g</value>
	
	<value>../../../g</value>
	<value>../../../../g</value>
	<value>/./g</value>
	<value>/../g</value>
	<value>g.</value>
	<value>.g</value>
	<value>g..</value>
	<value>..g</value>
	<value>./../g</value>
	<value>./g/.</value>
	
	<value>g/./h</value>
	<value>g/../h</value>
	<value>g;x=1/./y</value>
	<value>g;x=1/../y</value>
	<value>g?y/./x</value>
	<value>g?y/../x</value>
	<value>g#s/./x</value>
	<value>g#s/../x</value>
	<value>http:g</value>
	<value>http:</value>
	
	<!-- ad hoc test -->
	<!-- <scheme>:<opaque_part> -->
	<value>		x56:-_.!*'();/?:@&amp;=+$, </value>
	
	<answer for="anyURI"		>oooo ooooooo oooooo  ooooooooo oooooooooo oooooooooo ooooooooo.  o</answer>
	
	<facets><combination>
		<choice>
			<!-- length related facet -->
			<facet answer=		".... ....... ......  o.o..oo.o ..o....... ......oo.. ..........  ."	name="length" value="3" />
			<combination>
				<facet answer=	"oooo ooooooo oooooo  ......... o..o....oo oo.o....oo oooooooooo  o"	name="minLength" value="5" />
				<facet answer=	".... ....... ......  ooooooooo oooooooooo o.oooooooo oooooooooo  ."	name="maxLength" value="10" />
			</combination>
		</choice>
		
		<combination mode="or">
			<facet answer=		"oo.. ooooooo ..o...  ......... .......... .......... ........oo  ."	name="pattern" value="h.*" />
			<facet answer=		"oooo ooooooo ooo..o  ......... .......... .......... ..........  ."	name="pattern" value=".+//.+" />
		</combination>
	</combination></facets>
	
	<wrongs>
		<!--	wrong scheme -->
		<value>123://mydomain.com/</value>
<!--		<value>http://no.space.com/allowed in/URI</value>	-->
<!-- character escape makes the above case valid -->
		
		
		<!-- surprisingly, the following URL is valid
		
		<value> http://12345.67/ </value>
		
		because it can be interpreted as 
  
	absoluteURI
->	scheme ":" hier_part
->	"http:" abs_path
->	"http" ":" "/" path_segments
->	"http" ":" "/" segment ("/" segment )*
->	"http" ":" "/" segment "/" segment "/" segment
->	"http" ":" "/"         "/" pchar*  "/"
->	"http" ":" "/"         "/" "12345.678" "/"
->	"http://12345.678/"

	In fact, any net_path production but IPv6addresses
	can be accepted by this production.
-->
	</wrongs>
</case>

<case name="test for day">
	<value> ---01 </value>
	<value> ---02 </value>
	<value> ---05 </value>
	<value> ---28 </value>
	<value> ---29 </value>
	<value> ---30 </value>
	<value> ---31 </value>
	
	<value> ---10  </value>
	<value> ---10-14:00 </value>
	<value> ---10-08:00 </value>
	<value> ---10Z </value>
	<value> ---10+05:00 </value>
	<value> ---10+09:00 </value>
	
	<answer for="gDay"			>ooooooo oooooo</answer>
	
	<facets><combination>
		<combination mode="or">
			<facet answer=		"ooo.... ......" name="pattern" value="---0." />
			<facet answer=		"....... oooooo" name="pattern" value=".*10.*" />
		</combination>
<!--	order relation is broken
		note that value of "value" attribute is modified to make it commentable.
		remove \ when you use them.
		<combination mode="or">
			<facet answer=		"....... ......" name="enumeration" value="-\-\-01Z" />
			<facet answer=		"....... .o...." name="enumeration" value="-\-\-09+10:00" />
		</combination>
		<choice>
			<facet answer=		"..ooooo oooooo" name="minInclusive" value="-\-\-05" />
			<facet answer=		"...oooo oooooo" name="minExclusive" value="-\-\-05" />
			<facet answer=		"...oooo o....." name="minInclusive" value="-\-\-10" />
		</choice>
-->
	</combination></facets>
	
	<wrongs>
		<value> ---10-5:00 </value>
		<value> 10 </value>
		<value> ---1 </value>
		<value> ---00 </value>
		<value> ---32 </value>
	</wrongs>
</case>

<case name="test for anyURI(2)">
	<value> http://&#x125;.gr.jp/" </value>
	<value> http://&#x937;.gr.jp/" </value>
	<value> http://&#x29C3;.gr.jp/" </value>
	
	<answer for="anyURI"		>ooo</answer>
	
	<facets>
		<facet answer="ooo"	name="pattern" value=".*" />
	</facets>
	
	<wrongs />
</case>

<case name="test for dateTime">
	<value>2001-01-01T00:00:00-14:00</value>
	<value>2001-01-01T00:00:00-02:00</value>
	<value>2001-01-01T00:00:00</value>
	<value>2001-01-01T00:00:00Z</value>
	<value>2001-01-01T00:00:00+02:00</value>
	<value>2001-01-01T00:00:00+14:00</value>
	
	<!-- abuse -->
	<value>9999999999999999999999999-05-13T02:14:00Z</value>
	<value>2001-01-01T05:12:13.0000000000000000000000000000000000000000000001</value>
	
	<answer for="dateTime"		>oooooo oo</answer>
	
	<facets>
		<facet		answer=		"oooooo oo" name="pattern" value=".*" />
	</facets>
	
	<wrongs>
		<value>0000-01-01T12:12:12Z</value>	<!-- no year 0 -->
		<value>1999-02-29T10:00:00Z</value> <!-- leap year related -->
	</wrongs>
</case>
	
	<comment>
<case name="simple test for duration">
	<value>P1Y1M1DT1H1M1.1111S</value>
	<value>-P123Y</value>
	
	<!-- truncated forms -->
	<value>P1YT1S</value>
	
	<answer for="duration"		>oo o</answer>
	
	<facets>
		<facet		answer=		"oo o" name="pattern" value=".*" />
	</facets>
	
	<wrongs>
		<value>P-123Y</value>	<!-- malplaced '-' -->
		<value>P5.2D</value>	<!-- only seconds have fraction -->
		<value>P123YT</value>	<!-- T is unnecessary -->
		<value>P52S</value>		<!-- T is necessary -->
	</wrongs>
</case>
</comment>

<case name="test for time">
	<!-- ad hoc values -->
	<value>00:00:00</value>
	<value>08:00:00Z</value>
	<value> 12:15:32-08:00 </value>
	
	<value>15:00:00Z</value>
	
	<answer for="time"			>ooo o</answer>
	
	<facets>
<!-- comparison relation is broken
		<combination mode="or">
			<facet answer=			".o. ." name="enumeration" value="09:00:00+01:00" />
			<facet answer=			"... o" name="enumeration" value="00:00:00-09:00" />
		</combination>
-->
			<facet answer=			"... ." name="enumeration" value="00:00:00Z" />
		
	</facets>
	
	<wrongs>
		<!-- truncated forms -->
		<value>1:00</value>
		<value>01:00</value>
		<value>1:00:00</value>
		
		<!-- out of range -->
		<value>-01:00:00</value>
		<value> 24:00:00</value>
		<value> 27:00:00</value>
		<value> 23:59:60</value>
		<value> 12:60:00</value>
	</wrongs>
</case>


<case name="test for gMonth">
	<!-- plain -->
	<value>--01--</value>
	<value>--02--</value>
	<value>--03--</value>
	<value>--10--</value>
	<value>--11--</value>
	<value>--12--</value>
	
	<!-- with time zone -->
	<value>--03---07:30</value>
	<value>--03--Z</value>
	<value>--03--+00:00</value>
	<value>--03--+03:00</value>
	
	<answer for="gMonth"		>oooooo oooo</answer>
	
	<facets><combination>
		<!-- min{In|Ex}clusive -->
<!-- order relation is broken
		remove \ when you use it.
		
		<choice>
			<facet answer=		"..oooo ...." name="minInclusive" value="-\-03-\-" />
			<facet answer=		"...ooo ...." name="minExclusive" value="-\-03-\-" />
			<facet answer=		"...ooo .ooo" name="minInclusive" value="-\-03-\-Z" />
			<facet answer=		"...ooo ...o" name="minExclusive" value="-\-03-\-Z" />
		</choice>
		<facet answer=			"...... .oo." name="enumeration" value="-\-03-\-Z" />
-->		
		<facet answer=			"...... ...." name="enumeration" value="--09--Z" />
	</combination></facets>
	
	<wrongs>
		<!-- out of range -->
		<value>--00--</value>
		<value>--1--</value>
		<value>--13--</value>
		<value>5</value>
		
		<!-- illegal time zone -->
		<value>--03-- Z</value>
		<value>--03--(GMT)</value>
		<value>--03--(+08:00)</value>
		<value>--03--+1:00</value>
		<value>--03--+15:00</value>
		<value>--03--+12</value>
		<value>--03--08:00</value>
		<value>--03---14:01</value>
		
	</wrongs>
</case>

<!--
	test for Name,NMTOKEN,NCName.
	Core engine of these types are tested as a part of Crimson,
	so test here is very brief
-->
<case name="test for Name,NCName,NMTOKEN">
	<value>___</value>
	<value>_:_</value>
	<value>125</value>
	
	<answer for="Name"			>oo.</answer>
	<answer for="NCName"		>o..</answer>
	<answer for="NMTOKEN"		>ooo</answer>

	<facets>
		<facet answer=			"ooo" name="pattern" value=".*" />
	</facets>
	
	<wrongs>
		<value></value>
	</wrongs>
</case>

<!-- sloppy test -->
<case name="test for hexBinary">
	<value></value>
	<value>1d2f35</value>
	<value>1234567890abcdefABCDEF   </value>
	
	<answer for="hexBinary"			>ooo</answer>

	<facets><combination>
		<facet answer=				".o." name="enumeration" value="1D2F35" />
		
		<choice>
			<facet answer=			".o." name="length" value="3" />
			<facet answer=			"..o" name="length" value="11" />
			<facet answer=			"oo." name="maxLength" value="10" />
		</choice>
	</combination></facets>
	
	<wrongs>
		<value>	12 34 </value>	<!-- inline space-->
		<value> x5 </value>		<!-- illegal characters -->
		<value> 124</value>		<!-- odd number of digits -->
	</wrongs>
</case>



<!-- sloppy test -->
<case name="test for base64">
	<value>ABCX</value>
	<value>DEFG52==</value>
	<value>HIJKL1x=</value>
	<value>AB))((==</value>	<!-- "))((" will be ignored -->
	<value>52==</value>
	
	<answer for="base64Binary"		>ooooo</answer>
	
	<facets><choice>
		<facet answer=			"o...." name="length" value="3" />
		<facet answer=			".o..." name="length" value="4" />
		<facet answer=			"...oo" name="length" value="1" />
	</choice></facets>
	
	<wrongs>
		<!-- wrongs paddings -->
		<value>=</value>
		<value>A</value>
		<value>5=</value>	
		<value>q==</value>	
		<value>n===</value>	
		<value>9x</value>
		<value>5f=</value>
		<value>tr===</value>
		<value>onp</value>
		<value>1qb==</value>
	</wrongs>
</case>

<case name="test for language">
	<value>en-us</value>
	<value>En-Us</value>
	<value>en-cockney</value>
	<value>jp-ja</value>
	
	<value>my-own-language</value>
	<value>     en-GB </value>
	<value>it-can-be-as-long-as-you-want</value>
	<value>fr</value>

	<answer for="language"	>oooo oooo</answer>

	<facets><combination>
		
		<choice>
			<!-- length test -->
			<facet answer=			"oo.o .o.." name="length" value="5" />
			<facet answer=			"..o. ...." name="length" value="10" />
			<!-- min/maxLength -->
			<combination>
				<choice>
					<facet answer=	"oooo ooo." name="minLength" value="4" />
					<facet answer=	"..o. o.o." name="minLength" value="6" />
				</choice>
				<choice>
					<facet answer=	"oooo .o.o" name="maxLength" value="10" />
					<facet answer=	"oooo oo.o" name="maxLength" value="15" />
					<facet answer=	"oooo oooo" name="maxLength" value="40" />
				</choice>
			</combination>
		</choice>
		
		<!-- enumeration -->
		<combination mode="or">
			<facet			answer=	"oo.. ...." name="enumeration" value="  EN-US &#xD; " />
			<facet			answer=	"...o ...." name="enumeration" value="jP-jA" />
			<facet			answer=	".... o..." name="enumeration" value="my-own-language" />
		</combination>
		
		<!-- pattern -->
		<combination mode="or">
			<facet			answer=	"o.o. .o.." name="pattern" value="en-.*" />	<!-- pattern is applied to lexical space, so case sensitive. -->
			<facet			answer=	"o.o. ooo." name="pattern" value=".*e.*" />
		</combination>
	</combination></facets>
		
	<wrongs>
		<value>space  -  within-lang</value>
		<value>morethan-eight-characters-token</value>
		<value>-mal-formed</value>
		<value>mal--formed</value>
		<value>number-is-NG-1</value>
		<value></value>
		<value>&#x1005;</value>	<!-- non-ascii -->
	</wrongs>
</case>

<case name="test for token">
	<value>&#x9;&#x9;</value>
	<value>&#xA;</value>
	<value>&#xD;</value>
	<value>&#xA;&#xD;</value>
	<value>oridinary string</value>
	<value>&#x1005;&#x1009;</value>	<!-- length 2 characters -->
	
	<value>  more   space  </value>
	<value>  	
		tab and   returns
		</value>
	
	<answer for="token"	>oooooo oo</answer>
	
	<facets><combination>
		
		<choice>
			<!-- length test -->
			<facet answer=			"oooo.. .." name="length" value="0" />
			<facet answer=			"...... o." name="length" value="10" />
			<facet answer=			"...... .o" name="length" value="15" />
			<!-- min/maxLength -->
			<combination>
				<choice>
					<facet answer=	"....oo oo" name="minLength" value="2" />
					<facet answer=	"....o. oo" name="minLength" value="5" />
				</choice>
				<choice>
					<facet answer=	"oooo.o .." name="maxLength" value="9" />
					<facet answer=	"oooo.o o." name="maxLength" value="10" />
					<facet answer=	"oooooo oo" name="maxLength" value="20" />
				</choice>
			</combination>
		</choice>
		
		<!-- enumeration -->
		<combination mode="or">
			<facet			answer=	"oooo.. .." name="enumeration" value=" " />
			<facet			answer=	"oooo.. .." name="enumeration" value="&#x9;" />
			<facet			answer=	"oooo.. .." name="enumeration" value="&#xD;&#xA;" />
			<facet			answer=	"...... o." name="enumeration" value="more space" />
		</combination>
		
		<!-- pattern -->
		<combination mode="or">
			<facet			answer=	"...... .." name="pattern" value="[\t\r\n]+" />	<!-- pattern must be checked after whitespace normalization -->
			<facet			answer=	"oooo.. .." name="pattern" value="" />
		</combination>
	</combination></facets>
	
	<wrongs />	<!-- nothing can be wrong as token -->
</case>




<case name="test for normalizedString">
	<value>&#x9;&#x9;</value>	<!-- two tabs -->
	<value>&#xA;</value>
	<value>&#xD;</value>
	<value>&#xA;&#xD;</value>
	<value>oridinary string</value>
	<value>&#x1005;&#x1009;</value>	<!-- length 2 characters -->
	
	<value>  more   space  </value>
	<value>  	
		tab and   returns
		</value>
	
	<answer for="normalizedString"	>oooooo oo</answer>
	
	<facets><combination>
		
		<choice>
			<!-- length test -->
			<facet answer=			".oo... .." name="length" value="1" />
			<facet answer=			"o..o.o .." name="length" value="2" />
			<!-- min/maxLength -->
			<combination>
				<choice>
					<facet answer=	"oooooo oo" name="minLength" value="0" />
					<facet answer=	"....o. oo" name="minLength" value="5" />
				</choice>
				<choice>
					<facet answer=	".oo... .." name="maxLength" value="1" />
					<facet answer=	"oooo.o .." name="maxLength" value="10" />
					<facet answer=	"oooooo oo" name="maxLength" value="99" />
				</choice>
			</combination>
		</choice>
		
		<!-- enumeration -->
		<combination mode="or">
			<facet			answer=	".oo... .." name="enumeration" value=" " />
			<facet			answer=	".oo... .." name="enumeration" value="&#x9;" />
			<facet			answer=	"o..o.. .." name="enumeration" value="&#xD;&#xA;" />
			<facet			answer=	"...... .." name="enumeration" value="more space" /> <!-- make sure that whitespace!=collapse -->
		</combination>
		
		<!-- pattern -->
		<combination mode="or">
			<facet			answer=	".oo... .." name="pattern" value=" " />	<!-- pattern must be checked after whitespace normalization -->
			<facet			answer=	"...... .." name="pattern" value="\r" />
			<facet			answer=	"oooo.. oo" name="pattern" value=" .*" />
		</combination>
	</combination></facets>
	
	<wrongs />	<!-- nothing can be wrong as normalizedString -->
</case>


<case name="test for string">
	<value></value>
	<value>x</value>
	<value>--</value>
	<value>&#x1005;&#x1009;</value>
	
	<value>$#"</value>
	<value>JPN</value>	<!-- "the Japanese" in kanji. length 3 -->
	<value>lame</value>
	<value>label</value>
	
	<value>length</value>
	<value> a b c </value>
	<value>quicker</value>
	<value>length 8</value>
	<value>GetItDone</value>
	<value>McDonald's</value>
	<value>drive safely</value>
	
	<!--   123456789-123456 -->
	<value>  more   space  </value>
	<value>  	
		tab and   returns
		</value>
	
	<answer for="string"			>oooo oooo ooooooo oo</answer>
	
	<facets><combination>
		
		<choice>
			<!-- length test -->
			<facet answer=			"o... .... ....... .." name="length" value="0" />
			<facet answer=			"..oo .... ....... .." name="length" value="2" />
			<facet answer=			".... oo.. ....... .." name="length" value="3" />
			<facet answer=			".... .... ....... o." name="length" value="16" />
			<facet answer=			".... .... ....... .o" name="length" value="26" />
			<!-- min/maxLength -->
			<combination>
				<choice>
					<facet answer=	"oooo oooo ooooooo oo" name="minLength" value="0" />
					<facet answer=	"..oo oooo ooooooo oo" name="minLength" value="2" />
					<facet answer=	".... .... ooooooo oo" name="minLength" value="6" />
				</choice>
				<choice>
					<facet answer=	"oooo oooo o...... .." name="maxLength" value="6" />
					<facet answer=	"oooo oooo ooooo.. .." name="maxLength" value="9" />
					<facet answer=	"oooo oooo ooooooo o." name="maxLength" value="20" />
					<facet answer=	"oooo oooo ooooooo oo" name="maxLength" value="999999999999999999999999999999999999999" />
				</choice>
			</combination>
		</choice>
		
		<!-- enumeration -->
		<combination mode="or">
			<facet			answer=	".... .... ....... .." name="enumeration" value="more  space" />
			<facet			answer=	".... .... ....... .." name="enumeration" value="more space" />	<!-- makes sure that whiteSpace=preserve -->
			<facet			answer=	"o... .... ....... .." name="enumeration" value="" />
			<facet			answer=	".... ...o ....... .." name="enumeration" value="label" />
		</combination>
		
		<!-- pattern -->
		<combination mode="or">
			<facet			answer=	".... ..oo o..o... .." name="pattern" value="l.*" />
			<facet			answer=	".... .... ...o... .." name="pattern" value=".*[0-9].*" />
			<facet			answer=	".ooo oooo o.o.oo. .." name="pattern" value="[^ ]+" />
		</combination>
	</combination></facets>
	
	<wrongs />	<!-- nothing can be wrong as string -->
</case>


<case name="test for year">
	<value>  -999999999999999999999999999999999999999999999999999999999999999999Z</value>
	<value  >-10000</value>
	<value > -0852+02:00</value>
	<value>  -0312</value>
	<value  >-0019Z</value>
	
	<value > -0002</value>
	<value > -0001-09:00</value>
	<value   >0001</value>
	<value>   0001Z</value>
	<value  > 0001-08:00</value>
	<value >  0001+08:00</value>
	<value  > 0053</value>
	<value >  0227</value>
	
	<value>   1255</value>
	<value   >2512Z</value>
	<value  > 7522</value>
	<value >  9999</value>
	<value>   12555+09:00</value>
	
	<value   >99999999999999999999+05:00</value>
	<value  > 999999999999999999999999999999999999999999999999999999999999999999</value>
	
	<answer for="gYear"		>ooooo oooooooo ooooo oo</answer>

	<facets><combination>
		<combination mode="or">
			<facet answer=	"..... ..o..... ..... .." name="enumeration" value="0001" />
			<facet answer=	"..... ........ ..... .o" name="enumeration" value="999999999999999999999999999999999999999999999999999999999999999999" />
		</combination>
		<combination mode="or">
			<facet answer=	"..... ..o...oo o.oo. .." name="pattern" value="...." />
			<facet answer=	".o.o. o.o...oo o.oo. .o" name="pattern" value="-?[0-9]+" />
		</combination>
	</combination></facets>

	<wrongs>
		<!-- no year 0 -->
		<value> 0000</value>
		<value> 0000Z</value>
		<value> 0000+08:00</value>
		<value>-0000</value>
		<value> 00000000</value>
		<value>-000000</value>

		<!-- no trancated form -->
		<value >99</value>
		<value> 199</value>
		<value>-115</value>

		<!-- wrong time zone -->
		<value>2000ZZ</value>
		<value>2000+14:01</value>
		<value>2000-14:01</value>
		<value>2000-8:00</value>
		<value>2000+000</value>
		<value>2000-00:000</value>
		<value>2000-0:0</value>
		<value>2000 GMT</value>
		<value>2000z</value>

		<!-- with month/day -->
		<value>2000-01-01</value>
<!--	<value>2000-01</value>		No. this is a valid year. year 2000 with time zone GMT-01:00 -->

		<!-- format related problem -->
		<value> 1 9 9 9 </value>		<!-- illegal whitespace -->
		<value>(1999)</value>
		<value>1999:</value>
		<value>1999-</value>
		<value>01999</value>
	</wrongs>
</case>

<case name="test for date">
	<value>-0013-08-31</value>
	<value>-0001-12-31 </value>
	<value> 0001-01-01</value>
	<value> 1996-02-29  </value>
	
	<value> 2001-01-01 </value>
	<value> 2001-01-01-14:00 </value>
	<value >2001-01-01-08:00     </value>
	<value> 2001-01-01Z </value>
	<value> 2001-01-01+05:00 </value>
	<value> 2001-01-01+14:00</value>
	<value> 2001-01-02 </value>

	<value> 9999999999999999999999999999999999999999999999999999999999999999999-01-01 </value>
	<value> 9999999999999999999999999999999999999999999999999999999999999999999-01-01Z </value>
	<value> 9999999999999999999999999999999999999999999999999999999999999999999-01-01+05:00 </value>

	<value> 1512-01-04-12:00 </value>
	<value> 1512-01-05+12:00 </value>
	<value>2000-02-29Z</value>

	<answer for="date"		>oooo ooooooo ooo ooo</answer>

	<facets><combination>
		<combination mode="or">
			<facet answer=	".... ....... ... oo." name="enumeration" value="1512-01-05+12:00" />
			<facet answer=	".... o...... ... ..." name="enumeration" value="2001-01-01" />
		</combination>
		<combination mode="or">
			<facet answer=	"o..o ....... ooo oo." name="pattern" value="-?..[13579].*" />
			<facet answer=  "oooo o..o... oo. ..o" name="pattern" value=".*[^24680]" />
		</combination>
	</combination></facets>
	
	<wrongs>
		<!-- no year 0 -->
		<value> 0000-01-01</value>
		<value>-0000-05-03</value>
		<value> 00000000-11-04</value>
		<value>-00000000-07-09</value>

		<!-- no trancated form -->
		<value> 99-05-05 </value>
		<value>  952-03-05</value>
		<value> -952-02-09</value>
		<value> 1253-1-03</value>
		<value> 1245-09-7</value>
		<value> 1877- 1- 1</value>
		
		<!-- impossible day of month -->
		<value>1932-01-32</value>
		<value>1159-02-29</value>
		<value>1900-02-29Z</value>
		<value>1168-03-32</value>
		<value>1654-04-31-05:00</value>
		<value>1705-05-32</value>
		<value>1812-06-31+08:00</value>
		<value>0432-07-32</value>
		<value>0779-08-32Z</value>
		<value>1425-09-31</value>
		<value>1227-10-32-01:00</value>
		<value>1621-11-31</value>
		<value>0015-12-32Z+09:0</value>

		<!-- wrong time zone -->
		<value>2000-01-01ZZ</value>
		<value>2000-01-01+14:01</value>
		<value>2000-01-01-14:01</value>
		<value>2000-01-01-8:00</value>
		<value>2000-01-01+000</value>
		<value>2000-01-01-00:000</value>
		<value>2000-01-01-0:0</value>
		<value>2000-01-01 GMT</value>
		<value>2000-01-01z</value>

		<!-- format related problem -->
		<value> 1956 - 05 - 32 </value>		<!-- illegal whitespace -->
		<value> 2000/05/05 </value>			<!-- illegal separator -->
		<value>2000-01-01 Z +05:00</value>
	</wrongs>
</case>

<case name="test for boolean">
	<value>true</value>
	<value>false</value>
	<value>0</value>
	<value>1</value>
	
	<answer for="boolean">oooo</answer>

	<facets>
		<!-- pattern is the only applicable facet -->
		<combination mode="or">
			<facet answer="o..." name="pattern" value="tr.*" />
			<facet answer=".o.." name="pattern" value="f.*" />
			<facet answer="...." name="pattern" value="f..." />
		</combination>

	</facets>
	
	<wrongs>
		<value>True</value>
		<value>FALSE</value>
	</wrongs>
</case>

<case name="test for integer and its derived types">
	<value>-9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999</value>
	<value>-123104809034590906573845</value>
	<value>-9223372036854775809</value><!--  MIN_LONG -1 -->
	<value>-9223372036854775808</value><!--minimum possible value for long-->
	<value>-324021378997</value>

	<value>-2147483649</value><!-- MIN_INT -1 -->
	<value>-2147483648</value><!-- minimum possible value for int -->
	<value>-32769</value><!-- MIN_SHORT -1 -->
	<value>-32768</value><!-- MIN_SHORT -->
	<value>-11100</value><!-- totalDigits=3, not 5 -->
	
	<value>-129</value><!-- MIN_BYTE -1 -->
	<value>-128</value><!-- MIN_BYTE -->
	<value>-2</value>
	<value>-1</value>
	<value>-0</value>
	
	<value>0</value>
	<value>000000000000000000000000000000000000000000000000000000000000</value><!-- valid representation of 0 -->
	<value>+0</value>
	<value> 1</value>
	<value>+2</value>
	

	<value>127</value><!-- MAX_BYTE -->
	<value>128</value><!-- MAX_BYTE +1 -->
	<value>255</value><!-- MAX_UBYTE -->
	<value>256</value><!-- MAX_UBYTE+1 -->
	<value>1111</value>

	<value>32767</value><!-- MAX_SHORT -->
	<value>32768</value><!-- MAX_SHORT+1 -->
	<value>65535</value><!-- MAX_USHORT -->
	<value>65536</value><!-- MAX_USHORT+1 -->
	<value>90893012</value>

	<value>2147483647</value><!-- MAX_INT -->
	<value>2147483648</value><!-- MAX_INT+1 -->
	<value>4294967294</value>
	<value>4294967295</value><!-- MAX_UINT -->
	<value>4294967296</value><!-- MAX_UINT+1 -->

	<value>9223372036854775807</value><!-- MAX_LONG -->
	<value>9223372036854775808</value><!-- MAX_LONG+1 -->
	<value>18446744073709551615</value><!-- MAX_ULONG -->
	<value>18446744073709551616</value><!-- MAX_ULONG+1 -->
	<!-- very long but valid integer -->
	<value>99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999</value>
	
	<!-- decimal values are not valid -->
	<value>0.0</value>
	<value>0.</value>
	<value>.0</value>
	
	<answer for="integer"				>ooooo ooooo ooooo ooooo  ooooo ooooo ooooo ooooo ...</answer>
	<answer for="negativeInteger"		>ooooo ooooo oooo. .....  ..... ..... ..... ..... ...</answer>
	<answer for="nonPositiveInteger"	>ooooo ooooo ooooo ooo..  ..... ..... ..... ..... ...</answer>
	<answer for="nonNegativeInteger"	>..... ..... ....o ooooo  ooooo ooooo ooooo ooooo ...</answer>
	<answer for="positiveInteger"		>..... ..... ..... ...oo  ooooo ooooo ooooo ooooo ...</answer>
	<answer for="long"					>...oo ooooo ooooo ooooo  ooooo ooooo ooooo o.... ...</answer>
	<answer for="int"					>..... .oooo ooooo ooooo  ooooo ooooo o.... ..... ...</answer>
	<answer for="short"					>..... ...oo ooooo ooooo  ooooo o.... ..... ..... ...</answer>
	<answer for="byte"					>..... ..... .oooo ooooo  o.... ..... ..... ..... ...</answer>
	<answer for="unsignedLong"			>..... ..... ....o ooooo  ooooo ooooo ooooo ooo.. ...</answer>
	<answer for="unsignedInt"			>..... ..... ....o ooooo  ooooo ooooo oooo. ..... ...</answer>
	<answer for="unsignedShort"			>..... ..... ....o ooooo  ooooo ooo.. ..... ..... ...</answer>
	<answer for="unsignedByte"			>..... ..... ....o ooooo  ooo.. ..... ..... ..... ...</answer>
	<answer for="decimal"				>ooooo ooooo ooooo ooooo  ooooo ooooo ooooo ooooo ooo</answer>
	
	<facets><combination>
		<choice>
			<facet answer=				"..... ....o ooooo ooooo  oooo. ..... ..... ..... ooo" name="totalDigits" value="3" />
			<facet answer=				"..... ....o ooooo ooooo  ooooo ..... ..... ..... ooo" name="totalDigits" value="4" />
			<facet answer=				"..... ..ooo ooooo ooooo  ooooo oooo. ..... ..... ooo" name="totalDigits" value="5" />
			<facet answer=				"ooooo ooooo ooooo ooooo  ooooo ooooo ooooo oooo. ooo" name="totalDigits" value="400" />
<!-- precision can be any positiveInteger, but no way to support this in Java -->
			<facet answer=				"ooooo ooooo ooooo ooooo  ooooo ooooo ooooo ooooo ooo" name="totalDigits" value="99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999" />
		</choice>
		<combination mode="or">
			<facet answer=				"..... ..... ..... ...o.  ....o ..... ..... ..... ..." name="pattern" value="1*" />
			<facet answer=				"..... ..... oo... .....  ....o ..... ..... ..... ..." name="pattern" value="...." />
		</combination>
		<combination mode="or">
			<facet answer=				"..... ..... ....o ooo..  ..... ..... ..... ..... ooo" name="enumeration" value="0" />
			<facet answer=				"..... ..... ..... ....o  ..... ..... ..... ..... ..." name="enumeration" value="2" />
		</combination>
		<choice>
			<combination><!-- min-max pair part.1 -->
				<choice>
					<facet answer=		".oooo ooooo ooooo ooooo  ooooo ooooo ooooo ooooo ooo" name="minExclusive" value="-9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999" />
					<facet answer=		"..ooo ooooo ooooo ooooo  ooooo ooooo ooooo ooooo ooo" name="minInclusive" value="-9223372036854775809" />
					<facet answer=		"...oo ooooo ooooo ooooo  ooooo ooooo ooooo ooooo ooo" name="minExclusive" value="-9223372036854775809" />
				</choice>
				<choice>
					<facet answer=		"ooo.. ..... ..... .....  ..... ..... ..... ..... ..." name="maxInclusive" value="-9223372036854775809" />
					<facet answer=		"ooooo ..... ..... .....  ..... ..... ..... ..... ..." name="maxExclusive" value="-2147483649" />
					<facet answer=		"ooooo o.... ..... .....  ..... ..... ..... ..... ..." name="maxInclusive" value="-2147483649" />
					<facet answer=		"ooooo ooooo oooo. .....  ..... ..... ..... ..... ..." name="maxExclusive" value="+00000000000000000000000000000000000000000000" />
					<facet answer=		"ooooo ooooo ooooo ooo..  ..... ..... ..... ..... ooo" name="maxInclusive" value="0" />
					<facet answer=		"ooooo ooooo ooooo ooooo  ooooo ooooo ooooo oooo. ooo" name="maxExclusive" value="99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999" />
					<facet answer=		"ooooo ooooo ooooo ooooo  ooooo ooooo ooooo ooooo ooo" name="maxInclusive" value="99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999" />
				</choice>
			</combination>
			<combination><!-- min-max pair part.2 -->
				<choice>
					<facet answer=		"..... ..... ....o ooooo  ooooo ooooo ooooo ooooo ooo" name="minInclusive" value="0" />
					<facet answer=		"..... ..... ..... ...oo  ooooo ooooo ooooo ooooo ..." name="minExclusive" value="000000000000000000000000000000000000" />
					<facet answer=		"..... ..... ..... .....  ...oo ooooo ooooo ooooo ..." name="minInclusive" value="256" />
					<facet answer=		"..... ..... ..... .....  ....o ooooo ooooo ooooo ..." name="minExclusive" value="256" />
					<facet answer=		"..... ..... ..... .....  ..... ..... ooooo ooooo ..." name="minInclusive" value="214748364" />
					<facet answer=		"..... ..... ..... .....  ..... ..... ...oo ooooo ..." name="minInclusive" value="4294967295" />
					<facet answer=		"..... ..... ..... .....  ..... ..... ....o ooooo ..." name="minExclusive" value="4294967295" />
				</choice>
				<choice>
					<facet answer=		"ooooo ooooo ooooo ooooo  ooooo ooooo ooooo ..... ooo" name="maxExclusive" value="9223372036854775807" />
					<facet answer=		"ooooo ooooo ooooo ooooo  ooooo ooooo ooooo o.... ooo" name="maxInclusive" value="9223372036854775807" />
					<facet answer=		"ooooo ooooo ooooo ooooo  ooooo ooooo ooooo oooo. ooo" name="maxInclusive" value="1844674407370955161618446744073709551616" />
				</choice>
			</combination>
		</choice>
	</combination></facets>
	
	<wrongs>
		<value>+</value>
		<value>-</value>
		<value></value>
		<value>++5</value>
		<value>+-0</value>
		<value>0x50</value>
		<value>&amp;h20</value>
		<value>#x11</value>
		<value>-1E4</value>
	</wrongs>
</case>

<case name="test of float/double (incomplete)">
	<value>-INF</value>
	<value>-999999999999999999999999999999999999999999999999999999999999999e99999999999999999999999999999999</value> <!-- way beyond the possible range of double, but valid -->
	<value>-1.79769313486231570999999999999999999999999999e+308</value> <!-- MAX_DOUBLE + additional digits that will be rounded to MAX_DOUBLE -->
	<value>-1.79769313486231570e+308</value> <!-- MAX_DOUBLE -->
	<value>-3.4028234799999999999999E+38f</value>	<!-- MAX_FLOAT + additional digits -->
	<value>-3.40282347e+38f</value>	<!-- MAX_FLOAT -->

	<value>-.0</value>
	<value>0.0</value>
	<value>00000000000.00000000000e00000000000000000000000000000000</value>
	<value>0.</value>
	<value>+0</value>

	<value>4.94065645841246544E-326</value>	<!-- should be rounded to -0 -->
	<value>4.94065645841246544E-324</value>	<!-- MIN_DOUBLE -->
	<value>0.70119923e-45f</value>	<!-- for float, should be rounded to -0 -->
	<value>0.70119923000000000000000000001e-45f</value>	<!-- for float, should be rounded to MIN_FLOAT -->
	<value>1.40239846e-45f</value>	<!-- MIN_FLOAT -->

	<value>INF</value>
	<value>NaN</value>

	<answer for="float" 		>oooooo ooooo ooooo oo </answer>
	<answer for="double"		>oooooo ooooo ooooo oo </answer>

	<facets><combination>
		<combination mode="or">
			<facet answer=		"...... .ooo. ..... .." name="pattern" value="(0|\.|e)+" />
			<facet answer=		"o..... ..... ..... oo" name="pattern" value="[^0-9]+" />
		</combination>
		<combination mode="or">
			<facet answer=		"...... .oooo ..... .." name="enumeration" value="+0" />
			<facet answer=		"...... o.... ..... .." name="enumeration" value="-0" />
			<facet answer=		"...... ..... ..... o." name="enumeration" value="INF" />
			<facet answer=		"...... ..... ..... .o" name="enumeration" value="NaN" />
		</combination>
	</combination></facets>
	
	<wrongs>
		<value>+INF</value>
		<value>inf</value>
		<value>Inf</value>
		<value>nan</value>
		<value>-NaN</value>
		<value>1e2f</value>
		<value>0.005d</value>
		<value>-0.0f</value>
		<value>E-2</value>
		<value>1e2.5</value>
		<value>0x123</value>
	</wrongs>
</case>
</suite>
