< Summary

Information
Class: MyNet.Globalization.Facade.GlobalizationServiceProxy
Assembly: MyNet.Globalization
File(s): https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.Globalization/Facade/GlobalizationServiceProxy.cs
Tag: 323_28699572109
Line coverage
67%
Covered lines: 23
Uncovered lines: 11
Coverable lines: 34
Total lines: 118
Line coverage: 67.6%
Branch coverage
50%
Covered branches: 4
Total branches: 8
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)50%22100%
get_CurrentCulture()100%11100%
get_CurrentTimeZone()100%210%
get_Now()100%210%
add_CultureChanged(...)100%11100%
remove_CultureChanged(...)100%11100%
add_TimeZoneChanged(...)100%11100%
remove_TimeZoneChanged(...)100%11100%
SetTarget(...)50%2285.71%
SetCulture(...)100%11100%
SetCulture(...)100%11100%
SetTimeZone(...)100%210%
SetTimeZone(...)100%210%
FromUtc(...)100%210%
ToUtc(...)100%210%
Convert(...)100%210%
UseCulture(...)100%210%
UseTimeZone(...)100%210%
WireInnerEvents()100%11100%
UnwireInnerEvents()100%11100%
ForwardCultureChanged(...)100%22100%
ForwardTimeZoneChanged(...)0%620%

File(s)

https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.Globalization/Facade/GlobalizationServiceProxy.cs

#LineLine coverage
 1// -----------------------------------------------------------------------
 2// <copyright file="GlobalizationServiceProxy.cs" company="Stéphane ANDRE">
 3// Copyright (c) Stéphane ANDRE. All rights reserved.
 4// </copyright>
 5// -----------------------------------------------------------------------
 6
 7using System;
 8using System.Globalization;
 9using MyNet.Globalization.Culture;
 10using MyNet.Globalization.DateTime;
 11
 12namespace MyNet.Globalization.Facade;
 13
 14/// <summary>
 15/// Stable <see cref="IGlobalizationService"/> facade whose target can be swapped at startup.
 16/// </summary>
 17internal sealed class GlobalizationServiceProxy : IGlobalizationService
 18{
 19    private IGlobalizationService _inner;
 20
 21    private event EventHandler<CultureChangedEventArgs>? CultureChangedInternal;
 22
 23    private event EventHandler<TimeZoneChangedEventArgs>? TimeZoneChangedInternal;
 24
 25    /// <summary>
 26    /// Initializes a new instance of the <see cref="GlobalizationServiceProxy"/> class.
 27    /// </summary>
 28    /// <param name="inner">Initial globalization service implementation.</param>
 29    public GlobalizationServiceProxy(IGlobalizationService inner)
 30    {
 931        _inner = inner ?? throw new ArgumentNullException(nameof(inner));
 932        WireInnerEvents();
 933    }
 34
 35    /// <inheritdoc />
 15336    public CultureInfo CurrentCulture => _inner.CurrentCulture;
 37
 38    /// <inheritdoc />
 039    public TimeZoneInfo CurrentTimeZone => _inner.CurrentTimeZone;
 40
 41    /// <inheritdoc />
 042    public System.DateTime Now => _inner.Now;
 43
 44    /// <inheritdoc />
 45    public event EventHandler<CultureChangedEventArgs> CultureChanged
 46    {
 16247        add => CultureChangedInternal += value;
 348        remove => CultureChangedInternal -= value;
 49    }
 50
 51    /// <inheritdoc />
 52    public event EventHandler<TimeZoneChangedEventArgs> TimeZoneChanged
 53    {
 354        add => TimeZoneChangedInternal += value;
 355        remove => TimeZoneChangedInternal -= value;
 56    }
 57
 58    /// <summary>
 59    /// Replaces the forwarded globalization service implementation.
 60    /// </summary>
 61    /// <param name="target">The configured globalization service.</param>
 62    public void SetTarget(IGlobalizationService target)
 63    {
 664        ArgumentNullException.ThrowIfNull(target);
 65
 666        if (ReferenceEquals(_inner, target))
 067            return;
 68
 669        UnwireInnerEvents();
 670        _inner = target;
 671        WireInnerEvents();
 672    }
 73
 74    /// <inheritdoc />
 570375    public void SetCulture(CultureInfo culture) => _inner.SetCulture(culture);
 76
 77    /// <inheritdoc />
 5178    public void SetCulture(string cultureCode) => _inner.SetCulture(cultureCode);
 79
 80    /// <inheritdoc />
 081    public void SetTimeZone(TimeZoneInfo timeZone) => _inner.SetTimeZone(timeZone);
 82
 83    /// <inheritdoc />
 084    public void SetTimeZone(string timeZoneId) => _inner.SetTimeZone(timeZoneId);
 85
 86    /// <inheritdoc />
 087    public DateTimeOffset FromUtc(DateTimeOffset utcDateTime) => _inner.FromUtc(utcDateTime);
 88
 89    /// <inheritdoc />
 090    public DateTimeOffset ToUtc(DateTimeOffset localDateTime) => _inner.ToUtc(localDateTime);
 91
 92    /// <inheritdoc />
 93    public DateTimeOffset Convert(DateTimeOffset dateTime, TimeZoneInfo sourceTimeZone, TimeZoneInfo destinationTimeZone
 094        => _inner.Convert(dateTime, sourceTimeZone, destinationTimeZone);
 95
 96    /// <inheritdoc />
 097    public IDisposable UseCulture(CultureInfo culture) => _inner.UseCulture(culture);
 98
 99    /// <inheritdoc />
 0100    public IDisposable UseTimeZone(TimeZoneInfo timeZone) => _inner.UseTimeZone(timeZone);
 101
 102    private void WireInnerEvents()
 103    {
 15104        _inner.CultureChanged += ForwardCultureChanged;
 15105        _inner.TimeZoneChanged += ForwardTimeZoneChanged;
 15106    }
 107
 108    private void UnwireInnerEvents()
 109    {
 6110        _inner.CultureChanged -= ForwardCultureChanged;
 6111        _inner.TimeZoneChanged -= ForwardTimeZoneChanged;
 6112    }
 113
 4749114    private void ForwardCultureChanged(object? sender, CultureChangedEventArgs e) => CultureChangedInternal?.Invoke(this
 115
 0116    private void ForwardTimeZoneChanged(object? sender, TimeZoneChangedEventArgs e) => TimeZoneChangedInternal?.Invoke(t
 117}
 118