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); }
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>())); }
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>())); }
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 }
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); }
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>())); }
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)); }
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++; }
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); }
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>())); }
public void Decode_EmptyGrid_Exception() { // Arrange, Act & Assert Assert.Throws <Exception>(() => PyxcellConvert.Decode("Empty.png")); }