/*
 * The MIT License (MIT)
 *
 * Copyright (c) 2013 Alistair Leslie-Hughes
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of
 * this software and associated documentation files (the "Software"), to deal in
 * the Software without restriction, including without limitation the rights to
 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 * the Software, and to permit persons to whom the Software is furnished to do so,
 * subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
 * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
using System;
using NUnit.Framework;
using Microsoft.DirectX.Direct3D;
using System.Collections;

namespace Test.Microsoft.DirectX.Direct3D
{
	[TestFixture()]
	public class TestManager
	{
		[Test()]
		public void ManagerAdapters ()
		{
			AdapterListCollection list = Manager.Adapters;
			if (list != null) {
				IEnumerator e = list.GetEnumerator ();
				Assert.IsNotNull (e);
				while (e.MoveNext()) {
					try {
						AdapterInformation info = e.Current as AdapterInformation;
						Assert.IsNotNull (info);
					} catch {
						//TODO: Implement e.Current
					}
				}
			}
		}

		[Test()]
		public void ManagerAdaptersCount ()
		{
			AdapterListCollection list = Manager.Adapters;
			if (list != null) {
				Assert.AreNotEqual (list.Count, 0);

				for (int i=0; i < list.Count; i++) {
					AdapterInformation info = list [i];
					Assert.IsNotNull (info);
				}
			}
		}

		[Test()]
		public void ManagerAdaptersForeach ()
		{
			AdapterListCollection list = Manager.Adapters;
			if (list != null) {
				foreach (AdapterInformation info in list) {
					Assert.IsNotNull (info);
				}
			}
		}
		
		[Test()]
		public void ManagerAdaptersDisplayMode ()
		{
			AdapterListCollection list = Manager.Adapters;
			if (list != null) {
				foreach (AdapterInformation info in list) {
					Assert.IsNotNull (info);
					foreach (DisplayMode displayMode in info.SupportedDisplayModes) {
						Assert.IsNotNull (displayMode);
					}
				}
			}
		}
	}
}

