Click here to Skip to main content
15,885,032 members
Articles / Desktop Programming / WPF

Catel - Part 4 of n: Unit testing with Catel

Rate me:
Please Sign up or sign in to vote.
4.55/5 (10 votes)
28 Jan 2011CPOL11 min read 48.9K   572   11  
This article explains how to write unit tests for MVVM using Catel.
// <auto-generated /> // Ignore for Stylecop

using System;
using System.Runtime.InteropServices;
using System.Text;
using Microsoft.Win32.SafeHandles;

namespace Catel.IO
{
	/// <summary>
	/// Win32 file API.
	/// </summary>
	internal class Win32IOApi
	{
		#region Constants
		// Error
		internal const int ERROR_ALREADY_EXISTS = 183;
		internal const int ERROR_NO_MORE_FILES = 18;

		// Seek location
		internal const uint FILE_BEGIN = 0x0;
		internal const uint FILE_CURRENT = 0x1;
		internal const uint FILE_END = 0x2;

		// Access
		internal const uint GENERIC_READ = 0x80000000;
		internal const uint GENERIC_WRITE = 0x40000000;
		internal const uint GENERIC_EXECUTE = 0x20000000;
		internal const uint GENERIC_ALL = 0x10000000;

		internal const uint FILE_APPEND_DATA = 0x00000004;

		// Attributes
		internal const uint FILE_ATTRIBUTE_READONLY = 0x00000001;
		internal const uint FILE_ATTRIBUTE_DIRECTORY = 0x10;
		internal const uint FILE_ATTRIBUTE_NORMAL = 0x80;

		// Share
		internal const uint FILE_SHARE_DELETE = 0x00000004;
		internal const uint FILE_SHARE_READ = 0x00000001;
		internal const uint FILE_SHARE_WRITE = 0x00000002;

		// Mode
		internal const uint CREATE_NEW = 1;
		internal const uint CREATE_ALWAYS = 2;
		internal const uint OPEN_EXISTING = 3;
		internal const uint OPEN_ALWAYS = 4;
		internal const uint TRUNCATE_EXISTING = 5;

		internal static readonly IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);
		#endregion

		#region Structs
		// The CharSet must match the CharSet of the corresponding PInvoke signature
		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
		internal struct WIN32_FIND_DATA
		{
			public uint dwFileAttributes;
			public System.Runtime.InteropServices.ComTypes.FILETIME ftCreationTime;
			public System.Runtime.InteropServices.ComTypes.FILETIME ftLastAccessTime;
			public System.Runtime.InteropServices.ComTypes.FILETIME ftLastWriteTime;
			public uint nFileSizeHigh;
			public uint nFileSizeLow;
			public uint dwReserved0;
			public uint dwReserved1;
			[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
			public string cFileName;
			[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)]
			public string cAlternateFileName;
		}
		#endregion

		#region Methods - alphabetically ordered
		[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
		internal static extern bool CopyFile(string lpExistingFileName, string lpNewFileName, bool bFailIfExists);


		[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
		internal static extern SafeFileHandle CreateFileW(string lpFileName, uint dwDesiredAccess,
												 uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition,
												 uint dwFlagsAndAttributes, IntPtr hTemplateFile);


		[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
		[return: MarshalAs(UnmanagedType.Bool)]
		internal static extern bool DeleteFile(string lpFileName);


		[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
		internal static extern bool FindClose(IntPtr hFindFile);


		[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
		internal static extern IntPtr FindFirstFile(string lpFileName, out WIN32_FIND_DATA lpFindFileData);


		[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
		internal static extern bool FindNextFile(IntPtr hFindFile, out WIN32_FIND_DATA lpFindFileData);


		[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
        internal static extern uint GetFullPathName(string lpFileName, uint nBufferLength, 
            [MarshalAs(UnmanagedType.LPTStr)] StringBuilder lpBuffer, 
            [Out] StringBuilder lpFilePart);


		[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
		[return: MarshalAs(UnmanagedType.U4)]
		internal static extern int GetLongPathName([MarshalAs(UnmanagedType.LPTStr)]string lpszShortPath,
			[MarshalAs(UnmanagedType.LPTStr)]StringBuilder lpszLongPath,
			[MarshalAs(UnmanagedType.U4)]int cchBuffer);


		[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
		internal static extern bool RemoveDirectory(string lpPathName);


		[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
		internal static extern bool SetFileAttributes(string lpFileName, uint dwFileAttributes);


		[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
		internal static extern uint SetFilePointer(SafeFileHandle hFile, long lDistanceToMove, IntPtr lpDistanceToMoveHigh, uint dwMoveMethod);
		#endregion
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer
Netherlands Netherlands
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions