Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Трофимов Никита #202

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Консоль работает, добавил тесты, добавил возможность изменять формат …
…изображения.
WoeromProg committed Jan 30, 2024
commit b711b40f4dfd2bb8bc2d3537bb704e11f743ff81
14 changes: 12 additions & 2 deletions TagsCloudContainer/App/ConsoleApp.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System.Drawing.Imaging;
using System.IO;
using TagsCloudContainer.App.Extensions;
using TagsCloudContainer.App.Interfaces;
using TagsCloudContainer.DrawRectangle.Interfaces;
@@ -32,9 +31,20 @@ public void Run()
var bitmap = _draw.CreateImage(words);
var projectDirectory = Directory.GetParent(Environment.CurrentDirectory).Parent.Parent.FullName;
var rnd = new Random();
bitmap.Save(projectDirectory + "\\Images", $"Rectangles{rnd.Next(1, 1000)}", ImageFormat.Png);
bitmap.Save(projectDirectory + "\\Images", $"Rectangles{rnd.Next(1, 1000)}", GetImageFormat(_settings.ImageFormat));

}

private ImageFormat GetImageFormat(string imageFormat)
{
return imageFormat.ToLower() switch
{
"png" => ImageFormat.Png,
"jpeg" => ImageFormat.Jpeg,
_ => throw new NotSupportedException("Unsupported image format.")
};
}

private string GetText(string filename)
{
if (!File.Exists(filename))
39 changes: 20 additions & 19 deletions TagsCloudContainer/Cloud/SpiralFunction.cs
Original file line number Diff line number Diff line change
@@ -1,25 +1,26 @@
using System.Drawing;

namespace TagsCloudContainer.Cloud;

public class SpiralFunction
namespace TagsCloudContainer.Cloud
{
private double angle;
private readonly Point _pastPoint;
private readonly double _step;

public SpiralFunction(Point start, double step)
{
_pastPoint = start;
_step = step;
}

public Point GetNextPoint()
public class SpiralFunction
{
var newX = (int)(_pastPoint.X + _step * angle * Math.Cos(angle));
var newY = (int)(_pastPoint.Y + _step * angle * Math.Sin(angle));
angle += Math.PI / 50;

return new Point(newX, newY);
private double angle;
private readonly Point _pastPoint;
private readonly double _step;

public SpiralFunction(Point start, double step)
{
_pastPoint = start;
_step = step;
}

public Point GetNextPoint()
{
var newX = (int)(_pastPoint.X + _step * angle * Math.Cos(angle));
var newY = (int)(_pastPoint.Y + _step * angle * Math.Sin(angle));
angle += Math.PI / 50;

return new Point(newX, newY);
}
}
}
6 changes: 6 additions & 0 deletions TagsCloudContainer/Console/CommandLineOptions.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
//NuGet CommandLineParser

using System.Drawing.Imaging;
using System.Runtime.CompilerServices;
using CommandLine;

namespace TagsCloudContainer;
@@ -26,4 +29,7 @@ public class CommandLineOptions

[Option('y', "CenterY", Required = false, HelpText = "Координата у для центра")]
public int CenterY { get; set; } = 0;

[Option('o', "ImageFormat", Required = false, HelpText = "Формат изображения", Default = "png")]
public string ImageFormat { get; set; }
}
2 changes: 2 additions & 0 deletions TagsCloudContainer/Console/Settings.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Drawing;
using System.Drawing.Imaging;

namespace TagsCloudContainer;

@@ -9,4 +10,5 @@ public class Settings
public Color Color { get; set; }
public string File { get; set; }
public string BoringWordsFileName { get; set; }
public string ImageFormat { get; set; }
}
3 changes: 2 additions & 1 deletion TagsCloudContainer/Container/Container.cs
Original file line number Diff line number Diff line change
@@ -21,7 +21,8 @@ public static IContainer SetDiBuilder(CommandLineOptions options)
FontName = options.FontName,
FontSize = options.FontSize,
File = options.PathToInputFile,
BoringWordsFileName = options.PathToBoringWordsFile
BoringWordsFileName = options.PathToBoringWordsFile,
ImageFormat = options.ImageFormat
})
.As<Settings>();
builder.RegisterType<FileReaderFactory>().AsSelf();
4 changes: 0 additions & 4 deletions TagsCloudContainer/DrawRectangle/RectangleDraw.cs
Original file line number Diff line number Diff line change
@@ -10,15 +10,11 @@ public class RectangleDraw : IDraw
{
private readonly Settings _settings;
private readonly CircularCloudLayouter _layouter;
// private Bitmap _bitmap;
// private readonly Size shiftToBitmapCenter;

public RectangleDraw(CircularCloudLayouter layouter, Settings settings)
{
_layouter = layouter;
_settings = settings;
// _bitmap = new Bitmap(width, height);
// shiftToBitmapCenter = new Size(_bitmap.Width / 2, _bitmap.Height / 2);
}

private Bitmap CreateBitmap(List<Rectangle> rectangles)
Binary file added TagsCloudContainer/Images/BlueText.Png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes
Binary file added TagsCloudContainer/Images/JpegImageFormat.Jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TagsCloudContainer/Images/PurpleText.Png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed TagsCloudContainer/Images/Rectangles.Png
Binary file not shown.
Binary file added TagsCloudContainer/Images/RedText.Png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TagsCloudContainer/Images/ShiftCenterX.Png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 4 additions & 2 deletions TagsCloudContainer/Program.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
using Autofac;
using System.Diagnostics;
using Autofac;
using CommandLine;
using DocumentFormat.OpenXml.Spreadsheet;
using TagsCloudContainer.App;
using TagsCloudContainer.App.Interfaces;

namespace TagsCloudContainer
{
internal class Program
internal static class Program
{
public static void Main(string[] args)
{
6 changes: 6 additions & 0 deletions TagsCloudContainer/TagsCloudContainer.csproj
Original file line number Diff line number Diff line change
@@ -19,4 +19,10 @@
<Folder Include="Images\" />
</ItemGroup>

<ItemGroup>
<None Remove="Images\Rectangles863.Png" />
<None Remove="Images\Rectangles858.Png" />
<None Remove="Images\Rectangles305.Png" />
</ItemGroup>

</Project>
76 changes: 76 additions & 0 deletions TagsCloudContainerTests/CircularCloudLayouterTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
using System.Drawing;
using TagsCloudContainer;
using TagsCloudContainer.Cloud;

namespace TagsCloudContainerTests;

public class CircularCloudLayouterTest
{
[TestCase(0, 0, 1)]
[TestCase(2, 10, 2)]
public void CorrectParameters_ShouldNotGiveErrors(int x, int y, double step)
{
Action action = () => new SpiralFunction(new Point(x, y), step);
action.Should().NotThrow<ArgumentException>();
}
[TestFixture]
public class CircularCloudLayouter_Should
{
private Random _random = new(1);
private Point _center;
private static CircularCloudLayouter _layouter;
private List<Rectangle> _rectangles = new();


[SetUp]
public void SetUp()
{
_center = new Point(0, 0);
_layouter = new CircularCloudLayouter(_center);
}

[TestCase(0, 0)]
[TestCase(-1, -1)]
public void PutNextRectangle_ShouldThrowArgumentException_WhenIncorrectSize(int sizeX, int sizeY)
{
Action action = () => _layouter.PutNextRectangle(new Size(sizeX, sizeY));
action.Should().Throw<ArgumentException>().WithMessage("Width and Height Size should positive");
}

[TestCase(10, 10, 10)]
public void PutNextRectangle_AddRectangles(int sizeX, int sizeY, int count)
{
for (var i = 0; i < count; i++)
_layouter.PutNextRectangle(new Size(sizeX, sizeY));

_layouter._rectangles.Count.Should().Be(count);
}

[Test]
public void CreateEmptyRectangle()
{
_layouter = new CircularCloudLayouter(new Point());
_layouter._rectangles.Should().BeEmpty();
}

[TestCase(30)]
[TestCase(50)]
[TestCase(100)]
public void PlacedRectangles_ShouldTrue_WhenCorrectNotIntersects(int countRectangles)
{
var isIntersectsWith = false;

for (var i = 0; i < countRectangles; i++)
{
var size = new Size(_random.Next(50, 100), _random.Next(40, 80));
var rectangle = _layouter.PutNextRectangle(size);
if (rectangle.IsIntersectOthersRectangles(_rectangles))
{
isIntersectsWith = true;
}
_rectangles.Add(rectangle);
}
isIntersectsWith.Should().BeTrue();
}
}
}
33 changes: 33 additions & 0 deletions TagsCloudContainerTests/FileReaderTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
using TagsCloudContainer.FileReader;

namespace TagsCloudContainerTests
{
[TestFixture]
public class FileReaderTest
{

[TestCase("Text.txt")]
[TestCase("Boring.txt")]
public void GetReader_ShouldCorrectTxtReader(string fileName)
{
var reader = new FileReaderFactory().GetReader(fileName);
reader.Should().BeOfType<TxtFileReader>();
}

[TestCase("Text.docx")]
[TestCase("Boring.docx")]
public void GetReader_ShouldCorrectDocxReader(string fileName)
{
var reader = new FileReaderFactory().GetReader(fileName);
reader.Should().BeOfType<DocxFileReader>();
}

[TestCase("Text.mp4")]
[TestCase("Boring.cs")]
public void GetReader_ShouldThrowArgumentException(string fileName)
{
Action action = () => new FileReaderFactory().GetReader(fileName);
action.Should().Throw<ArgumentException>();
}
}
}
2 changes: 2 additions & 0 deletions TagsCloudContainerTests/GlobalUsings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
global using NUnit.Framework;
global using FluentAssertions;
25 changes: 25 additions & 0 deletions TagsCloudContainerTests/TagsCloudContainerTests.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="FluentAssertions" Version="7.0.0-alpha.3" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0" />
<PackageReference Include="NUnit" Version="3.13.3" />
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
<PackageReference Include="NUnit.Analyzers" Version="3.6.1" />
<PackageReference Include="coverlet.collector" Version="6.0.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\TagsCloudContainer\TagsCloudContainer.csproj" />
</ItemGroup>

</Project>
Binary file added TagsCloudContainerTests/TextFiles/Boring.docx
Binary file not shown.
19 changes: 19 additions & 0 deletions TagsCloudContainerTests/TextFiles/Boring.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
Наверное
Круто
Ну
В целом
Как бы
Вот так
Конечно
Ого
Ага
Угу
Круто
Поэтому
Блин
Черт
Хрыщ
Хаха
Хихи
Вау
Типа
Binary file added TagsCloudContainerTests/TextFiles/Text.docx
Binary file not shown.
5 changes: 5 additions & 0 deletions TagsCloudContainerTests/TextFiles/Text.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
В одном небольшом IT-городе ну живет обычная типа команда разработчиков: мистер и миссис Кодеровы со типа своим молодым сыном. Ранним ну утром во вторник глава команды как обычно запускает свой компьютер и направляется на работу в офис. В течение дня ему неоднократно встречаются странные люди в футболках с логотипами, которые что-то празднуют. Один из них даже делится секретом эффективной сортировки, и мистер Кодер думает, что бедняга, наверное, спятил. При этом упоминаются некие Фреймворки, а такую технологию, между прочим, используют родственники Кодеровых, которых последние всячески избегают. Странной была и роботизированная кофеварка, которая следила за мистером Кодеровым при выходе из кухни. По его возвращении с работы кофеварка опять оказывается на прежнем месте, будто готовила кофе там весь день. А в новостях по телевизору сообщают о необычных событиях — о код-ревью, в большом количестве проводимых повсюду посреди бела дня, и об устраиваемых в разных местах хакатонах, напоминающих битву идей.

Уже ночью, ну после того, как типа Кодеровы ну ложатся спать, на Git-улице появляется ну человек с огромными ну наклейками ну кода, в худи и с ноутбуком — Альберт Девмакрос, который с помощью дебаггера выявляет ну все баги в проекте. Он подсаживается на окно к кофеварке и начинает разговаривать с ней, после чего та принимает облик строгого архитектора, которого Девмакрос называет профессором Архи Дизайна.

Эти двое странных людей типа начинают обсуждать последние новости, связанные типа между собой: выпуск ну новой версии языка типа программирования и гибель бага в коде, из-за которого типа ну многие функции перестали работать. Очевидно, команде удалось выжить в ситуации, в которой ломались многие проекты. По заданию Девмакроса Рубеус Хакгид должен забрать команду из офиса и привезти сюда, на Git-улицу. Девмакрос собирается отдать команду на попечение в новый проект, поскольку Анна Кодерова была лучшей подругой Линукса и приходится всей команде единственной дружной связью. Профессор Архи Дизайна шокирована этой новостью. Она говорит, что этот проект — просто ужасный среди всех проектов, и команда будет тут глубоко несчастна. Альберт Девмакрос доказывает ей, что в мире программирования им будет ещё хуже, ведь они уже знамениты, и, стало быть, есть большая опасность для них стать этакими гуру, избалованными чужим вниманием...
12 changes: 12 additions & 0 deletions TagsCloudContainerTests/TextFiles/UpperWords.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
ПРИВЕТ
ПРИВЕТ
ПРИВЕТ
КАК
КАК
КАК
КАК
КАК
ДЕЛА
ДЕЛА
У
ТЕБЯ
29 changes: 29 additions & 0 deletions TagsCloudContainerTests/WordProcessingTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using TagsCloudContainer;
using TagsCloudContainer.FileReader;
using TagsCloudContainer.WordProcessing;

namespace TagsCloudContainerTests;

[TestFixture]
public class WordProcessingTest
{
[TestCase("UpperWords.txt")]
public void WordProcessing_ShouldCorrectToLowerAndCountWords(string filename)
{
var testWords = new List<Word>()
{
new("привет") { Count = 3 },
new("как") { Count = 5 },
new("дела") { Count = 2 },
new("у") { Count = 1 },
new("тебя") { Count = 1 }
};
filename = "../../../../TagsCloudContainerTests/TextFiles/" + filename;
var settings = new Settings();
var reader = new FileReaderFactory().GetReader(filename);
var file = reader.GetTextFromFile(filename);
var words = new WordProcessor(settings).ProcessWords(file);
for (var i = 0; i < words.Count; i++)
words[i].Count.Should().Be(testWords[i].Count);
}
}
6 changes: 6 additions & 0 deletions di.sln
Original file line number Diff line number Diff line change
@@ -4,6 +4,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FractalPainter", "FractalPa
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TagsCloudContainer", "TagsCloudContainer\TagsCloudContainer.csproj", "{37217157-A81C-4A85-940E-4707CF7E3C7C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TagsCloudContainerTests", "TagsCloudContainerTests\TagsCloudContainerTests.csproj", "{663057DE-1A8D-4ED6-A7C1-1A5CBE92B8CF}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -18,5 +20,9 @@ Global
{37217157-A81C-4A85-940E-4707CF7E3C7C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{37217157-A81C-4A85-940E-4707CF7E3C7C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{37217157-A81C-4A85-940E-4707CF7E3C7C}.Release|Any CPU.Build.0 = Release|Any CPU
{663057DE-1A8D-4ED6-A7C1-1A5CBE92B8CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{663057DE-1A8D-4ED6-A7C1-1A5CBE92B8CF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{663057DE-1A8D-4ED6-A7C1-1A5CBE92B8CF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{663057DE-1A8D-4ED6-A7C1-1A5CBE92B8CF}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal