Ejemplo n.º 1
0
        public void TestDisplayItemListMenu()
        {
            var menu = new ItemListMenu(
                "Which item would you choose?",
                new[]
            {
                new ItemListEntry("Item 1", 0x01),
                new ItemListEntry("Item 2", 0x100),
                new ItemListEntry("Item 3", 0x1000, 250)
            }
                );

            var data = new DisplayItemListMenu(menu).Compile();

            var question       = menu.Question;
            var questionLength = Math.Min(255, question.Length);
            var entriesCount   = 0;
            var length         = 11 + questionLength;

            foreach (var entry in menu.Entries)
            {
                length += 5 + entry.Name.Length;
                if (entriesCount == 255)
                {
                    break;
                }

                entriesCount++;
            }

            Span <byte> expectedData = stackalloc byte[length];
            var         pos          = 0;

            expectedData.Write(ref pos, (byte)0x7C); // Packet ID
            expectedData.Write(ref pos, (ushort)length);
            expectedData.Write(ref pos, menu.Serial);
            expectedData.Write(ref pos, (ushort)0x00);
            expectedData.Write(ref pos, (byte)questionLength);
            expectedData.WriteAscii(ref pos, question, 255);
            expectedData.Write(ref pos, (byte)entriesCount);
            for (var i = 0; i < entriesCount; i++)
            {
                var entry = menu.Entries[i];
                expectedData.Write(ref pos, (ushort)entry.ItemID);
                expectedData.Write(ref pos, (ushort)entry.Hue);
                var name = entry.Name?.Trim() ?? "";
                expectedData.Write(ref pos, (byte)Math.Min(255, name.Length));
                expectedData.WriteAscii(ref pos, name, 255);
            }

            AssertThat.Equal(data, expectedData);
        }
Ejemplo n.º 2
0
        public void TestDisplayItemListMenu()
        {
            var menu = new ItemListMenu(
                "Which item would you choose?",
                new[]
            {
                new ItemListEntry("Item 1", 0x01),
                new ItemListEntry("Item 2", 0x100),
                new ItemListEntry("Item 3", 0x1000, 250)
            }
                );

            string question       = menu.Question?.Trim() ?? "";
            int    questionLength = Math.Min(255, question.Length);

            int length = 11 + questionLength + menu.Entries.Sum(entry => 5 + entry.Name?.Trim().Length ?? 0);

            Span <byte> data = new DisplayItemListMenu(menu).Compile();

            Span <byte> expectedData = stackalloc byte[length];

            int pos = 0;

            expectedData[pos++] = 0x7C; // Packet ID
            ((ushort)length).CopyTo(ref pos, expectedData);
            menu.Serial.CopyTo(ref pos, expectedData);
            pos += 2; // ((ushort)0x00).CopyTo(ref pos, expectedData);
            expectedData[pos++] = (byte)questionLength;
            question.CopyASCIITo(ref pos, expectedData);
            expectedData[pos++] = (byte)menu.Entries.Length;
            for (int i = 0; i < menu.Entries.Length; i++)
            {
                var entry = menu.Entries[i];
                ((ushort)entry.ItemID).CopyTo(ref pos, expectedData);
                ((ushort)entry.Hue).CopyTo(ref pos, expectedData);
                string name = entry.Name?.Trim() ?? "";

                expectedData[pos++] = (byte)name.Length;
                name.CopyASCIITo(ref pos, expectedData);
            }

            AssertThat.Equal(data, expectedData);
        }