Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
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
67 changes: 58 additions & 9 deletions csharp-basic-topics/InitSetters/InitSetters.Tests/CityTests.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
using FluentAssertions;

namespace InitSetters.Tests
{
public class CityTests
{
private readonly string _name = "Tokyo";
private readonly double _lat = 139.839478;
private readonly double _lon = 35.652832;
private readonly double _lat = 35.652832;
private readonly double _lon = 139.839478;

[Fact]
public void WhenConstructorIsInvoked_ThenValidObjectIsReturned()
Expand All @@ -15,9 +13,9 @@ public void WhenConstructorIsInvoked_ThenValidObjectIsReturned()
var city = new City(_name, _lat, _lon);

// Assert
city.Name.Should().Be(_name);
city.Latitude.Should().Be(_lat);
city.Longitude.Should().Be(_lon);
Assert.Equal(_name, city.Name);
Assert.Equal(_lat, city.Latitude);
Assert.Equal(_lon, city.Longitude);
}

[Fact]
Expand All @@ -31,7 +29,58 @@ public void WhenChangeNameIsInvoked_ThenNameIsChanged()
city.ChangeName(newName);

// Assert
city.Name.Should().Be(newName);
Assert.Equal(newName, city.Name);
}

[Fact]
public void WhenSetPropertyIsAssignedAfterCreation_ThenValueChanges()
{
// Arrange
var landmark = new Landmark { Name = "Senso-ji", City = "Tokyo" };

// Act
landmark.Name = "Senso-ji Temple";

// Assert
Assert.Equal("Senso-ji Temple", landmark.Name);
Assert.Equal("Tokyo", landmark.City);
}

[Fact]
public void WhenRequiredPropertyIsSet_ThenObjectIsCreated()
{
// Act
var japan = new Country { Name = "Japan", Capital = "Tokyo" };

// Assert
Assert.Equal("Japan", japan.Name);
Assert.Equal("Tokyo", japan.Capital);
}

[Fact]
public void WhenWithExpressionIsUsed_ThenOriginalIsUnchanged()
{
// Arrange
var tokyo = new Coordinates(35.652832, 139.839478);

// Act
var tower = tokyo with { Latitude = 35.658581, Longitude = 139.745438 };

// Assert
Assert.Equal(35.652832, tokyo.Latitude);
Assert.Equal(35.658581, tower.Latitude);
Assert.NotSame(tokyo, tower);
}

[Fact]
public void WhenObjectInitializerFollowsPrimaryConstructor_ThenInitializerWins()
{
// Act
var haneda = new Airport("HND", "Haneda") { Name = "Tokyo International" };

// Assert
Assert.Equal("HND", haneda.Code);
Assert.Equal("Tokyo International", haneda.Name);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

Expand All @@ -10,14 +10,13 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="FluentAssertions" Version="6.11.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.11.0" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="4.0.1">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.2.0">
<PackageReference Include="coverlet.collector" Version="10.1.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
Expand Down
8 changes: 8 additions & 0 deletions csharp-basic-topics/InitSetters/InitSetters/Airport.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace InitSetters
{
public class Airport(string code, string name)
{
public string Code { get; init; } = code;
public string Name { get; init; } = name;
}
}
4 changes: 4 additions & 0 deletions csharp-basic-topics/InitSetters/InitSetters/Coordinates.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
namespace InitSetters
{
public record Coordinates(double Latitude, double Longitude);
}
8 changes: 8 additions & 0 deletions csharp-basic-topics/InitSetters/InitSetters/Country.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace InitSetters
{
public class Country
{
public required string Name { get; init; }
public string? Capital { get; init; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
Expand Down
8 changes: 8 additions & 0 deletions csharp-basic-topics/InitSetters/InitSetters/Landmark.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace InitSetters
{
public class Landmark
{
public string Name { get; set; } = "";
public string City { get; init; } = "";
}
}
23 changes: 21 additions & 2 deletions csharp-basic-topics/InitSetters/InitSetters/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,32 @@ internal class Program
{
static void Main(string[] args)
{
var city = new City("Tokyo", 139.839478, 35.652832);
var city = new City("Tokyo", 35.652832, 139.839478);

Console.WriteLine($"{city.Name}: {city.Latitude}, {city.Longitude}");

city.ChangeName("Edo");

Console.WriteLine($"{city.Name}: {city.Latitude}, {city.Longitude}");

var landmark = new Landmark { Name = "Senso-ji", City = "Tokyo" };
landmark.Name = "Senso-ji Temple";

Console.WriteLine($"{landmark.Name} is in {landmark.City}");

var japan = new Country { Name = "Japan", Capital = "Tokyo" };

Console.WriteLine($"{japan.Name}: {japan.Capital}");

var tokyo = new Coordinates(35.652832, 139.839478);
var tower = tokyo with { Latitude = 35.658581, Longitude = 139.745438 };

Console.WriteLine(tokyo);
Console.WriteLine(tower);

var haneda = new Airport("HND", "Haneda") { Name = "Tokyo International" };

Console.WriteLine($"{haneda.Code}: {haneda.Name}");
}
}
}
}
Loading