/*
 *
 * 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 System.Collections;
using System.Text;
using NUnit.Framework;

namespace Apache.Qpid.Collections
{
    [TestFixture]
    public class TestLinkedHashtable
    {
        [Test]
        public void Test1()
        {
            LinkedHashtable table = new LinkedHashtable();
            table["Super"] = "Ayr";
            table["Ayr"] = "United";
            table["Fred"] = "Wilma";
            table["Dumbarton"] = "Gubbed";
            dumpDictionary(table);

            Console.WriteLine("\nRemoving XXX (non-existant)");
            table.Remove("XXX");
            dumpDictionary(table);

            Console.WriteLine("\nRemoving Fred");
            table.Remove("Fred");
            dumpDictionary(table);

            Console.WriteLine("\nMoving Dumbarton to head");
            table.MoveToHead("Dumbarton");
            dumpDictionary(table);
        }

        private static void dumpDictionary(LinkedHashtable table)
        {
            foreach (DictionaryEntry o in table)
            {
                Console.WriteLine(string.Format("Item: key={0} value={1}", o.Key, o.Value));
            }
            
            Console.WriteLine("keys are " + InspectCollection(table.Keys));
            Console.WriteLine("values are " + InspectCollection(table.Values));
        }

        static string InspectCollection(ICollection collection)
        {
            StringBuilder sb = null;
            foreach (object o in collection)
            {
                if (sb == null)
                {
                    sb = new StringBuilder(o.ToString());
                }
                else
                {
                    sb.Append(", ");
                    sb.Append(o.ToString());
                }
            }
            return sb.ToString();
        }
    }
}
