chr
2026-04-05 fe750b791d5b517cc4e9bc8e99a9a75139a0cfba
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
using System;
using System.Collections.Generic;
using System.Globalization;
using NUnit.Framework;
namespace OpenTap.Engine.UnitTests
{
    
    
    
    [TestFixture]
    public class BeforeAttributeTest
    {
        public class StringConvertProviderA : IStringConvertProvider
        {
            public static readonly List<Type> UseOrder = new List<Type>();
            public string GetString(object value, CultureInfo culture)
            {
                if (UseOrder.Contains(GetType()) == false)
                {
                    UseOrder.Add(GetType());
                }
                return null;
            }
        
            public object FromString(string stringData, ITypeData type, object contextObject, CultureInfo culture)
            {
                return null;
            }
        }
 
        [Before(typeof(StringConvertProviderC))]
        [Before(typeof(StringConvertProviderD))]
        public class StringConvertProviderB : StringConvertProviderA
        {
            
        }
        
        [Before(typeof(StringConvertProviderA))]
        public class StringConvertProviderC : StringConvertProviderA
        {
            
        }
        [Before(typeof(StringConvertProviderC))]
        public class StringConvertProviderD : StringConvertProviderA
        {
            
        }
        
        [Test]
        public void TestBeforeAttribute()
        {
            StringConvertProvider.GetString(new StringConvertProviderD());
            
            var ia = StringConvertProviderA.UseOrder.IndexOf(typeof(StringConvertProviderA));
            var ib = StringConvertProviderA.UseOrder.IndexOf(typeof(StringConvertProviderB));
            var ic = StringConvertProviderA.UseOrder.IndexOf(typeof(StringConvertProviderC));
            var id = StringConvertProviderA.UseOrder.IndexOf(typeof(StringConvertProviderD));
            Assert.IsTrue(ib < ic);
            Assert.IsTrue(ib < id);
            Assert.IsTrue(id < ic);
            Assert.IsTrue(ic < ia);
        }
        
    }
}