WeaverILGenerationTests.cs
4.2 KB
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
using Mono.Cecil;
using Mono.Cecil.Cil;
using NUnit.Framework;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[TestFixture]
public class WeaverILGenerationTests
{
[Test]
public void TargetRPCServerClientChecks()
{
WeaverILMatcher.MatchMethodIL(typeof(WeaverILGenerationTests_TargetRPCServerClientChecks), "CallTargetRpcTest", false, 1, 1,
new MockInstruction(OpCodes.Isinst, "UnityEngine.Networking.ULocalConnectionToServer"),
new MockInstruction(OpCodes.Brfalse),
new MockInstruction(OpCodes.Ldstr),
new MockInstruction(OpCodes.Call, "System.Void UnityEngine.Debug::LogError(System.Object)"),
new MockInstruction(OpCodes.Ret)
);
WeaverILMatcher.MatchMethodIL(typeof(WeaverILGenerationTests_TargetRPCServerClientChecks), "CallTargetRpcTest", false, 1, 1,
new MockInstruction(OpCodes.Call, "System.Boolean UnityEngine.Networking.NetworkServer::get_active()"),
new MockInstruction(OpCodes.Brtrue),
new MockInstruction(OpCodes.Ldstr),
new MockInstruction(OpCodes.Call, "System.Void UnityEngine.Debug::LogError(System.Object)"),
new MockInstruction(OpCodes.Ret)
);
}
[Test]
public void RpcPassingEnumArrays()
{
WeaverILMatcher.MatchMethodIL(typeof(WeaverILGenerationTests_TargetRPCServerClientChecks), "CallRpcWithEnumArray", false, 1, 1,
new MockInstruction(OpCodes.Call, "System.Void Unity.GeneratedNetworkCode::_WriteArrayAttributeTargets_None(UnityEngine.Networking.NetworkWriter,System.AttributeTargets[])")
);
}
[Test]
public void SyncListsAreAutoInitializedInConstructor()
{
WeaverILMatcher.MatchMethodIL(typeof(WeaverILGenerationTests_SyncLists), ".ctor", false, 0, 1,
new MockInstruction(OpCodes.Ldarg_0),
new MockInstruction(OpCodes.Newobj, "System.Void UnityEngine.Networking.SyncListInt::.ctor()"),
new MockInstruction(OpCodes.Stfld, "UnityEngine.Networking.SyncListInt WeaverILGenerationTests_SyncLists::Inited")
);
/*WeaverILMatcher.MatchMethodIL(typeof(WeaverILGenerationTests_SyncLists), ".ctor", false, 0, 1,
new MockInstruction(OpCodes.Ldarg_0),
new MockInstruction(OpCodes.Newobj, "System.Void UnityEngine.Networking.SyncListInt::.ctor()"),
new MockInstruction(OpCodes.Stfld, "UnityEngine.Networking.SyncListInt WeaverILGenerationTests_SyncLists::NotInited")
);*/
}
[Test]
public void SyncListsAreOnlySerializedOnce()
{
WeaverILMatcher.MatchMethodIL(typeof(WeaverILGenerationTests_SyncLists), "OnSerialize", true, 2, 2,
new MockInstruction(OpCodes.Ldfld, "UnityEngine.Networking.SyncListInt WeaverILGenerationTests_SyncLists::Inited"),
new MockInstruction(OpCodes.Call, "System.Void UnityEngine.Networking.SyncListInt::WriteInstance(UnityEngine.Networking.NetworkWriter,UnityEngine.Networking.SyncListInt)")
);
/*WeaverILMatcher.MatchMethodIL(typeof(WeaverILGenerationTests_SyncLists), "OnSerialize", true, 2, 2,
new MockInstruction(OpCodes.Ldfld, "UnityEngine.Networking.SyncListInt WeaverILGenerationTests_SyncLists::NotInited"),
new MockInstruction(OpCodes.Call, "System.Void UnityEngine.Networking.SyncListInt::WriteInstance(UnityEngine.Networking.NetworkWriter,UnityEngine.Networking.SyncListInt)")
);*/
}
[Test]
public void SyncListsNetworkBehaviourWithSyncListCallsBaseClassAwakeMethod()
{
WeaverILMatcher.MatchMethodIL(typeof(WeaverILGenerationTests_SyncLists), "Awake", false, 0, 1,
new MockInstruction(OpCodes.Ldarg_0),
new MockInstruction(OpCodes.Call, "System.Void WeaverILGenerationTests_SyncLists_Base::Awake()")
);
}
[Test]
public void SyncNetworkBehaviourBaseClassPreStartClientMethodFromSubclass()
{
WeaverILMatcher.MatchMethodIL(typeof(WeaverILGenerationTests_SyncLists), "PreStartClient", false, 0, 1,
new MockInstruction(OpCodes.Ldarg_0),
new MockInstruction(OpCodes.Call, "System.Void WeaverILGenerationTests_SyncLists_Base::PreStartClient()")
);
}
}