| // $Id$ |
| // |
| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| // |
| using System; |
| using NUnit.Framework; |
| |
| // s is scheme:[//[user[:password]@]host[:port]/]uri[;params][?terms][#fragment] |
| |
| namespace Org.Apache.Etch.Bindings.Csharp.Util |
| { |
| [TestFixture] |
| public class TestURL |
| { |
| |
| [TestFixtureSetUp] |
| public void First() |
| { |
| Console.WriteLine(); |
| Console.Write( "TestURL" ); |
| } |
| |
| [ExpectedException( typeof( ArgumentNullException ) )] |
| public void TestNullURL() |
| { |
| string testUrl = ""; |
| URL url1 = new URL( testUrl ); |
| |
| } |
| |
| /// <summary> |
| /// Parse a simple URL |
| /// </summary> |
| [Test] |
| public void TestParse1() |
| { |
| string testUrl = "tcp://user:password@127.0.0.1:4001"; |
| URL url1 = new URL( testUrl ); |
| Assert.AreEqual( "tcp", url1.Scheme ); |
| Assert.AreEqual( "user", url1.User ); |
| Assert.AreEqual( "password", url1.Password ); |
| Assert.AreEqual( "127.0.0.1", url1.Host ); |
| Assert.AreEqual( 4001, url1.Port ); |
| |
| //scheme tests |
| |
| Assert.IsFalse( url1.HasTerms() ); |
| Assert.IsFalse( url1.HasParams() ); |
| |
| Assert.AreEqual( "tcp://user:password@127.0.0.1:4001/", url1.ToString() ); |
| } |
| |
| [Test] |
| public void TestSchemeFunctions() |
| { |
| string testUrl = "tcp://user:password@127.0.0.1:4001"; |
| URL url1 = new URL( testUrl ); |
| |
| Assert.AreEqual( "tcp", url1.Scheme ); |
| Assert.IsTrue( url1.IsScheme( "tcp" ) ); |
| Assert.IsFalse( url1.IsScheme( "" ) ); |
| Assert.IsFalse( url1.IsScheme( "tcp-" ) ); |
| |
| url1.Scheme = "udp"; |
| Assert.AreEqual( "udp", url1.Scheme ); |
| Assert.IsTrue( url1.IsScheme( "udp" ) ); |
| |
| Assert.AreEqual( "udp://user:password@127.0.0.1:4001/", url1.ToString() ); |
| } |
| |
| [Test] |
| public void TestUser() |
| { |
| string testUrl = "tcp://user:password@127.0.0.1:4001"; |
| URL url1 = new URL( testUrl ); |
| |
| Assert.AreEqual( "user", url1.User ); |
| |
| url1.User = "user2"; |
| Assert.AreEqual( "user2", url1.User ); |
| |
| try |
| { |
| url1.User = ""; |
| Assert.Fail(); |
| } |
| catch ( Exception ) |
| { |
| Assert.IsTrue( true ); |
| } |
| |
| Assert.AreEqual( "tcp://user2:password@127.0.0.1:4001/", url1.ToString() ); |
| } |
| |
| [Test] |
| public void TestPassword() |
| { |
| string testUrl = "tcp://user:password@127.0.0.1:4001"; |
| URL url1 = new URL( testUrl ); |
| |
| Assert.AreEqual( "password", url1.Password ); |
| |
| url1.Password = "password2"; |
| Assert.AreEqual( "password2", url1.Password ); |
| |
| Assert.AreEqual( "tcp://user:password2@127.0.0.1:4001/", url1.ToString() ); |
| } |
| |
| [Test] |
| public void TestHost() |
| { |
| string testUrl = "tcp://user:password@127.0.0.1:4001"; |
| URL url1 = new URL( testUrl ); |
| |
| Assert.AreEqual( "127.0.0.1", url1.Host ); |
| |
| url1.Host = "localhost"; |
| Assert.AreEqual( "localhost", url1.Host ); |
| |
| Assert.AreEqual( "tcp://user:password@localhost:4001/", url1.ToString() ); |
| } |
| |
| [Test] |
| public void TestPort() |
| { |
| string testUrl = "tcp://user:password@127.0.0.1:4001"; |
| URL url1 = new URL( testUrl ); |
| |
| Assert.AreEqual( 4001, url1.Port ); |
| |
| url1.Port = 8000; |
| Assert.AreEqual( 8000, url1.Port ); |
| |
| try |
| { |
| url1.Port = -1; |
| Assert.Fail(); |
| } |
| catch ( ArgumentException ) |
| { |
| Assert.IsTrue( true ); |
| try |
| { |
| url1.Port = 65536; |
| Assert.Fail(); |
| } |
| catch ( ArgumentException ) |
| { |
| Assert.IsTrue( true ); |
| } |
| } |
| |
| Assert.AreEqual( "tcp://user:password@127.0.0.1:8000/", url1.ToString() ); |
| } |
| |
| [Test] |
| public void TestUri() |
| { |
| string testUrl = "tcp://user:password@127.0.0.1:4001/myUri"; |
| URL url1 = new URL( testUrl ); |
| |
| Assert.AreEqual( "myUri", url1.Uri ); |
| |
| url1.Uri = ""; |
| Assert.AreEqual( "", url1.Uri ); |
| |
| Assert.AreEqual( "tcp://user:password@127.0.0.1:4001/", url1.ToString() ); |
| } |
| |
| [Test] |
| public void TestParams() |
| { |
| string testUrl = "tcp://user:password@127.0.0.1:4001/myUri"; |
| URL url = new URL( testUrl ); |
| Assert.IsFalse( url.HasParams() ); |
| Assert.AreEqual(0, url.GetParams().Length); |
| Assert.IsNull(url.GetParam("PARAM1=")); |
| |
| testUrl = "tcp://user:password@127.0.0.1:4001/cuae;PARAM1=1;PARAM2=2"; |
| url = new URL( testUrl ); |
| Assert.IsTrue( url.HasParams() ); |
| Assert.AreEqual( "PARAM1=1", url.GetParam( "PARAM1" ) ); |
| Assert.AreEqual( "PARAM2=2", url.GetParam( "PARAM2" ) ); |
| |
| // get iterator over params |
| string[] p = url.GetParams(); |
| Assert.AreEqual(2, p.Length); |
| Assert.IsTrue(Find("PARAM1=1", p)); |
| Assert.IsTrue(Find("PARAM2=2", p)); |
| |
| // add a new param |
| url.AddParam( "0123456789" ); |
| Assert.AreEqual( "0123456789", url.GetParam( "0123" ) ); |
| p = url.GetParams(); |
| Assert.AreEqual(3, p.Length); |
| Assert.IsTrue(Find("PARAM1=1", p)); |
| Assert.IsTrue(Find("PARAM2=2", p)); |
| Assert.IsTrue(Find("0123456789", p)); |
| |
| // remove a param |
| Assert.AreEqual( "PARAM1=1", url.RemoveParam( "PARAM1" ) ); |
| Assert.IsNull(url.GetParam("PARAM1=")); |
| p = url.GetParams(); |
| Assert.AreEqual(2, p.Length); |
| Assert.IsTrue(Find("PARAM2=2", p)); |
| Assert.IsTrue(Find("0123456789", p)); |
| |
| // clear all params |
| url.ClearParams(); |
| Assert.IsFalse( url.HasParams() ); |
| } |
| |
| private bool Find(string s, string[] a) |
| { |
| foreach (string x in a) |
| if (x.Equals(s)) |
| return true; |
| return false; |
| } |
| |
| [Test] |
| public void TestQueryTerms() |
| { |
| String testUrl = "tcp://user:password@127.0.0.1:4001/cuae"; |
| URL url = new URL( testUrl ); |
| Assert.IsFalse( url.HasTerms() ); |
| |
| testUrl = "tcp://user:password@127.0.0.1:4001/cuae?term1=500"; |
| url = new URL( testUrl ); |
| |
| Assert.IsTrue( url.HasTerms() ); |
| Assert.IsTrue( url.HasTerm( "term1" ) ); |
| Assert.IsTrue( url.HasTerm( "term1", "500" ) ); |
| Assert.IsTrue(url.HasTerm("term1", 500)); |
| Assert.IsFalse(url.HasTerm("term1", "1000")); |
| Assert.IsFalse(url.HasTerm("term1", 1000)); |
| Assert.IsFalse(url.HasMultipleValues("term1")); |
| Assert.AreEqual("500", url.GetTerm("term1")); |
| Assert.AreEqual(500, url.GetIntegerTerm("term1")); |
| Assert.AreEqual("500", url.GetTerm("term1", "x")); |
| Assert.AreEqual(500, url.GetIntegerTerm("term1", 2)); |
| |
| Assert.IsFalse(url.HasTerm("term2")); |
| Assert.IsFalse(url.HasTerm("term2", "500")); |
| Assert.IsFalse(url.HasTerm("term2", 500)); |
| Assert.IsNull(url.GetTerm("term2")); |
| Assert.IsNull(url.GetIntegerTerm("term2")); |
| Assert.AreEqual("x", url.GetTerm("term2", "x")); |
| Assert.AreEqual(2, url.GetIntegerTerm("term2", 2)); |
| |
| // multiple values of the same term |
| url.AddTerm( "term1", 500.5 ); |
| Assert.IsTrue(url.HasMultipleValues("term1")); |
| Assert.IsTrue(url.HasTerm("term1")); |
| Assert.IsTrue(url.HasTerm("term1", "500")); |
| Assert.IsTrue(url.HasTerm("term1", 500)); |
| Assert.IsTrue(url.HasTerm("term1", "500.5")); |
| Assert.IsTrue(url.HasTerm("term1", 500.5)); |
| try |
| { |
| url.GetTerm( "term1" ); |
| Assert.Fail( "Exception wasn't thrown..." ); |
| } |
| catch ( Exception ) |
| { |
| // ignore exception |
| } |
| string[] t = url.GetTerms( "term1" ); |
| Assert.AreEqual(2, t.Length); |
| Assert.AreEqual( "500", t[0] ); |
| Assert.AreEqual( "500.5", t[1] ); |
| |
| // add another term => multiple terms |
| url.AddTerm( "term2", "value" ); |
| Assert.IsFalse( url.HasMultipleValues( "term2" ) ); |
| Assert.IsTrue( url.HasTerm( "term2" ) ); |
| Assert.IsTrue( url.HasTerm( "term2", "value" ) ); |
| Assert.AreEqual( "value", url.GetTerm( "term2" ) ); |
| |
| t = url.GetTermNames(); |
| Assert.AreEqual(2, t.Length); |
| Assert.AreEqual( "term1", t[0] ); |
| Assert.AreEqual( "term2", t[1] ); |
| |
| // Console.WriteLine( url.ToString() ); |
| // remove term |
| Assert.IsFalse( url.RemoveTerm( "term3" ) ); |
| Assert.IsTrue( url.RemoveTerm( "term2" ) ); |
| Assert.IsFalse( url.HasTerm( "term2" ) ); |
| t = url.GetTermNames(); |
| Assert.AreEqual(1, t.Length); |
| Assert.AreEqual("term1", t[0]); |
| |
| // remove one value from a list of values for a term |
| Assert.IsTrue( url.RemoveTerm( "term1", "500.5" ) ); |
| Assert.IsFalse( url.HasMultipleValues( "term1" ) ); |
| Assert.AreEqual( "500", url.GetTerm( "term1" ) ); |
| |
| // clear terms |
| url.ClearTerms(); |
| Assert.IsFalse( url.HasTerms() ); |
| Assert.AreEqual(0, url.GetTermNames().Length); |
| Assert.AreEqual( "tcp://user:password@127.0.0.1:4001/cuae", url.ToString() ); |
| } |
| |
| [Test] |
| public void TestFragment() |
| { |
| string testUrl = "tcp://user:password@127.0.0.1:4001/cuae;p1;p2?t1=1?t2=2"; |
| URL url = new URL( testUrl ); |
| Assert.IsNull( url.Fragment ); |
| |
| url.Fragment = "fragments"; |
| Assert.AreEqual( "fragments", url.Fragment ); |
| |
| } |
| |
| public void TestConstructor() |
| { |
| string testUrl2 = "tcp://user:password@127.0.0.1:4001/cuae;p1;p2?t1=1?t2=2#fragment"; |
| URL url2 = new URL( testUrl2 ); |
| URL url3 = new URL( url2 ); |
| |
| Assert.AreEqual( url2.Scheme, url3.Scheme ); |
| Assert.AreEqual( url2.User, url3.User ); |
| Assert.AreEqual( url2.Password, url3.Password ); |
| Assert.AreEqual( url2.Host, url3.Host); |
| Assert.AreEqual( url2.Port, url3.Port ); |
| Assert.AreEqual( url2.Uri, url3.Uri ); |
| //Assert.AreEqual( url2.GetParams(), url3.GetParams() ); |
| //Assert.AreEqual( url2., url3.GetTerms() ); |
| Assert.AreEqual( url2.Fragment, url3.Fragment ); |
| |
| } |
| } |
| } |