// $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 ); } /// /// Parse a simple URL /// [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 ); } } }