示例#1
0
        public void Encode_EncodeValidData_OutputImage()
        {
            var keywords = new Dictionary <string, Color>
            {
                { "Hello", Color.Red },
                { "world", Color.Purple }
            };

            var image = PyxcellConvert.Encode("Hello world, how are you?", _defaultColours, keywords);

            _output.WriteLine(image);
        }
示例#2
0
        public void Encode_MessageLengthLimit_Exception()
        {
            // Arrange
            var message = string.Empty;

            for (int i = 0; i < 2500; i++)
            {
                message += "x";
            }

            // Act & Assert
            Assert.Throws <ArgumentException>(() => PyxcellConvert.Encode(message, _defaultColours, new Dictionary <string, Color>()));
        }
示例#3
0
        public void Encode_EmptyOrNullMessage_Exception()
        {
            // Arrange
            var colours = new List <Color>()
            {
                Color.Cornsilk
            };

            // Act & Assert
            Assert.Throws <ArgumentException>(() => PyxcellConvert.Encode("", colours, new Dictionary <string, Color>()));
            Assert.Throws <ArgumentException>(() => PyxcellConvert.Encode(string.Empty, colours, new Dictionary <string, Color>()));
            Assert.Throws <ArgumentException>(() => PyxcellConvert.Encode(null, colours, new Dictionary <string, Color>()));
        }
示例#4
0
        public void Decode_Succesful_ReturnImage()
        {
            // Arrange & Act
            var image = PyxcellConvert.Decode("HelloWorld.png");

            // Assert
            Assert.Equal(96, image.CharacterPatternMap.Count);
            Assert.Equal("Hello world, how are you?", image.Message);
            Assert.Contains("Hello", image.Keywords.Keys);
            Assert.Contains("world", image.Keywords.Keys);

            // ToDo: add colour tests because not all colours may be used due to random selection
        }
示例#5
0
        private int[] DecodeGridPattern()
        {
            var(row, column) = PyxcellConvert.GetGridPosition(_gridNumber);

            var pixelRow = _image.GetPixelRowSpan(row);

            var pattern = new int[Constraints.GridSize];

            for (int i = 0; i < pattern.Length; i++)
            {
                Color columnFill = new Rgba32(pixelRow[column + i].Rgba);
                pattern[i] = columnFill == Color.Transparent ? 0 : 1;
            }

            return(pattern);
        }
示例#6
0
        public void Encode_PatternLimit_Exception()
        {
            // Arrange
            var colours = new List <Color>();

            for (int i = 0; i < 128; i++)
            {
                var valueOne = Convert.ToByte(i % 256);
                var byteMax  = Convert.ToByte(255);
                var byteMin  = Convert.ToByte(0);
                colours.Add(new Rgba32(valueOne, byteMax, byteMax));
            }

            // Act & Assert
            Assert.Throws <Exception>(() => PyxcellConvert.Encode("Hello world!", colours, new Dictionary <string, Color>()));
        }
示例#7
0
        public void Encode_KeywordColourInMainPalette_Exception()
        {
            // Arrange
            var colours = new List <Color>
            {
                Color.Blue,
                Color.Teal
            };

            var keywords = new Dictionary <string, Color>
            {
                { "Hello", Color.Teal }
            };

            // Act & Assert
            Assert.Throws <ArgumentException>(() => PyxcellConvert.Encode("Hello world", colours, keywords));
        }
示例#8
0
        public void Draw(int[] pattern, Color colour)
        {
            var(row, column) = PyxcellConvert.GetGridPosition(_gridNumber);

            for (int i = 0; i < pattern.Length; i++)
            {
                if (pattern[i] == 1)
                {
                    var topLeft     = new PointF(column + i, row);
                    var bottomRight = new PointF(topLeft.X + 1, topLeft.Y + Constraints.GridSize);

                    var line = new RectangularPolygon(topLeft, bottomRight);
                    _image.Mutate(x => x.Fill(colour, line));
                }
            }

            _gridNumber++;
        }
示例#9
0
        private Color DecodeGridColour()
        {
            var(row, column) = PyxcellConvert.GetGridPosition(_gridNumber);

            var pixelRow = _image.GetPixelRowSpan(row);

            Color colour = Color.Transparent;

            for (int i = 0; i < Constraints.GridSize; i++)
            {
                colour = new Rgba32(pixelRow[column + i].Rgba);
                if (colour != Color.Transparent)
                {
                    break;
                }
            }

            if (colour == Color.Transparent)
            {
                throw new Exception($"Could not find colour for grid {_gridNumber}.");
            }

            return(colour);
        }
示例#10
0
 public void Encode_EmptyOrNullColours_Exception()
 {
     // Arrange, Act & Assert
     Assert.Throws <ArgumentException>(() => PyxcellConvert.Encode("Hello world!", new List <Color>(), new Dictionary <string, Color>()));
     Assert.Throws <ArgumentException>(() => PyxcellConvert.Encode("Hello world", null, new Dictionary <string, Color>()));
 }
示例#11
0
 public void Decode_EmptyGrid_Exception()
 {
     // Arrange, Act & Assert
     Assert.Throws <Exception>(() => PyxcellConvert.Decode("Empty.png"));
 }