public void SetUp() { defaultWords = new List <string> { "di", "solid", "mocking", "unit", "to" }; defaultHeights = Enumerable.Repeat(30, defaultWords.Count).ToList(); wordsPreprocessor1 = A.Fake <IWordsPreprocessor>(); wordsPreprocessor2 = A.Fake <IWordsPreprocessor>(); wordsFilter1 = A.Fake <IWordsFilter>(); wordsFilter2 = A.Fake <IWordsFilter>(); wordsFramer = A.Fake <IWordsHeighter>(); layouter = A.Fake <ICloudLayouter>(); writer = A.Fake <IWordsBitmapWriter>(); A.CallTo(() => wordsPreprocessor1.Process(null)).WithAnyArguments().Returns(defaultWords); A.CallTo(() => wordsPreprocessor2.Process(null)).WithAnyArguments().Returns(defaultWords); A.CallTo(() => wordsFilter1.GetFiltered(null)).WithAnyArguments().Returns(defaultWords); A.CallTo(() => wordsFilter2.GetFiltered(null)).WithAnyArguments().Returns(defaultWords); A.CallTo(() => wordsFramer.GetWithHeights(null)).WithAnyArguments().Returns(defaultWords.Zip(defaultHeights, Tuple.Create)); A.CallTo(() => layouter.PutNextRectangle(Size.Empty)).WithAnyArguments().Returns(Rectangle.Empty); A.CallTo(() => writer.Write(null)).WithAnyArguments().Returns(bitmapResult); container = new CloudContainer( new [] { wordsPreprocessor1, wordsPreprocessor2 }, new [] { wordsFilter1, wordsFilter2 }, wordsFramer, layouter, writer, ImageFormat.Bmp); }
public Stream GetTagsCloud(IEnumerable <string> words) { var wordsList = words.ToList(); if (!wordsList.Any()) { throw new ArgumentException("No words were provided"); } IEnumerable <string> wordsEnumerable = wordsList; wordsList = wordsPreprocessors .Aggregate(wordsEnumerable, (current, preprocessor) => preprocessor.Process(current)) .ToList(); wordsEnumerable = wordsList; wordsList = wordsFilters .Aggregate(wordsEnumerable, (current, filter) => filter.GetFiltered(current)).ToList(); var wordsWithHeights = wordsFramer.GetWithHeights(wordsList).OrderByDescending(wh => wh.Item2); var wordsWithSizes = wordsWithHeights.Select(wh => Tuple.Create( wh.Item1, new Size( (int)Math.Round(bitmapWriter.GetWordWidth(wh.Item1, wh.Item2)), wh.Item2 ) )); var layoutedWords = wordsWithSizes .Select(ws => Tuple.Create(ws.Item1, cloudLayouter.PutNextRectangle(ws.Item2))).ToList(); var result = new MemoryStream(); bitmapWriter.Write(layoutedWords).Save(result, imageFormat); result.Seek(0, SeekOrigin.Begin); return(result); }