Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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()); }
        }