public void TruncateTest() { // Load font file set the width of every character to 1 for easy testing byte[] data = Plug.New("resource://mindtouch.deki/MindTouch.Deki.Resources.Arial.mtdf").Get().ToBytes(); int length = (int)data[4] + ((int)data[5] << 8) + ((int)data[6] << 16); for (int i = 0; i < length; i++) { data[8 + 3 * i + 2] = 1; } DekiFont font = new DekiFont(data); String testString = "HelloWorldThisIsMindTouchHowisLife?"; String newString; // Test that Truncate does it's job properly for different length requirements for (int i = testString.Length; i > 0; i--) { newString = font.Truncate(testString, i); if (i == testString.Length) { Assert.AreEqual(testString, newString); } else { Assert.AreEqual(new StringBuilder(testString.Substring(0, i)).Append("...").ToString(), newString); } } // Test with int.MaxValue as max length, should return the original string newString = font.Truncate(testString, int.MaxValue); Assert.AreEqual(testString, newString); // Test with 0 as max length, should throw error try { font.Truncate(testString, 0); } catch (ArgumentException e) { Assert.IsTrue(e.GetType() == (new ArgumentNullException()).GetType()); } // Change all letters to 0's to make sure that default width get used for (int i = 0; i < length; i++) { data[8 + 3 * i] = 0; data[8 + 3 * i + 1] = 0; } data[7] = 2; // change default width to 2 font = new DekiFont(data); newString = font.Truncate(testString, 10); Assert.AreEqual(5 + 3, newString.Length); }
public void DekiFontConstructorTest() { DekiFont f; // Contruct with null constructor, should fail try{ f = new DekiFont(null); } catch (ArgumentException e) { Assert.IsTrue(e.GetType() == (new ArgumentNullException()).GetType()); } // create small data, should fail byte[] data = { 0, 0, 0 }; try { f = new DekiFont(data); } catch (ArgumentException e) { Assert.IsTrue("data buffer too small" == e.Message.ToString()); } // Load font file data = Plug.New("resource://mindtouch.deki/MindTouch.Deki.Resources.Arial.mtdf").Get().ToBytes(); // Attempt to construct class, should pass f = new DekiFont(data); // Change to bad size, should fail byte[] new_data = new byte[data.Length - 1]; for (int i = 0; i < data.Length - 1; i++) { new_data[i] = data[i]; } try{ f = new DekiFont(new_data); } catch (ArgumentException e) { Assert.IsTrue("data size mismatch" == e.Message.ToString()); } // Change data to bad signature, should fail data[3] = 50; try { f = new DekiFont(data); } catch (ArgumentException e) { Assert.IsTrue("unknown data signature" == e.Message.ToString()); } }