Exemplo n.º 1
0
        public void GetModeSmall()
        {
            var nabe = new Nabe();

            for (var c = 'a'; c <= 'z'; c++)
            {
                Assert.Equal(Nabe.Block.Mode.Small, nabe.GetMode($"{c}"));
            }
        }
Exemplo n.º 2
0
        public void GetModeBase64()
        {
            var nabe = new Nabe();

            for (var c = 'あ'; c <= 'ん'; c++)
            {
                Assert.Equal(Nabe.Block.Mode.Base64, nabe.GetMode($"{c}"));
            }
        }
Exemplo n.º 3
0
        public void GetModeBig()
        {
            var nabe = new Nabe();

            for (var c = 'A'; c <= 'Z'; c++)
            {
                Assert.Equal(Nabe.Block.Mode.Big, nabe.GetMode($"{c}"));
            }
        }
Exemplo n.º 4
0
        public void GetModeSymbol()
        {
            var nabe = new Nabe();

            foreach (var s in new[] {
                "!", "\"", "#", "$", "%", "&", "'", "(", ")", "*", "+",
                ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@",
                "[", "\\", "]", "^", "_", "`", "{", "|", "}", "~", " "
            })
            {
                Assert.Equal(Nabe.Block.Mode.Symbol, nabe.GetMode(s));
            }
        }
Exemplo n.º 5
0
        public void Test_Parse()
        {
            var data = new[] {
                new byte[] { 0x8F, 0xBA },
                new byte[] { 0x90, 0x89 },
                new byte[] { 0x90, 0x8A },
                new byte[] { 0x8F, 0xBA, 0xdb, 0x40, 0xdd, 0x00 },
                new byte[] { 0x90, 0x89, 0xdb, 0x40, 0xdd, 0x00 },
                new byte[] { 0x90, 0x8A, 0xdb, 0x40, 0xdd, 0x00 }
            };

            foreach (var b in data)
            {
                Assert.NotNull(Nabe.Parse(b));
            }


            Assert.Throws <InvalidNabeFormatException>(() => Nabe.Parse(new byte[] { 0x1 }));
            Assert.Throws <InvalidNabeFormatException>(() => Nabe.Parse(System.Array.Empty <byte>()));
        }
Exemplo n.º 6
0
        /// <summary>
        /// デコード本体
        /// </summary>
        /// <returns></returns>
        public IEnumerable <byte> Decode()
        {
            var nextMod  = 0;
            var stack    = new Stack <int>();
            var encoding = new UnicodeEncoding(true, false);

            while (stream.Peek() > 0)
            {
                for (var item = StringInfo.GetTextElementEnumerator(stream.ReadLine() ?? string.Empty);
                     item.MoveNext();)
                {
                    var bytes = encoding.GetBytes(item.GetTextElement());

                    var nextNabe = Nabe.Parse(bytes.AsSpan());

                    if (nextNabe.Position is null)
                    {
                        if (stack.Any())
                        {
                            yield return((byte)Aggregate(stack, nextMod));
                        }

                        nextMod = (int)nextNabe.Base;
                    }
                    else
                    {
                        stack.Push(Wbase59.ToValue(nextNabe));
                    }
                }

                if (!stack.Any())
                {
                    continue;
                }
                yield return((byte)Aggregate(stack, nextMod));
            }
        }