Added UriScheme name.
Added UriSchemeTelnet, UriSchemeLdap, UriSchemeUuid.
Added property IriParsing and field s_IriParsing.
The property IriParsing will be used to change between .NET 4.5 and .NET 4.0 default percentage encoding/decoding behavior.
A private field named s_IriParsing same as .NET was also added so it can be changed the same way through reflection in .NET and Mono.
Changed method HexUnescapeMultiByte to internal.
Created file UriHelper.cs.
UriHelper has the method Format that escapes or unescapes a string's characters depending on the Scheme, UriKind, UriComponent and UriFormat.
Changed UriElements query and fragment default values to null.
Default values are now null so UriParser.GetComponents can return an empty query or fragment..
Replaced UriParser.Format with UriHelper.Format.
UriParser.Format was deleted and UriParser.GetComponents is now using UriHelper.Format.
Changed ParsePath to only break on '?' if scheme supports queries.
Changed Uri.SupportsQuery to use UriHelper.SupportsQuery.
Improved UriHelper.Format '%' handling.
When a % was found HexUnescapeMultiByte output was always considered escaped.
Now a % that is not a percentage encoded character will be processed has a not escaped character.
Added UriPermutationsTest.
Created a new set of tests that create&store or that load&assert uri permutations.
Uris are created with permutations of schemes, components, characters then methods and properties output is asserted against expected values obtained on .NET.
Changed UriPermutationsTest createMode to false.
Added methods FormatAbsolute, FormatRelative, and enum FormatFlags.
Changed Format methods to receive FormatFlags.
Added FormatFlag.HasCharactersToNormalize, which improves character decoding.
The flag is set when Iriparsing is true and the Uri contains an encoded alpha numeric, non ASCII, '-', '.' , '_' and '~'.
When the flag is set some other encoded charcaters need also to be decoded.
Improved unescape testing.
With IriParsing the presencee of encoded alpha numeric, non ASCII, '-', '.', '_' and '~' characters trigger the decoding of some other characters.
Tested permutations now include tests with and tests without those characters.
Improved reduce tests.
Reduce tests now test sequences of 1 to 3 encoded or decoded dots inside paths with or without trailing character and encoded fowardslash and backslash.
UriHelper.Format now reduces paths.
Updated Fragment, Query, AbsoluteUri.
Fragment and Query are now processed with UriHelper.FormatAbsolute.
AbsoluteUri is using obtained from GetComponents.
Added method GetComponentsHelper.
With GetComponentsHelper components with format UriHelper.ToStringUnescape can be retrieve without the ArgumentOutOfRangeException thrown by GetComponents.
Updated Uri.Tostring.
Uri.ToString now use GetComponentsHelpers to get and format an absolute Uri and uses FormatRelative to format a relative Uri.
StringTester.Assert parameter message is now optional.
Additionaly if no message is provided the assert id is used instead.
Added backslash to reduceLocations. Simplified componentLocations.