##// 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 1 <Project Sdk="Microsoft.NET.Sdk">
2 2 <PropertyGroup Condition="'$(OSTYPE)'=='linux'">
3 <TargetFramework>netcoreapp2.0</TargetFramework>
3 <TargetFrameworks>netcoreapp2.0;;net46</TargetFrameworks>
4 4 <FrameworkPathOverride Condition="'$(TargetFramework)'=='net46'">/usr/lib/mono/4.6-api/</FrameworkPathOverride>
5 5 </PropertyGroup>
6 6
@@ -24,9 +24,16 namespace Implab.Playground {
24 24 public class Program {
25 25
26 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 35 Console.WriteLine($"{ch.Id}: {ch.Source.Name}");
36
30 37 }, true)) {
31 38 Trace<Foo>.Log("Hi!");
32 39 Log("Respect!");
@@ -12,16 +12,23 using System.Threading.Tasks;
12 12 namespace Implab.Diagnostics {
13 13 /// <summary>
14 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 17 /// </summary>
17 18 /// <typeparam name="T">The type for which tracing is demanded.</typeparam>
18 19 public static class Trace<T> {
19 20
20 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 27 public static TraceSource TraceSource { get { return _trace.Value; } }
23 28
24 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 32 readonly static AsyncLocal<object> m_currentOperation = new AsyncLocal<object>();
26 33 #endif
27 34
@@ -23,7 +23,7 namespace Implab.Diagnostics {
23 23 public static TraceSourceChannel Default { get { return _traceSource.Value; } }
24 24
25 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 28 TraceRegistry.Global.Register(channel);
29 29
1 NO CONTENT: file was removed
1 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