Exemple #1
0
        public static void EncoderExceptionFallbackBufferTest()
        {
            Encoder encoder = Encoding.GetEncoding("us-ascii", new EncoderExceptionFallback(), new DecoderExceptionFallback()).GetEncoder();

            char [] chars = new char[] { '\uFFFF' };
            byte [] bytes = new byte[2];

            Assert.Throws <EncoderFallbackException>(() => encoder.GetBytes(chars, 0, 1, bytes, 0, true));

            EncoderFallbackBuffer fallbackBuffer = encoder.FallbackBuffer;

            Assert.True(fallbackBuffer is EncoderExceptionFallbackBuffer, "Expected to get EncoderExceptionFallbackBuffer type");
            Assert.Throws <EncoderFallbackException>(() => fallbackBuffer.Fallback(chars[0], 0));
            Assert.Throws <EncoderFallbackException>(() => fallbackBuffer.Fallback('\u0040', 0));
            Assert.Throws <EncoderFallbackException>(() => fallbackBuffer.Fallback('\uD800', '\uDC00', 0));

            Assert.Equal(0, fallbackBuffer.Remaining);
            Assert.Equal('\u0000', fallbackBuffer.GetNextChar());

            Assert.False(fallbackBuffer.MovePrevious(), "MovePrevious expected to always return false");

            fallbackBuffer.Reset();

            Assert.Equal(0, fallbackBuffer.Remaining);
            Assert.Equal('\u0000', fallbackBuffer.GetNextChar());
        }
Exemple #2
0
        public static void EncoderReplacementFallbackBufferTest()
        {
            Encoder encoder = Encoding.GetEncoding("us-ascii", new EncoderReplacementFallback(), new DecoderReplacementFallback()).GetEncoder();

            char [] chars = new char [] { '\uFFFF' };
            byte [] bytes = new byte [2];

            EncoderFallbackBuffer fallbackBuffer = encoder.FallbackBuffer;

            Assert.True(fallbackBuffer is EncoderReplacementFallbackBuffer, "Expected to get EncoderReplacementFallbackBuffer type");
            Assert.True(fallbackBuffer.Fallback(chars[0], 0), "Expected we fallback on the given buffer");
            Assert.Equal(1, fallbackBuffer.Remaining);
            Assert.False(fallbackBuffer.MovePrevious(), "Expected we cannot move back on the replacement buffer as we are at the Beginning of the buffer");
            Assert.Equal('?', fallbackBuffer.GetNextChar());
            Assert.True(fallbackBuffer.MovePrevious(), "Expected we can move back on the replacement buffer");
            Assert.Equal('?', fallbackBuffer.GetNextChar());

            fallbackBuffer.Reset();
            Assert.Equal(0, fallbackBuffer.Remaining);
            Assert.Equal('\u0000', fallbackBuffer.GetNextChar());
            Assert.False(fallbackBuffer.MovePrevious(), "Expected we cannot move back on the replacement buffer as we are rest the buffer");
        }
Exemple #3
0
        private int GetBytesInternal(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)
        {
            var outpos = byteIndex;

            for (var inpos = charIndex; inpos < (charIndex + charCount); inpos++)
            {
                var character = chars[inpos];
                var @byte     = NOCHAR;
                var escape    = false;

                if (character < Ucs2ToGsm.Length)
                {
                    @byte = Ucs2ToGsm[character];

                    if (@byte == ESCAPE)
                    {
                        escape = true;
                        @byte  = Ucs2ToGsmExtended[character];
                    }
                }
                else if (character >= Ucs2GclToGsmBase && character <= Ucs2GclToGsmMax)
                {
                    escape = true;
                    @byte  = Ucs2GclToGsm[character - Ucs2GclToGsmBase];
                }
                else if (character == '\x20AC') // Euro sign.
                {
                    escape = true;
                    @byte  = 0x65;
                }

                if (@byte == NOCHAR)
                {
                    char tmp;
                    EncoderFallbackBuffer.Fallback(character, inpos);

                    while ((tmp = EncoderFallbackBuffer.GetNextChar()) != 0)
                    {
                        if (bytes != null)
                        {
                            bytes[outpos++] = Ucs2ToGsm[tmp]; // FIXME: Character might not be a 7-bit one..
                        }
                        else
                        {
                            outpos++;
                        }
                    }

                    EncoderFallbackBuffer.Reset();
                }
                else
                {
                    if (bytes != null)
                    {
                        if (escape)
                        {
                            bytes[outpos++] = ESCAPE;
                        }
                        bytes[outpos++] = @byte;
                    }
                    else
                    {
                        outpos += escape ? 2 : 1;
                    }
                }
            }

            return(outpos - byteIndex);
        }