Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }