From: Choy R. <ch...@us...> - 2005-02-20 09:26:58
|
Update of /cvsroot/dotnetmock/dotnetmock/DotNetMock/Util In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15950/DotNetMock/Util Added Files: StringUtils.cs Log Message: Make sure all Predicates support the ability to describe their evaluation expression through the ExpressionAsText(name) method. The name parameter is so that in the future we can include the name of the parameter that didn't satisfy the predicate in our assertion failure messages. --- NEW FILE: StringUtils.cs --- #region License // Copyright (c) 2004 Griffin Caprio & Choy Rim. All rights reserved. #endregion #region Imports using System; using System.Collections; #endregion namespace DotNetMock.Util { /// <summary> /// Perl-like utility functions. /// </summary> public class StringUtils { /// <summary> /// Format an object. /// </summary> /// <param name="scalar">object to format</param> /// <returns>string representation of an object value</returns> public static string FormatScalar(object scalar) { return mapElement(scalar).ToString(); } /// <summary> /// Format an array. /// </summary> /// <param name="args">array to format</param> /// <returns>string representation of array</returns> public static string FormatArray(params object[] args) { return FormatCollection(args, DefaultElementMapper); } /// <summary> /// Format a collection.. /// </summary> /// <param name="collection">collection to format</param> /// <returns>string representation of collection</returns> public static string FormatCollection(ICollection collection) { return FormatCollection(collection, DefaultElementMapper); } #region Private Static /// <summary> /// Delegate for mapping/transforming objects. /// </summary> private delegate object Mapper(object element); /// <summary> /// Default <see cref="Mapper"/> for displaying objects. /// </summary> private static readonly Mapper DefaultElementMapper = new Mapper(mapElement); private static string FormatCollection(ICollection collection, Mapper mapper) { return String.Join(", ", mapToString(mapCollection( mapper, collection ))); } private static object mapElement(object arg) { if ( arg is string ) { return "'"+arg as string+"'"; } else if ( arg is DictionaryEntry ) { DictionaryEntry entry = (DictionaryEntry) arg; return String.Format( "{0}={1}", entry.Key, mapElement(entry.Value) ); } else if ( arg is ICollection ) { return "["+FormatCollection( (ICollection) arg, new Mapper(mapElement) )+"]"; } else { return arg; } } private static object[] mapCollection(Mapper mapper, ICollection collection) { object[] result = new object[collection.Count]; int i = 0; foreach (object element in collection) { result[i++] = mapper(element); } return result; } private static string[] mapToString(params object[] array) { string[] result = new string[array.Length]; for (int i = 0; i<array.Length; ++i) { result[i] = array[i].ToString(); } return result; } #endregion } } |