##// END OF EJS Templates
Added test for TraceRegistry
cin -
r287:78da52bb28f0 v3
parent child
Show More
@@ -0,0 +1,41
1 using System;
2 using System.Threading;
3 using System.Threading.Tasks;
4 using Implab.Components;
5 using Implab.Diagnostics;
6 using Xunit;
7
8 namespace Implab.Test {
9
10 public class DiagnosticsTest {
11 class Foo {}
12
13 [Fact]
14 public void TestRegistration() {
15 var channel = TraceSourceChannel<Foo>.Default;
16
17 Assert.Equal(typeof(Foo), channel.Id);
18 Assert.Equal(typeof(Foo).FullName, channel.Source.Name);
19
20 TraceSourceChannel found = null;
21 int visited = 0;
22
23 TraceRegistry.Global.Subscribe(x => {
24 visited++;
25 found = x as TraceSourceChannel;
26 }, false);
27
28 Assert.Equal(0, visited);
29
30 TraceRegistry.Global.Subscribe(x => {
31 visited++;
32 found = x as TraceSourceChannel;
33 }, true);
34
35 Assert.Equal(1,visited);
36 Assert.Equal(channel, found);
37
38 }
39
40 }
41 } No newline at end of file
@@ -1,6 +1,6
1 <Project Sdk="Microsoft.NET.Sdk">
1 <Project Sdk="Microsoft.NET.Sdk">
2 <PropertyGroup Condition="'$(OSTYPE)'=='linux'">
2 <PropertyGroup Condition="'$(OSTYPE)'=='linux'">
3 <TargetFramework>netcoreapp2.0</TargetFramework>
3 <TargetFrameworks>netcoreapp2.0;;net46</TargetFrameworks>
4 <FrameworkPathOverride Condition="'$(TargetFramework)'=='net46'">/usr/lib/mono/4.6-api/</FrameworkPathOverride>
4 <FrameworkPathOverride Condition="'$(TargetFramework)'=='net46'">/usr/lib/mono/4.6-api/</FrameworkPathOverride>
5 </PropertyGroup>
5 </PropertyGroup>
6
6
@@ -24,9 +24,16 namespace Implab.Playground {
24 public class Program {
24 public class Program {
25
25
26 static void Main(string[] args) {
26 static void Main(string[] args) {
27 Trace<Foo>.Log("First!");
28 Log("+1!");
27
29
28 using(TraceRegistry.Global.Subscribe(ch => {
30 using(TraceRegistry.Global.Subscribe(x => {
31 var ch = x as TraceSourceChannel;
32 if (ch == null)
33 return;
34
29 Console.WriteLine($"{ch.Id}: {ch.Source.Name}");
35 Console.WriteLine($"{ch.Id}: {ch.Source.Name}");
36
30 }, true)) {
37 }, true)) {
31 Trace<Foo>.Log("Hi!");
38 Trace<Foo>.Log("Hi!");
32 Log("Respect!");
39 Log("Respect!");
@@ -12,16 +12,23 using System.Threading.Tasks;
12 namespace Implab.Diagnostics {
12 namespace Implab.Diagnostics {
13 /// <summary>
13 /// <summary>
14 /// Static class which creates an individual <see cref="TraceSource"/> for
14 /// Static class which creates an individual <see cref="TraceSource"/> for
15 /// the type specified in the parameter <typeparamref name="T"/>.
15 /// the type specified in the parameter <typeparamref name="T"/> and uses
16 /// it to perform logging operations.
16 /// </summary>
17 /// </summary>
17 /// <typeparam name="T">The type for which tracing is demanded.</typeparam>
18 /// <typeparam name="T">The type for which tracing is demanded.</typeparam>
18 public static class Trace<T> {
19 public static class Trace<T> {
19
20
20 readonly static Lazy<TraceSource> _trace = new Lazy<TraceSource>(() => TraceSourceChannel<T>.Default.Source);
21 readonly static Lazy<TraceSource> _trace = new Lazy<TraceSource>(() => TraceSourceChannel<T>.Default.Source);
21
22
23 /// <summary>
24 /// The <see cref="TraceSource"/> associated with the current class.
25 /// TraceSource is created using <see cref="TraceSourceChannel{T}"/>.
26 /// </summary>
22 public static TraceSource TraceSource { get { return _trace.Value; } }
27 public static TraceSource TraceSource { get { return _trace.Value; } }
23
28
24 #if NETFX_TRACE_BUG
29 #if NETFX_TRACE_BUG
30 // AsyncLocal will store value inside the current execution context
31 // and will force it to be copied... not a very effective solution.
25 readonly static AsyncLocal<object> m_currentOperation = new AsyncLocal<object>();
32 readonly static AsyncLocal<object> m_currentOperation = new AsyncLocal<object>();
26 #endif
33 #endif
27
34
@@ -23,7 +23,7 namespace Implab.Diagnostics {
23 public static TraceSourceChannel Default { get { return _traceSource.Value; } }
23 public static TraceSourceChannel Default { get { return _traceSource.Value; } }
24
24
25 static TraceSourceChannel CreateChannel() {
25 static TraceSourceChannel CreateChannel() {
26 var channel = new TraceSourceChannel(typeof(T), typeof(T).Name);
26 var channel = new TraceSourceChannel(typeof(T), typeof(T).FullName);
27
27
28 TraceRegistry.Global.Register(channel);
28 TraceRegistry.Global.Register(channel);
29
29
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
General Comments 3
Under Review
author

Auto status change to "Under Review"

Approved
author

ok, latest stable version should be in default

You need to be logged in to leave comments. Login now