コード例 #1
0
        public void TestAllUnicodeEscapeCharacters()
        {
            Span <char> storage = stackalloc char[5];

            storage[0] = 'u';
            Span <char>         innerStorage = storage.Slice(1);
            ReadOnlySpan <char> format       = "X4";

            for (int i = 0; i <= char.MaxValue; i++)
            {
                i.TryFormat(innerStorage, out var charsWritten, format);
                Assert.Equal((char)i, EscapeSequence.EscapeChar('u', storage, 1, out var adj));
                ;
            }
        }
コード例 #2
0
        public void TestVariableLengthUnicodeEscapeCharacters()
        {
            Span <char> storage = stackalloc char[5];

            storage[0] = 'x';
            Span <char>         innerStorage = storage.Slice(1);
            ReadOnlySpan <char> format       = "X";

            for (int i = 0; i <= char.MaxValue; i++)
            {
                i.TryFormat(innerStorage, out var charsWritten, format);
                Span <char> writeStorage = storage.Slice(0, charsWritten + 1);
                Assert.Equal((char)i, EscapeSequence.EscapeChar('x', writeStorage, 1, out var adj));
                Assert.Equal(charsWritten, adj);
                ;
            }
        }
コード例 #3
0
        public void TestAllInvalidEscapesFail()
        {
            char[] valid = new char[]
            {
                '\'', '\"', '\\',
                '0', 'a', 'b', 'f', 'n',
                'r', 't', 'v',
                'u', 'x', 'U',
            };
            char i = (char)0;

            // Don't want to N^2 for all characters
            // Just ones we know are in ASCII
            for (; i < 256; i++)
            {
                if (valid.Contains(i))
                {
                    continue;
                }
                Assert.Throws <UnrecognizedEscapeException>(() =>
                {
                    EscapeSequence.EscapeChar(i, ReadOnlySpan <char> .Empty, 0, out var _);
                });
            }
            for (; i < char.MaxValue; i++)
            {
                Assert.Throws <UnrecognizedEscapeException>(() =>
                {
                    EscapeSequence.EscapeChar(i, ReadOnlySpan <char> .Empty, 0, out var _);
                });
            }
            // Handle max value
            Assert.Throws <UnrecognizedEscapeException>(() =>
            {
                EscapeSequence.EscapeChar(i, ReadOnlySpan <char> .Empty, 0, out var _);
            });
        }
コード例 #4
0
 public void TestSurragePairEscapeSequenceThrows()
 {
     Assert.Throws <UnsupportedSurrogatePairEscapeException>(() => EscapeSequence.EscapeChar('U', "U12345678", 1, out var _));
 }
コード例 #5
0
 public void TestTooShortVariableLengthUnicodeEscapeSequenceThrows()
 {
     Assert.Throws <OutOfCharactersException>(() => EscapeSequence.EscapeChar('x', "x", 1, out var adj));
 }
コード例 #6
0
 public void TestInvalidVariableLengthUnicodeEscapeSequenceThrows()
 {
     Assert.Throws <UnrecognizedEscapeException>(() => EscapeSequence.EscapeChar('x', "x-", 1, out var adj));
 }
コード例 #7
0
 public void TestInvalidUnicodeEscapeSequenceThrows()
 {
     Assert.Throws <UnrecognizedEscapeException>(() => EscapeSequence.EscapeChar('u', "u123-", 1, out var adj));
 }
コード例 #8
0
 public void TestTooShortUnicodeEscapeSequenceThrows()
 {
     Assert.Throws <OutOfCharactersException>(() => EscapeSequence.EscapeChar('u', "u123", 1, out var adj));
 }
コード例 #9
0
 public void TestPrimaryEscapeSequencesWork(char input, char output)
 {
     Assert.Equal(output, EscapeSequence.EscapeChar(input, ReadOnlySpan <char> .Empty, 0, out var _));
 }
コード例 #10
0
 public void TestUnicodeAdjustment()
 {
     EscapeSequence.EscapeChar('u', "u1234", 1, out var adj);
     Assert.Equal(4, adj);
 }
コード例 #11
0
 public void TestNormalAdjustment()
 {
     EscapeSequence.EscapeChar('a', ReadOnlySpan <char> .Empty, 0, out var adj);
     Assert.Equal(0, adj);
 }