diff --git a/KerbalVR/KerbalVR.csproj b/KerbalVR/KerbalVR.csproj
index ef8c77bd..94f1098d 100644
--- a/KerbalVR/KerbalVR.csproj
+++ b/KerbalVR/KerbalVR.csproj
@@ -31,7 +31,7 @@
- ksp_lib\Assembly-CSharp.dll
+ ..\..\..\..\..\..\GOG Games\Kerbal Space Program\KSP_x64_Data\Managed\Assembly-CSharp.dll
@@ -40,11 +40,10 @@
- ksp_lib\UnityEngine.dll
+ ..\..\..\..\..\..\GOG Games\Kerbal Space Program\KSP_x64_Data\Managed\UnityEngine.dll
-
- False
- ksp_lib\UnityEngine.UI.dll
+
+ ..\..\..\..\..\..\GOG Games\Kerbal Space Program\KSP_x64_Data\Managed\UnityEngine.UI.dll
diff --git a/KerbalVR/KerbalVR_AppGUI.cs b/KerbalVR/KerbalVR_AppGUI.cs
index 6dd683ac..13f53ab4 100644
--- a/KerbalVR/KerbalVR_AppGUI.cs
+++ b/KerbalVR/KerbalVR_AppGUI.cs
@@ -8,25 +8,30 @@ namespace KerbalVR
{
public class AppGUI
{
- private class TextFieldFloat {
+ private class TextFieldFloat
+ {
private string parameterName;
private Action parameterCallback;
private string valueStr;
- public TextFieldFloat(string parameterName, float parameter, Action parameterCallback) {
+ public TextFieldFloat(string parameterName, float parameter, Action parameterCallback)
+ {
this.parameterName = parameterName;
this.parameterCallback = parameterCallback;
valueStr = parameter.ToString("F3");
}
- public void UpdateGUI() {
+ public void UpdateGUI()
+ {
GUILayout.BeginHorizontal();
GUILayout.Label(parameterName + ":", HighLogic.Skin.label);
valueStr = GUILayout.TextField(valueStr, HighLogic.Skin.textField);
- if (GUI.changed) {
+ if (GUI.changed)
+ {
float updatedValue;
bool parseSuccess = System.Single.TryParse(valueStr, out updatedValue);
- if (parseSuccess) {
+ if (parseSuccess)
+ {
parameterCallback(updatedValue);
}
}
@@ -35,15 +40,19 @@ public void UpdateGUI() {
}
#region Constants
- public static string AppButtonLogo {
- get {
+ public static string AppButtonLogo
+ {
+ get
+ {
string path = Path.Combine(Globals.KERBALVR_TEXTURES_DIR, "app_button_logo");
return path.Replace("\\", "/");
}
}
- public static bool SceneAllowsAppGUI {
- get {
+ public static bool SceneAllowsAppGUI
+ {
+ get
+ {
return (
#if DEBUG
(HighLogic.LoadedScene == GameScenes.MAINMENU) ||
@@ -93,7 +102,8 @@ public static bool SceneAllowsAppGUI {
/// application launcher. Note that this callback can be called multiple times
/// throughout the game.
///
- public void OnAppLauncherReady() {
+ public void OnAppLauncherReady()
+ {
// define where should the app button be visible
/*
@@ -107,7 +117,8 @@ public void OnAppLauncherReady() {
*/
// create new app button instance if it doesn't already exist
- if (appButton == null) {
+ if (appButton == null)
+ {
// init variables
worldScaleStr = Scene.Instance.WorldScale.ToString("F1");
@@ -128,11 +139,13 @@ public void OnAppLauncherReady() {
}
}
- void OnShow() {
+ void OnShow()
+ {
appButtonGuiActive = appButtonGuiActiveLastState;
}
- void OnHide() {
+ void OnHide()
+ {
appButtonGuiActiveLastState = appButtonGuiActive;
appButtonGuiActive = false;
}
@@ -142,8 +155,10 @@ void OnHide() {
/// at the time the plugin is loaded. It destroys the application button on the
/// application launcher.
///
- public void OnAppLauncherDestroyed() {
- if (appButton != null) {
+ public void OnAppLauncherDestroyed()
+ {
+ if (appButton != null)
+ {
OnToggleFalse();
ApplicationLauncher.Instance.RemoveApplication(appButton);
ApplicationLauncher.Instance.RemoveOnShowCallback(OnShow);
@@ -154,19 +169,23 @@ public void OnAppLauncherDestroyed() {
///
/// Callback when the application button is toggled on.
///
- public void OnToggleTrue() {
+ public void OnToggleTrue()
+ {
appButtonGuiActive = true;
}
///
/// Callback when the application button is toggled off.
///
- public void OnToggleFalse() {
+ public void OnToggleFalse()
+ {
appButtonGuiActive = false;
}
- public void OnGUI() {
- if (SceneAllowsAppGUI && appButtonGuiActive) {
+ public void OnGUI()
+ {
+ if (SceneAllowsAppGUI && appButtonGuiActive)
+ {
appGuiWindowRect = GUILayout.Window(
APP_GUI_ID,
appGuiWindowRect,
@@ -176,20 +195,23 @@ public void OnGUI() {
}
}
- private void GenerateGUI(int windowId) {
+ private void GenerateGUI(int windowId)
+ {
string buttonStringToggleVr = BUTTON_STRING_ENABLE_VR;
string labelStringVrActive = LABEL_STRING_VR_INACTIVE;
string buttonStringToggleMirror = BUTTON_STRING_ENABLE_MIRROR;
GUIStyle labelStyleVrActive = new GUIStyle(HighLogic.Skin.label);
labelStyleVrActive.normal.textColor = Color.red;
- if (Core.HmdIsRunning) {
+ if (Core.HmdIsRunning)
+ {
buttonStringToggleVr = BUTTON_STRING_DISABLE_VR;
labelStringVrActive = LABEL_STRING_VR_ACTIVE;
labelStyleVrActive.normal.textColor = Color.green;
}
- if (Core.RenderHmdToScreen) {
+ if (Core.RenderHmdToScreen)
+ {
buttonStringToggleMirror = BUTTON_STRING_DISABLE_MIRROR;
}
@@ -198,25 +220,36 @@ private void GenerateGUI(int windowId) {
// VR toggle button
//------------------------------------------------------------------
UnityEngine.GUI.enabled = Scene.Instance.SceneAllowsVR();
- if (GUILayout.Button(buttonStringToggleVr, HighLogic.Skin.button)) {
- if (Core.HmdIsEnabled) {
+ if (GUILayout.Button(buttonStringToggleVr, HighLogic.Skin.button))
+ {
+ if (Core.HmdIsEnabled)
+ {
Core.HmdIsEnabled = false;
- } else {
+ }
+ else
+ {
Core.HmdIsEnabled = true;
}
}
- if (Core.CanResetSeatedPose()) {
- if (GUILayout.Button("Reset Headset Position", HighLogic.Skin.button)) {
+ if (Core.CanResetSeatedPose())
+ {
+ if (GUILayout.Button("Reset Headset Position", HighLogic.Skin.button))
+ {
Core.ResetInitialHmdPosition();
}
}
- if (Core.HmdIsRunning) {
- if (GUILayout.Button(buttonStringToggleMirror, HighLogic.Skin.button)) {
- if (Core.RenderHmdToScreen) {
+ if (Core.HmdIsRunning)
+ {
+ if (GUILayout.Button(buttonStringToggleMirror, HighLogic.Skin.button))
+ {
+ if (Core.RenderHmdToScreen)
+ {
Core.RenderHmdToScreen = false;
- } else {
+ }
+ else
+ {
Core.RenderHmdToScreen = true;
}
}
@@ -240,17 +273,37 @@ private void GenerateGUI(int windowId) {
#if DEBUG
GUILayout.BeginHorizontal();
GUILayout.Label("Hand Size:", HighLogic.Skin.label);
- int handSizeScale = (int)(DeviceManager.Instance.ManipulatorSize * 100f + 0.5f);
- string handSizeStr = handSizeScale.ToString();
- handSizeStr = GUILayout.TextField(handSizeStr, HighLogic.Skin.textField);
- if (GUI.changed) {
- bool parseSuccess = System.Int32.TryParse(handSizeStr, out handSizeScale);
- if (parseSuccess &&
- handSizeScale >= 1 &&
- handSizeScale <= 100) {
- DeviceManager.Instance.ManipulatorSize = handSizeScale * 0.01f;
- } else {
- DeviceManager.Instance.ManipulatorSize = 0.45f;
+ int handSizeScaleLeft = (int)(DeviceManager.Instance.ManipulatorLeft.ManipulatorSize * 100f + 0.5f);
+ int handSizeScaleRight = (int)(DeviceManager.Instance.ManipulatorRight.ManipulatorSize * 100f + 0.5f);
+ string handSizeStrLeft = handSizeScaleLeft.ToString();
+ string handSizeStrRight = handSizeScaleRight.ToString();
+ handSizeStrLeft = GUILayout.TextField(handSizeStrLeft, HighLogic.Skin.textField);
+ handSizeStrRight = GUILayout.TextField(handSizeStrRight, HighLogic.Skin.textField);
+ if (GUI.changed)
+ {
+ bool parseSuccessLeft = System.Int32.TryParse(handSizeStrLeft, out handSizeScaleLeft);
+ bool parseSuccessRight = System.Int32.TryParse(handSizeStrRight, out handSizeScaleRight);
+
+ if (parseSuccessLeft &&
+ handSizeScaleLeft >= 1 &&
+ handSizeScaleLeft <= 100)
+ {
+ DeviceManager.Instance.ManipulatorLeft.ManipulatorSize = handSizeScaleLeft * 0.01f;
+ }
+ else
+ {
+ DeviceManager.Instance.ManipulatorLeft.ManipulatorSize = 0.45f;
+ }
+
+ if (parseSuccessRight &&
+ handSizeScaleRight >= 1 &&
+ handSizeScaleRight <= 100)
+ {
+ DeviceManager.Instance.ManipulatorRight.ManipulatorSize = handSizeScaleRight * 0.01f;
+ }
+ else
+ {
+ DeviceManager.Instance.ManipulatorRight.ManipulatorSize = 0.45f;
}
}
GUILayout.EndHorizontal();
@@ -260,12 +313,14 @@ private void GenerateGUI(int windowId) {
GUILayout.BeginHorizontal();
GUILayout.Label("World Scale:", HighLogic.Skin.label);
worldScaleStr = GUILayout.TextField(worldScaleStr, HighLogic.Skin.textField);
- if (GUI.changed) {
+ if (GUI.changed)
+ {
float worldScale;
bool parseSuccess = System.Single.TryParse(worldScaleStr, out worldScale);
if (parseSuccess &&
worldScale >= 0.1 &&
- worldScale <= 10) {
+ worldScale <= 10)
+ {
Scene.Instance.WorldScale = worldScale;
}
}
@@ -274,7 +329,8 @@ private void GenerateGUI(int windowId) {
// init at startup toggle
GUILayout.BeginHorizontal();
bool initOpenVrAtStartup = GUILayout.Toggle(Configuration.Instance.InitOpenVrAtStartup, "Init OpenVR at startup", HighLogic.Skin.toggle);
- if (GUI.changed) {
+ if (GUI.changed)
+ {
Configuration.Instance.InitOpenVrAtStartup = initOpenVrAtStartup;
}
GUILayout.EndHorizontal();
@@ -282,7 +338,8 @@ private void GenerateGUI(int windowId) {
// swap control stick yaw and roll
GUILayout.BeginHorizontal();
bool swapYawRollControls = GUILayout.Toggle(Configuration.Instance.SwapYawRollControls, "Swap Yaw/Roll Controls", HighLogic.Skin.toggle);
- if (GUI.changed) {
+ if (GUI.changed)
+ {
Configuration.Instance.SwapYawRollControls = swapYawRollControls;
}
GUILayout.EndHorizontal();
diff --git a/KerbalVR/KerbalVR_Manipulator.cs b/KerbalVR/KerbalVR_Manipulator.cs
index 8acddaec..078a9af7 100644
--- a/KerbalVR/KerbalVR_Manipulator.cs
+++ b/KerbalVR/KerbalVR_Manipulator.cs
@@ -21,6 +21,9 @@ public class Manipulator : MonoBehaviour
public SteamVR_Controller.Device State { get; private set; }
public Vector3 GripPosition { get; private set; }
+ // if this is 0.66, then the fingertip's collider will be only 66% as big as the glove's model original fingertip sphere collider. 1.0 keeps the original size.
+ private float _overrideFingertipScale = 0.66f;
+
// Manipulator object properties
private float _manipulatorSize = 0.45f;
public float ManipulatorSize {
@@ -95,6 +98,9 @@ protected void LoadManipulatorRenderGameObject() {
}
fingertipCollider = colliderObject.GetComponent();
+ // Reduce the size of the finger tip to avoid butterfingers on the square buttons around RasterPropMonitor (the regular fingerTip's sphere clicks 3 at once).
+ fingertipCollider.transform.localScale = _overrideFingertipScale * fingertipCollider.transform.localScale;
+
colliderObject = gloveGameObject.transform.Find("HandDummy/Arm Bone L/Wrist Bone L");
if (colliderObject == null) {
Utils.LogWarning("Manipulator is missing grip collider child object");
diff --git a/KerbalVR/Library/APIUpdater/project-dependencies.graph b/KerbalVR/Library/APIUpdater/project-dependencies.graph
new file mode 100644
index 00000000..eb91ac7b
Binary files /dev/null and b/KerbalVR/Library/APIUpdater/project-dependencies.graph differ
diff --git a/KerbalVR/Library/AnnotationManager b/KerbalVR/Library/AnnotationManager
new file mode 100644
index 00000000..b9c4c180
Binary files /dev/null and b/KerbalVR/Library/AnnotationManager differ
diff --git a/KerbalVR/Library/AssetImportState b/KerbalVR/Library/AssetImportState
new file mode 100644
index 00000000..715f58c1
--- /dev/null
+++ b/KerbalVR/Library/AssetImportState
@@ -0,0 +1 @@
+19;0;4;0;0
\ No newline at end of file
diff --git a/KerbalVR/Library/BuildPlayer.prefs b/KerbalVR/Library/BuildPlayer.prefs
new file mode 100644
index 00000000..e69de29b
diff --git a/KerbalVR/Library/BuildSettings.asset b/KerbalVR/Library/BuildSettings.asset
new file mode 100644
index 00000000..1106cfef
Binary files /dev/null and b/KerbalVR/Library/BuildSettings.asset differ
diff --git a/KerbalVR/Library/CurrentLayout-default.dwlt b/KerbalVR/Library/CurrentLayout-default.dwlt
new file mode 100644
index 00000000..14b6433a
--- /dev/null
+++ b/KerbalVR/Library/CurrentLayout-default.dwlt
@@ -0,0 +1,733 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &1
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12004, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_PixelRect:
+ serializedVersion: 2
+ x: 11.2
+ y: -1108.8
+ width: 2048
+ height: 1028
+ m_ShowMode: 4
+ m_Title:
+ m_RootView: {fileID: 6}
+ m_MinSize: {x: 950, y: 544}
+ m_MaxSize: {x: 10000, y: 10000}
+--- !u!114 &2
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Children:
+ - {fileID: 9}
+ - {fileID: 3}
+ m_Position:
+ serializedVersion: 2
+ x: 0
+ y: 30
+ width: 2048
+ height: 978
+ m_MinSize: {x: 685, y: 494}
+ m_MaxSize: {x: 14006, y: 14044}
+ vertical: 0
+ controlID: 114
+--- !u!114 &3
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Children: []
+ m_Position:
+ serializedVersion: 2
+ x: 1632
+ y: 0
+ width: 416
+ height: 978
+ m_MinSize: {x: 279, y: 72}
+ m_MaxSize: {x: 4004, y: 4022}
+ m_ActualView: {fileID: 14}
+ m_Panes:
+ - {fileID: 14}
+ m_Selected: 0
+ m_LastSelected: 0
+--- !u!114 &4
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Children: []
+ m_Position:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 403
+ height: 592
+ m_MinSize: {x: 202, y: 222}
+ m_MaxSize: {x: 4002, y: 4022}
+ m_ActualView: {fileID: 15}
+ m_Panes:
+ - {fileID: 15}
+ m_Selected: 0
+ m_LastSelected: 0
+--- !u!114 &5
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Children: []
+ m_Position:
+ serializedVersion: 2
+ x: 0
+ y: 592
+ width: 1632
+ height: 386
+ m_MinSize: {x: 232, y: 272}
+ m_MaxSize: {x: 10002, y: 10022}
+ m_ActualView: {fileID: 13}
+ m_Panes:
+ - {fileID: 13}
+ - {fileID: 18}
+ m_Selected: 0
+ m_LastSelected: 0
+--- !u!114 &6
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12008, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Children:
+ - {fileID: 7}
+ - {fileID: 2}
+ - {fileID: 8}
+ m_Position:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 2048
+ height: 1028
+ m_MinSize: {x: 950, y: 544}
+ m_MaxSize: {x: 10000, y: 10000}
+--- !u!114 &7
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12011, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Children: []
+ m_Position:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 2048
+ height: 30
+ m_MinSize: {x: 0, y: 0}
+ m_MaxSize: {x: 0, y: 0}
+ m_LastLoadedLayoutName:
+--- !u!114 &8
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12042, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Children: []
+ m_Position:
+ serializedVersion: 2
+ x: 0
+ y: 1008
+ width: 2048
+ height: 20
+ m_MinSize: {x: 0, y: 0}
+ m_MaxSize: {x: 0, y: 0}
+--- !u!114 &9
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Children:
+ - {fileID: 10}
+ - {fileID: 5}
+ m_Position:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1632
+ height: 978
+ m_MinSize: {x: 406, y: 494}
+ m_MaxSize: {x: 10002, y: 14044}
+ vertical: 1
+ controlID: 51
+--- !u!114 &10
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Children:
+ - {fileID: 4}
+ - {fileID: 11}
+ m_Position:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1632
+ height: 592
+ m_MinSize: {x: 406, y: 222}
+ m_MaxSize: {x: 8006, y: 4022}
+ vertical: 0
+ controlID: 52
+--- !u!114 &11
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Children: []
+ m_Position:
+ serializedVersion: 2
+ x: 403
+ y: 0
+ width: 1229
+ height: 592
+ m_MinSize: {x: 204, y: 222}
+ m_MaxSize: {x: 4004, y: 4022}
+ m_ActualView: {fileID: 16}
+ m_Panes:
+ - {fileID: 16}
+ - {fileID: 17}
+ - {fileID: 12}
+ m_Selected: 0
+ m_LastSelected: 1
+--- !u!114 &12
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12111, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_MinSize: {x: 400, y: 100}
+ m_MaxSize: {x: 2048, y: 2048}
+ m_TitleContent:
+ m_Text: Asset Store
+ m_Image: {fileID: 357073275683767465, guid: 0000000000000000d000000000000000,
+ type: 0}
+ m_Tooltip:
+ m_Pos:
+ serializedVersion: 2
+ x: 468
+ y: 181
+ width: 973
+ height: 501
+ m_ViewDataDictionary: {fileID: 0}
+--- !u!114 &13
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12014, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_MinSize: {x: 230, y: 250}
+ m_MaxSize: {x: 10000, y: 10000}
+ m_TitleContent:
+ m_Text: Project
+ m_Image: {fileID: -7501376956915960154, guid: 0000000000000000d000000000000000,
+ type: 0}
+ m_Tooltip:
+ m_Pos:
+ serializedVersion: 2
+ x: 11.2
+ y: -486.39996
+ width: 1632
+ height: 367
+ m_ViewDataDictionary: {fileID: 0}
+ m_SearchFilter:
+ m_NameFilter:
+ m_ClassNames: []
+ m_AssetLabels: []
+ m_AssetBundleNames: []
+ m_VersionControlStates: []
+ m_SoftLockControlStates: []
+ m_ReferencingInstanceIDs:
+ m_SceneHandles:
+ m_ShowAllHits: 0
+ m_SkipHidden: 0
+ m_SearchArea: 1
+ m_Folders:
+ - Assets
+ m_ViewMode: 1
+ m_StartGridSize: 64
+ m_LastFolders:
+ - Assets
+ m_LastFoldersGridSize: -1
+ m_LastProjectPath: C:\Users\MathieuBergounioux\source\repos\Kerbal-VR\KerbalVR
+ m_LockTracker:
+ m_IsLocked: 0
+ m_FolderTreeState:
+ scrollPos: {x: 0, y: 0}
+ m_SelectedIDs: 724c0000
+ m_LastClickedID: 19570
+ m_ExpandedIDs: 0000000000ca9a3b
+ m_RenameOverlay:
+ m_UserAcceptedRename: 0
+ m_Name:
+ m_OriginalName:
+ m_EditFieldRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 0
+ height: 0
+ m_UserData: 0
+ m_IsWaitingForDelay: 0
+ m_IsRenaming: 0
+ m_OriginalEventType: 11
+ m_IsRenamingFilename: 1
+ m_ClientGUIView: {fileID: 0}
+ m_SearchString:
+ m_CreateAssetUtility:
+ m_EndAction: {fileID: 0}
+ m_InstanceID: 0
+ m_Path:
+ m_Icon: {fileID: 0}
+ m_ResourceFile:
+ m_AssetTreeState:
+ scrollPos: {x: 0, y: 0}
+ m_SelectedIDs:
+ m_LastClickedID: 0
+ m_ExpandedIDs:
+ m_RenameOverlay:
+ m_UserAcceptedRename: 0
+ m_Name:
+ m_OriginalName:
+ m_EditFieldRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 0
+ height: 0
+ m_UserData: 0
+ m_IsWaitingForDelay: 0
+ m_IsRenaming: 0
+ m_OriginalEventType: 11
+ m_IsRenamingFilename: 1
+ m_ClientGUIView: {fileID: 0}
+ m_SearchString:
+ m_CreateAssetUtility:
+ m_EndAction: {fileID: 0}
+ m_InstanceID: 0
+ m_Path:
+ m_Icon: {fileID: 0}
+ m_ResourceFile:
+ m_ListAreaState:
+ m_SelectedInstanceIDs:
+ m_LastClickedInstanceID: 0
+ m_HadKeyboardFocusLastEvent: 0
+ m_ExpandedInstanceIDs: c6230000
+ m_RenameOverlay:
+ m_UserAcceptedRename: 0
+ m_Name:
+ m_OriginalName:
+ m_EditFieldRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 0
+ height: 0
+ m_UserData: 0
+ m_IsWaitingForDelay: 0
+ m_IsRenaming: 0
+ m_OriginalEventType: 11
+ m_IsRenamingFilename: 1
+ m_ClientGUIView: {fileID: 0}
+ m_CreateAssetUtility:
+ m_EndAction: {fileID: 0}
+ m_InstanceID: 0
+ m_Path:
+ m_Icon: {fileID: 0}
+ m_ResourceFile:
+ m_NewAssetIndexInList: -1
+ m_ScrollPosition: {x: 0, y: 0}
+ m_GridSize: 64
+ m_SkipHiddenPackages: 0
+ m_DirectoriesAreaWidth: 115
+--- !u!114 &14
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12019, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_MinSize: {x: 275, y: 50}
+ m_MaxSize: {x: 4000, y: 4000}
+ m_TitleContent:
+ m_Text: Inspector
+ m_Image: {fileID: -6905738622615590433, guid: 0000000000000000d000000000000000,
+ type: 0}
+ m_Tooltip:
+ m_Pos:
+ serializedVersion: 2
+ x: 1643.2
+ y: -1078.4
+ width: 414
+ height: 959
+ m_ViewDataDictionary: {fileID: 0}
+ m_OpenAddComponentMenu: 0
+ m_ObjectsLockedBeforeSerialization: []
+ m_InstanceIDsLockedBeforeSerialization:
+ m_LockTracker:
+ m_IsLocked: 0
+ m_PreviewResizer:
+ m_CachedPref: 160
+ m_ControlHash: -371814159
+ m_PrefName: Preview_InspectorPreview
+ m_PreviewWindow: {fileID: 0}
+--- !u!114 &15
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12061, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_MinSize: {x: 200, y: 200}
+ m_MaxSize: {x: 4000, y: 4000}
+ m_TitleContent:
+ m_Text: Hierarchy
+ m_Image: {fileID: -590624980919486359, guid: 0000000000000000d000000000000000,
+ type: 0}
+ m_Tooltip:
+ m_Pos:
+ serializedVersion: 2
+ x: 11.2
+ y: -1078.4
+ width: 403
+ height: 573
+ m_ViewDataDictionary: {fileID: 0}
+ m_SceneHierarchy:
+ m_TreeViewState:
+ scrollPos: {x: 0, y: 0}
+ m_SelectedIDs:
+ m_LastClickedID: 0
+ m_ExpandedIDs: 26d7ffff
+ m_RenameOverlay:
+ m_UserAcceptedRename: 0
+ m_Name:
+ m_OriginalName:
+ m_EditFieldRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 0
+ height: 0
+ m_UserData: 0
+ m_IsWaitingForDelay: 0
+ m_IsRenaming: 0
+ m_OriginalEventType: 11
+ m_IsRenamingFilename: 0
+ m_ClientGUIView: {fileID: 0}
+ m_SearchString:
+ m_ExpandedScenes: []
+ m_CurrenRootInstanceID: 0
+ m_LockTracker:
+ m_IsLocked: 0
+ m_CurrentSortingName: TransformSorting
+ m_WindowGUID: 4cdb5ba75b10c254e864619070e3bc7c
+--- !u!114 &16
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12013, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_MinSize: {x: 200, y: 200}
+ m_MaxSize: {x: 4000, y: 4000}
+ m_TitleContent:
+ m_Text: Scene
+ m_Image: {fileID: 2318424515335265636, guid: 0000000000000000d000000000000000,
+ type: 0}
+ m_Tooltip:
+ m_Pos:
+ serializedVersion: 2
+ x: 414.40002
+ y: -1078.4
+ width: 1227
+ height: 573
+ m_ViewDataDictionary: {fileID: 0}
+ m_ShowContextualTools: 0
+ m_WindowGUID: e8420506870631a4e8d0ee01d3f686df
+ m_Gizmos: 1
+ m_SceneIsLit: 1
+ m_SceneLighting: 1
+ m_2DMode: 0
+ m_isRotationLocked: 0
+ m_PlayAudio: 0
+ m_AudioPlay: 0
+ m_Position:
+ m_Target: {x: 0, y: 0, z: 0}
+ speed: 2
+ m_Value: {x: 0, y: 0, z: 0}
+ m_RenderMode: 0
+ m_CameraMode:
+ drawMode: 0
+ name: Shaded
+ section: Shading Mode
+ m_ValidateTrueMetals: 0
+ m_DoValidateTrueMetals: 0
+ m_SceneViewState:
+ showFog: 1
+ showMaterialUpdate: 0
+ showSkybox: 1
+ showFlares: 1
+ showImageEffects: 1
+ showParticleSystems: 1
+ grid:
+ xGrid:
+ m_Target: 0
+ speed: 2
+ m_Value: 0
+ yGrid:
+ m_Target: 1
+ speed: 2
+ m_Value: 1
+ zGrid:
+ m_Target: 0
+ speed: 2
+ m_Value: 0
+ m_Rotation:
+ m_Target: {x: -0.08717229, y: 0.89959055, z: -0.21045254, w: -0.3726226}
+ speed: 2
+ m_Value: {x: -0.08717229, y: 0.89959055, z: -0.21045254, w: -0.3726226}
+ m_Size:
+ m_Target: 10
+ speed: 2
+ m_Value: 10
+ m_Ortho:
+ m_Target: 0
+ speed: 2
+ m_Value: 0
+ m_CameraSettings:
+ m_Speed: 1
+ m_SpeedNormalized: 0.5
+ m_SpeedMin: 0.01
+ m_SpeedMax: 2
+ m_EasingEnabled: 1
+ m_EasingDuration: 0.4
+ m_AccelerationEnabled: 1
+ m_FieldOfView: 90
+ m_NearClip: 0.03
+ m_FarClip: 10000
+ m_DynamicClip: 1
+ m_OcclusionCulling: 0
+ m_ShowGlobalGrid: 1
+ m_LastSceneViewRotation: {x: 0, y: 0, z: 0, w: 0}
+ m_LastSceneViewOrtho: 0
+ m_ReplacementShader: {fileID: 0}
+ m_ReplacementString:
+ m_SceneVisActive: 1
+ m_LastLockedObject: {fileID: 0}
+ m_ViewIsLockedToObject: 0
+--- !u!114 &17
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12015, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_MinSize: {x: 200, y: 200}
+ m_MaxSize: {x: 4000, y: 4000}
+ m_TitleContent:
+ m_Text: Game
+ m_Image: {fileID: -2087823869225018852, guid: 0000000000000000d000000000000000,
+ type: 0}
+ m_Tooltip:
+ m_Pos:
+ serializedVersion: 2
+ x: 507
+ y: 94
+ width: 1532
+ height: 790
+ m_ViewDataDictionary: {fileID: 0}
+ m_VSyncEnabled: 0
+ m_MaximizeOnPlay: 0
+ m_Gizmos: 0
+ m_Stats: 0
+ m_SelectedSizes: 00000000000000000000000000000000000000000000000000000000000000000000000000000000
+ m_TargetDisplay: 0
+ m_ZoomArea:
+ m_HRangeLocked: 0
+ m_VRangeLocked: 0
+ hZoomLockedByDefault: 0
+ vZoomLockedByDefault: 0
+ m_HBaseRangeMin: -766
+ m_HBaseRangeMax: 766
+ m_VBaseRangeMin: -386.5
+ m_VBaseRangeMax: 386.5
+ m_HAllowExceedBaseRangeMin: 1
+ m_HAllowExceedBaseRangeMax: 1
+ m_VAllowExceedBaseRangeMin: 1
+ m_VAllowExceedBaseRangeMax: 1
+ m_ScaleWithWindow: 0
+ m_HSlider: 0
+ m_VSlider: 0
+ m_IgnoreScrollWheelUntilClicked: 0
+ m_EnableMouseInput: 1
+ m_EnableSliderZoomHorizontal: 0
+ m_EnableSliderZoomVertical: 0
+ m_UniformScale: 1
+ m_UpDirection: 1
+ m_DrawArea:
+ serializedVersion: 2
+ x: 0
+ y: 17
+ width: 1532
+ height: 773
+ m_Scale: {x: 1, y: 1}
+ m_Translation: {x: 766, y: 386.5}
+ m_MarginLeft: 0
+ m_MarginRight: 0
+ m_MarginTop: 0
+ m_MarginBottom: 0
+ m_LastShownAreaInsideMargins:
+ serializedVersion: 2
+ x: -766
+ y: -386.5
+ width: 1532
+ height: 773
+ m_MinimalGUI: 1
+ m_defaultScale: 1
+ m_TargetTexture: {fileID: 0}
+ m_CurrentColorSpace: 1
+ m_LastWindowPixelSize: {x: 1532, y: 790}
+ m_ClearInEditMode: 1
+ m_NoCameraWarning: 1
+ m_LowResolutionForAspectRatios: 01000000000000000000
+ m_XRRenderMode: 0
+--- !u!114 &18
+MonoBehaviour:
+ m_ObjectHideFlags: 52
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 1
+ m_Script: {fileID: 12003, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_MinSize: {x: 100, y: 100}
+ m_MaxSize: {x: 4000, y: 4000}
+ m_TitleContent:
+ m_Text: Console
+ m_Image: {fileID: 111653112392082826, guid: 0000000000000000d000000000000000,
+ type: 0}
+ m_Tooltip:
+ m_Pos:
+ serializedVersion: 2
+ x: 8
+ y: 718
+ width: 1366
+ height: 308
+ m_ViewDataDictionary: {fileID: 0}
diff --git a/KerbalVR/Library/EditorUserBuildSettings.asset b/KerbalVR/Library/EditorUserBuildSettings.asset
new file mode 100644
index 00000000..b9ed8bf3
Binary files /dev/null and b/KerbalVR/Library/EditorUserBuildSettings.asset differ
diff --git a/KerbalVR/Library/EditorUserSettings.asset b/KerbalVR/Library/EditorUserSettings.asset
new file mode 100644
index 00000000..a66c287f
--- /dev/null
+++ b/KerbalVR/Library/EditorUserSettings.asset
@@ -0,0 +1,21 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!162 &1
+EditorUserSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 4
+ m_ConfigSettings:
+ vcSharedLogLevel:
+ value: 0d5e400f0650
+ flags: 0
+ m_VCAutomaticAdd: 1
+ m_VCDebugCom: 0
+ m_VCDebugCmd: 0
+ m_VCDebugOut: 0
+ m_SemanticMergeMode: 2
+ m_VCShowFailedCheckout: 1
+ m_VCOverwriteFailedCheckoutAssets: 1
+ m_VCAllowAsyncUpdate: 0
+ m_AssetPipelineMode: 0
+ m_CacheServerMode: 0
+ m_CacheServers: []
diff --git a/KerbalVR/Library/InspectorExpandedItems.asset b/KerbalVR/Library/InspectorExpandedItems.asset
new file mode 100644
index 00000000..10769034
Binary files /dev/null and b/KerbalVR/Library/InspectorExpandedItems.asset differ
diff --git a/KerbalVR/Library/LastSceneManagerSetup.txt b/KerbalVR/Library/LastSceneManagerSetup.txt
new file mode 100644
index 00000000..dd18ea70
--- /dev/null
+++ b/KerbalVR/Library/LastSceneManagerSetup.txt
@@ -0,0 +1 @@
+sceneSetups: []
diff --git a/KerbalVR/Library/LibraryFormatVersion.txt b/KerbalVR/Library/LibraryFormatVersion.txt
new file mode 100644
index 00000000..6185f096
--- /dev/null
+++ b/KerbalVR/Library/LibraryFormatVersion.txt
@@ -0,0 +1,2 @@
+unityRebuildLibraryVersion: 11
+unityForwardCompatibleVersion: 40
diff --git a/KerbalVR/Library/MonoManager.asset b/KerbalVR/Library/MonoManager.asset
new file mode 100644
index 00000000..b2508975
Binary files /dev/null and b/KerbalVR/Library/MonoManager.asset differ
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/CHANGELOG.md b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/CHANGELOG.md
new file mode 100644
index 00000000..ceaa4264
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/CHANGELOG.md
@@ -0,0 +1,37 @@
+
+[1.0.1]
+
+Adding Readme file
+Adding local plugin importer callbacks.
+Removing Bintray references in package.json
+
+[2.0.3]
+
+Fix bug where importing the asset store ads package would cause duiplicate symbols,
+and removing the asset store ads package would cause missing symbols.
+
+[2.0.4]
+
+Added new description string to package.json
+Fixed art assets to use no compression (fixes issue switching between iOS and PC builds)
+
+[2.0.5] - 2018-03-29
+
+Fix for https://fogbugz.unity3d.com/f/cases/1011363
+Fixes an incorrect guid that the importer used to include/exclude the runtime assembly from the build.
+
+[2.0.6] - 2018-03-29
+
+Update changelog for this and 2.0.5
+
+[2.0.7] - 2018-04-06
+
+Fix editor assembly project file to include the importer script.
+
+[2.0.8] - 2018-05-01
+
+Add call to SetShouldOverridePredicate to exclude package dll when asset store dlls are present.
+Update unity version attribute to support 2017.4 LTS
+
+Fix an issue with the editor assembly to add back in some iOS platform specific code that was removed
+via conditionals (which is fine for source packages, but doesn't work with precompiled assemblies)
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Android/builds/unity-ads.aar b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Android/builds/unity-ads.aar
new file mode 100644
index 00000000..a05fc299
Binary files /dev/null and b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Android/builds/unity-ads.aar differ
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Editor/landscape.jpg b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Editor/landscape.jpg
new file mode 100644
index 00000000..4fa7f280
Binary files /dev/null and b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Editor/landscape.jpg differ
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Editor/portrait.jpg b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Editor/portrait.jpg
new file mode 100644
index 00000000..5d8fb0b9
Binary files /dev/null and b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/Editor/portrait.jpg differ
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSInAppPurchaseMetaData.h b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSInAppPurchaseMetaData.h
new file mode 100644
index 00000000..8edc8c14
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSInAppPurchaseMetaData.h
@@ -0,0 +1,11 @@
+#import "UADSMetaData.h"
+
+@interface UADSInAppPurchaseMetaData : UADSMetaData
+
+- (void)setProductId:(NSString *)productId;
+- (void)setPrice:(NSNumber *)price;
+- (void)setCurrency:(NSString *)currency;
+- (void)setReceiptPurchaseData:(NSString *)receiptPurchaseData;
+- (void)setSignature:(NSString *)signature;
+
+@end
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSJsonStorage.h b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSJsonStorage.h
new file mode 100644
index 00000000..1ed3c431
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSJsonStorage.h
@@ -0,0 +1,13 @@
+@interface UADSJsonStorage : NSObject
+
+@property (nonatomic, strong) NSMutableDictionary *storageContents;
+
+- (BOOL)set:(NSString *)key value:(id)value;
+- (id)getValueForKey:(NSString *)key;
+- (BOOL)deleteKey:(NSString *)key;
+- (NSArray *)getKeys:(NSString *)key recursive:(BOOL)recursive;
+- (void)clearData;
+- (BOOL)initData;
+- (BOOL)hasData;
+
+@end
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSMediationMetaData.h b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSMediationMetaData.h
new file mode 100644
index 00000000..5f49a285
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSMediationMetaData.h
@@ -0,0 +1,9 @@
+#import "UADSMetaData.h"
+
+@interface UADSMediationMetaData : UADSMetaData
+
+- (void)setName:(NSString *)mediationNetworkName;
+- (void)setVersion:(NSString *)mediationSdkVersion;
+- (void)setOrdinal:(int)mediationOrdinal;
+
+@end
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSMetaData.h b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSMetaData.h
new file mode 100644
index 00000000..791d3138
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSMetaData.h
@@ -0,0 +1,12 @@
+
+
+@interface UADSMetaData : NSObject
+
+@property (nonatomic, strong) NSString *category;
+@property (nonatomic, strong) NSMutableDictionary *entries;
+
+- (instancetype)initWithCategory:(NSString *)category;
+- (void)set:(NSString *)key value:(id)value;
+- (void)commit;
+
+@end
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSPlayerMetaData.h b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSPlayerMetaData.h
new file mode 100644
index 00000000..5d0db483
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UADSPlayerMetaData.h
@@ -0,0 +1,7 @@
+#import "UADSMetaData.h"
+
+@interface UADSPlayerMetaData : UADSMetaData
+
+- (void)setServerId:(NSString *)serverId;
+
+@end
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAds.h b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAds.h
new file mode 100644
index 00000000..8e1ccfda
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAds.h
@@ -0,0 +1,255 @@
+#import
+
+#import
+#import
+
+/**
+ * An enumerate that describes the state of `UnityAds` placements.
+ * @note All placement states, other than `kUnityAdsPlacementStateReady`, indicate that the placement is not currently ready to show ads.
+ */
+typedef NS_ENUM(NSInteger, UnityAdsPlacementState) {
+ /**
+ * A state that indicates that the placement is ready to show an ad. The `show:` selector can be called.
+ */
+ kUnityAdsPlacementStateReady,
+ /**
+ * A state that indicates that no state is information is available.
+ * @warning This state can that UnityAds is not initialized or that the placement is not correctly configured in the Unity Ads admin tool.
+ */
+ kUnityAdsPlacementStateNotAvailable,
+ /**
+ * A state that indicates that the placement is currently disabled. The placement can be enabled in the Unity Ads admin tools.
+ */
+ kUnityAdsPlacementStateDisabled,
+ /**
+ * A state that indicates that the placement is not currently ready, but will be in the future.
+ * @note This state most likely indicates that the ad content is currently caching.
+ */
+ kUnityAdsPlacementStateWaiting,
+ /**
+ * A state that indicates that the placement is properly configured, but there are currently no ads available for the placement.
+ */
+ kUnityAdsPlacementStateNoFill
+};
+
+/**
+ * An enumeration for the completion state of an ad.
+ */
+typedef NS_ENUM(NSInteger, UnityAdsFinishState) {
+ /**
+ * A state that indicates that the ad did not successfully display.
+ */
+ kUnityAdsFinishStateError,
+ /**
+ * A state that indicates that the user skipped the ad.
+ */
+ kUnityAdsFinishStateSkipped,
+ /**
+ * A state that indicates that the ad was played entirely.
+ */
+ kUnityAdsFinishStateCompleted
+};
+
+/**
+ * An enumeration for the various errors that can be emitted through the `UnityAdsDelegate` `unityAdsDidError:withMessage:` method.
+ */
+typedef NS_ENUM(NSInteger, UnityAdsError) {
+ /**
+ * An error that indicates failure due to `UnityAds` currently being uninitialized.
+ */
+ kUnityAdsErrorNotInitialized = 0,
+ /**
+ * An error that indicates failure due to a failure in the initialization process.
+ */
+ kUnityAdsErrorInitializedFailed,
+ /**
+ * An error that indicates failure due to attempting to initialize `UnityAds` with invalid parameters.
+ */
+ kUnityAdsErrorInvalidArgument,
+ /**
+ * An error that indicates failure of the video player.
+ */
+ kUnityAdsErrorVideoPlayerError,
+ /**
+ * An error that indicates failure due to having attempted to initialize the `UnityAds` class in an invalid environment.
+ */
+ kUnityAdsErrorInitSanityCheckFail,
+ /**
+ * An error that indicates failure due to the presence of an ad blocker.
+ */
+ kUnityAdsErrorAdBlockerDetected,
+ /**
+ * An error that indicates failure due to inability to read or write a file.
+ */
+ kUnityAdsErrorFileIoError,
+ /**
+ * An error that indicates failure due to a bad device identifier.
+ */
+ kUnityAdsErrorDeviceIdError,
+ /**
+ * An error that indicates a failure when attempting to show an ad.
+ */
+ kUnityAdsErrorShowError,
+ /**
+ * An error that indicates an internal failure in `UnityAds`.
+ */
+ kUnityAdsErrorInternalError,
+};
+
+/**
+ * The `UnityAdsDelegate` protocol defines the required methods for receiving messages from UnityAds.
+ * Must be implemented by the hosting app.
+ * The unityAdsReady: method is called when it's possible to show an ad.
+ * All other methods are used to provide notifications of events of the ad lifecycle.
+ * @note On initialization, there are ready (or error) callbacks for each placement attached to the game identifier.
+ */
+NS_ASSUME_NONNULL_BEGIN
+@protocol UnityAdsDelegate
+/**
+ * Called when `UnityAds` is ready to show an ad. After this callback you can call the `UnityAds` `show:` method for this placement.
+ * Note that sometimes placement might no longer be ready due to exceptional reasons. These situations will give no new callbacks.
+ *
+ * @warning To avoid error situations, it is always best to check `isReady` method status before calling show.
+ * @param placementId The ID of the placement that is ready to show, as defined in Unity Ads admin tools.
+ */
+- (void)unityAdsReady:(NSString *)placementId;
+/**
+ * Called when `UnityAds` encounters an error. All errors will be logged but this method can be used as an additional debugging aid. This callback can also be used for collecting statistics from different error scenarios.
+ *
+ * @param error A `UnityAdsError` error enum value indicating the type of error encountered.
+ * @param message A human readable string indicating the type of error encountered.
+ */
+- (void)unityAdsDidError:(UnityAdsError)error withMessage:(NSString *)message;
+/**
+ * Called on a successful start of advertisement after calling the `UnityAds` `show:` method.
+ *
+ * @warning If there are errors in starting the advertisement, this method may never be called. Unity Ads will directly call `unityAdsDidFinish:withFinishState:` with error status.
+ *
+ * @param placementId The ID of the placement that has started, as defined in Unity Ads admin tools.
+ */
+- (void)unityAdsDidStart:(NSString *)placementId;
+/**
+ * Called after the ad has closed.
+ *
+ * @param placementId The ID of the placement that has finished, as defined in Unity Ads admin tools.
+ * @param state An enum value indicating the finish state of the ad. Possible values are `Completed`, `Skipped`, and `Error`.
+ */
+- (void)unityAdsDidFinish:(NSString *)placementId
+ withFinishState:(UnityAdsFinishState)state;
+@end
+
+/**
+ * `UnityAds` is a static class with methods for preparing and showing ads.
+ *
+ * @warning In order to ensure expected behaviour, the delegate must always be set.
+ */
+
+@interface UnityAds : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)initialize NS_UNAVAILABLE;
+
+/**
+ * Initializes UnityAds. UnityAds should be initialized when app starts.
+ *
+ * @param gameId Unique identifier for a game, given by Unity Ads admin tools or Unity editor.
+ * @param delegate delegate for UnityAdsDelegate callbacks
+ */
++ (void)initialize:(NSString *)gameId
+ delegate:(nullable id)delegate;
+/**
+ * Initializes UnityAds. UnityAds should be initialized when app starts.
+ *
+ * @param gameId Unique identifier for a game, given by Unity Ads admin tools or Unity editor.
+ * @param delegate delegate for UnityAdsDelegate callbacks
+ * @param testMode Set this flag to `YES` to indicate test mode and show only test ads.
+ */
++ (void)initialize:(NSString *)gameId
+ delegate:(nullable id)delegate
+ testMode:(BOOL)testMode;
+/**
+ * Show an ad using the defaul placement.
+ *
+ * @param viewController The `UIViewController` that is to present the ad view controller.
+ */
++ (void)show:(UIViewController *)viewController;
+/**
+ * Show an ad using the provided placement ID.
+ *
+ * @param viewController The `UIViewController` that is to present the ad view controller.
+ * @param placementId The placement ID, as defined in Unity Ads admin tools.
+ */
++ (void)show:(UIViewController *)viewController placementId:(NSString *)placementId;
+/**
+ * Provides the currently assigned `UnityAdsDelegate`.
+ *
+ * @return The current `UnityAdsDelegate`.
+ */
++ (id)getDelegate;
+/**
+ * Allows the delegate to be reassigned after UnityAds has already been initialized.
+ *
+ * @param delegate The new `UnityAdsDelegate' for UnityAds to send callbacks to.
+ */
++ (void)setDelegate:(id)delegate;
+/**
+ * Get the current debug status of `UnityAds`.
+ *
+ * @return If `YES`, `UnityAds` will provide verbose logs.
+ */
++ (BOOL)getDebugMode;
+/**
+ * Set the logging verbosity of `UnityAds`. Debug mode indicates verbose logging.
+ * @warning Does not relate to test mode for ad content.
+ * @param enableDebugMode `YES` for verbose logging.
+ */
++ (void)setDebugMode:(BOOL)enableDebugMode;
+/**
+ * Check to see if the current device supports using Unity Ads.
+ *
+ * @return If `NO`, the current device cannot initialize `UnityAds` or show ads.
+ */
++ (BOOL)isSupported;
+/**
+ * Check if the default placement is ready to show an ad.
+ *
+ * @return If `YES`, the default placement is ready to show an ad.
+ */
++ (BOOL)isReady;
+/**
+ * Check if a particular placement is ready to show an ad.
+ *
+ * @param placementId The placement ID being checked.
+ *
+ * @return If `YES`, the placement is ready to show an ad.
+ */
++ (BOOL)isReady:(NSString *)placementId;
+/**
+ * Check the current state of the default placement.
+ *
+ * @return If this is `kUnityAdsPlacementStateReady`, the placement is ready to show ads. Other states represent errors.
+ */
++ (UnityAdsPlacementState)getPlacementState;
+/**
+ * Check the current state of a placement.
+ *
+ * @param placementId The placement ID, as defined in Unity Ads admin tools.
+ *
+ * @return If this is `kUnityAdsPlacementStateReady`, the placement is ready to show ads. Other states represent errors.
+ */
++ (UnityAdsPlacementState)getPlacementState:(NSString *)placementId;
+/**
+ * Check the version of this `UnityAds` SDK
+ *
+ * @return String representing the current version name.
+ */
++ (NSString *)getVersion;
+/**
+ * Check that `UnityAds` has been initialized. This might be useful for debugging initialization problems.
+ *
+ * @return If `YES`, Unity Ads has been successfully initialized.
+ */
++ (BOOL)isInitialized;
+
+@end
+NS_ASSUME_NONNULL_END
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAdsExtended.h b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAdsExtended.h
new file mode 100644
index 00000000..1435037b
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAdsExtended.h
@@ -0,0 +1,21 @@
+#import "UnityAds.h"
+
+NS_ASSUME_NONNULL_BEGIN
+@protocol UnityAdsExtendedDelegate
+/**
+ * Called when a click event happens.
+ *
+ * @param placementId The ID of the placement that was clicked.
+ */
+- (void)unityAdsDidClick:(NSString *)placementId;
+
+/**
+ * Called when a placement changes state.
+ *
+ * @param placementId The ID of the placement that changed state.
+ * @param oldState The state before the change.
+ * @param newState The state after the change.
+ */
+- (void)unityAdsPlacementStateChanged:(NSString *)placementId oldState:(UnityAdsPlacementState)oldState newState:(UnityAdsPlacementState)newState;
+@end
+NS_ASSUME_NONNULL_END
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAdsUnityDelegate.h b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAdsUnityDelegate.h
new file mode 100644
index 00000000..0fa6e362
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Headers/UnityAdsUnityDelegate.h
@@ -0,0 +1,11 @@
+#import "UnityAds.h"
+NS_ASSUME_NONNULL_BEGIN
+@protocol UnityAdsUnityDelegate
+/**
+ * Called when an in-app purchase is initiated from an ad.
+ *
+ * @param eventString The string provided via the ad.
+ */
+- (void)unityAdsDidInitiatePurchase:(NSString *)eventString;
+@end
+NS_ASSUME_NONNULL_END
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Info.plist b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Info.plist
new file mode 100644
index 00000000..31b03797
Binary files /dev/null and b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Info.plist differ
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Modules/module.modulemap b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Modules/module.modulemap
new file mode 100644
index 00000000..9b448d57
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/Modules/module.modulemap
@@ -0,0 +1,7 @@
+framework module UnityAds {
+ umbrella header "UnityAds.h"
+ header "UnityAdsExtended.h"
+
+ export *
+ module * { export * }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/UnityAds b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/UnityAds
new file mode 100644
index 00000000..53184164
Binary files /dev/null and b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/Resources/iOS/builds/UnityAds.framework/UnityAds differ
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/UnityEditor.Advertisements.dll b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/UnityEditor.Advertisements.dll
new file mode 100644
index 00000000..77409dde
Binary files /dev/null and b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/UnityEditor.Advertisements.dll differ
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/UnityEditor.Advertisements.dll.mdb b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/UnityEditor.Advertisements.dll.mdb
new file mode 100644
index 00000000..7ee35e88
Binary files /dev/null and b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/Editor/UnityEditor.Advertisements.dll.mdb differ
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/License.md b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/License.md
new file mode 100644
index 00000000..27c17ac4
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/License.md
@@ -0,0 +1,32 @@
+**Unity Companion Package License v1.0 ("_License_")**
+
+Copyright © 2017 Unity Technologies ApS ("**_Unity_**")
+
+Unity hereby grants to you a worldwide, non-exclusive, no-charge, and royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute the software that is made available with this License ("**_Software_**"), subject to the following terms and conditions:
+
+1. *Unity Companion Use Only*. Exercise of the license granted herein is limited to exercise for the creation, use, and/or distribution of applications, software, or other content pursuant to a valid Unity development engine software license ("**_Engine License_**"). That means while use of the Software is not limited to use in the software licensed under the Engine License, the Software may not be used for any purpose other than the creation, use, and/or distribution of Engine License-dependent applications, software, or other content. No other exercise of the license granted herein is permitted.
+
+1. *No Modification of Engine License*. Neither this License nor any exercise of the license granted herein modifies the Engine License in any way.
+
+1. *Ownership & Grant Back to You*.
+
+ 3.1. You own your content. In this License, "derivative works" means derivatives of the Software itself--works derived only from the Software by you under this License (for example, modifying the code of the Software itself to improve its efficacy); “derivative works” of the Software do not include, for example, games, apps, or content that you create using the Software. You keep all right, title, and interest to your own content.
+
+ 3.2. Unity owns its content. While you keep all right, title, and interest to your own content per the above, as between Unity and you, Unity will own all right, title, and interest to all intellectual property rights (including patent, trademark, and copyright) in the Software and derivative works of the Software, and you hereby assign and agree to assign all such rights in those derivative works to Unity.
+
+ 3.3. You have a license to those derivative works. Subject to this License, Unity grants to you the same worldwide, non-exclusive, no-charge, and royalty-free copyright license to derivative works of the Software you create as is granted to you for the Software under this License.
+
+1. *Trademarks*. You are not granted any right or license under this License to use any trademarks, service marks, trade names, products names, or branding of Unity or its affiliates ("**_Trademarks_**"). Descriptive uses of Trademarks are permitted; see, for example, Unity’s Branding Usage Guidelines at [https://unity3d.com/public-relations/brand](https://unity3d.com/public-relations/brand).
+
+1. *Notices & Third-Party Rights*. This License, including the copyright notice above, must be provided in all substantial portions of the Software and derivative works thereof (or, if that is impracticable, in any other location where such notices are customarily placed). Further, if the Software is accompanied by a Unity "third-party notices" or similar file, you acknowledge and agree that software identified in that file is governed by those separate license terms.
+
+1. *DISCLAIMER, LIMITATION OF LIABILITY*. THE SOFTWARE AND ANY DERIVATIVE WORKS THEREOF IS PROVIDED ON AN "AS IS" BASIS, AND IS PROVIDED WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND/OR NONINFRINGEMENT. IN NO EVENT SHALL ANY COPYRIGHT HOLDER OR AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES (WHETHER DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL, INCLUDING PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS, AND BUSINESS INTERRUPTION), OR OTHER LIABILITY WHATSOEVER, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM OR OUT OF, OR IN CONNECTION WITH, THE SOFTWARE OR ANY DERIVATIVE WORKS THEREOF OR THE USE OF OR OTHER DEALINGS IN SAME, EVEN WHERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+1. *USE IS ACCEPTANCE and License Versions*. Your receipt and use of the Software constitutes your acceptance of this License and its terms and conditions. Software released by Unity under this License may be modified or updated and the License with it; upon any such modification or update, you will comply with the terms of the updated License for any use of any of the Software under the updated License.
+
+1. *Use in Compliance with Law and Termination*. Your exercise of the license granted herein will at all times be in compliance with applicable law and will not infringe any proprietary rights (including intellectual property rights); this License will terminate immediately on any breach by you of this License.
+
+1. *Severability*. If any provision of this License is held to be unenforceable or invalid, that provision will be enforced to the maximum extent possible and the other provisions will remain in full force and effect.
+
+1. *Governing Law and Venue*. This License is governed by and construed in accordance with the laws of Denmark, except for its conflict of laws rules; the United Nations Convention on Contracts for the International Sale of Goods will not apply. If you reside (or your principal place of business is) within the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the state and federal courts located in San Francisco County, California concerning any dispute arising out of this License ("**_Dispute_**"). If you reside (or your principal place of business is) outside the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the courts located in Copenhagen, Denmark concerning any Dispute.
+
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/README.md b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/README.md
new file mode 100644
index 00000000..9ed6019f
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/README.md
@@ -0,0 +1,4 @@
+# Unity Ads
+
+Implementation of the Unity Ads API.
+
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/UnityEngine.Advertisements.dll b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/UnityEngine.Advertisements.dll
new file mode 100644
index 00000000..e9486522
Binary files /dev/null and b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/UnityEngine.Advertisements.dll differ
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/UnityEngine.Advertisements.dll.mdb b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/UnityEngine.Advertisements.dll.mdb
new file mode 100644
index 00000000..5ec8e50d
Binary files /dev/null and b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/UnityEngine.Advertisements.dll.mdb differ
diff --git a/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/package.json b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/package.json
new file mode 100644
index 00000000..881daf2c
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ads@2.0.8/package.json
@@ -0,0 +1,17 @@
+{
+ "category": "AssetStore/Unity",
+ "description": "Unity Ads is a video ad network for iOS and Android that allows you to quickly and effectively monetize your games.",
+ "gitHead": "0d2114387a99011be685886f8ea902242e323e70",
+ "keywords": [
+ "ads",
+ "unity"
+ ],
+ "name": "com.unity.ads",
+ "repoPackagePath": "build/install/com.unity.ads",
+ "repository": {
+ "type": "git",
+ "url": "ssh://git@github.com/Unity-Technologies/com.unity.ads.git"
+ },
+ "unity": "2017.4",
+ "version": "2.0.8"
+}
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/CHANGELOG.md b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/CHANGELOG.md
new file mode 100644
index 00000000..dbb63e1a
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/CHANGELOG.md
@@ -0,0 +1,67 @@
+## [3.3.2] - 2019-01-15
+- Update com.unity.ugui version dependency to new format.
+- Add explicit dll dependencies to asmdefs needed for Test Platform changes.
+
+## [3.3.1] - 2018-11-21
+- Fixed missing dependency to com.unity.ugui to package.json
+
+## [3.3.0] - 2018-11-16
+- Removed dependency on UGUI extension in favor of new core package.
+
+## [3.2.2] - 2018-11-02
+- Removed FetchOptOutStatus and Initialize call. All application of opt out
+ status will be handled by the engine. The Analytics/Data Privacy package still
+ provides FetchPrivacyUrl to provide a URL from which to opt out.
+
+## [3.2.1] - 2018-10-25
+- Move editor and playmode tests to be packed within the package.
+
+## [3.2.0] - 2018-10-11
+- Prevent double-registration of standard events.
+- Fixed build error on platforms that don't support analytics.
+- Update package docs so they can be built and published and be accessible from
+ the Package Manager UI.
+- Fixed a crash occurring on iOS device when the device has cellular capability
+ but was never configured with any carrier service.
+- Fixed an android build failure occurring due to conflicting install referrer
+ AIDL files.
+
+## [3.1.1] - 2018-08-21
+- Add DataPrivacy plugin into package.
+- Fixed an issue where Android project build would fail when proguard is enabled
+ in publishing settings.
+- Fixed an issue where iOS product archive would fail because bitcode was not
+ enabled.
+
+## [3.0.9] - 2018-07-31
+- Fixing issue with NullReferenceException during editor playmode
+
+## [3.0.8] - 2018-07-26
+- Fixing linking issue when building Android il2cpp
+
+## [3.0.7] - 2018-07-10
+- Adding in continuous events for signal strength, battery level, battery
+ temperature, memory usage, available storage
+
+## [3.0.6] - 2018-06-01
+- Reorganizing platformInfo event around session start/resume/pause
+
+## [3.0.5] - 2018-05-29
+- Fixing cellular signal strength incorrect array format
+
+## [3.0.4] - 2018-05-04
+- Breaking change to only work with 2018.2 (change name of whitelisted dll's in
+ engine to conform to PackageManager standard)
+- Changed name of old Analytics dll to the Unity.Analytics.Tracker.dll and
+ replaced the old one with the new platform information package.
+- Changed naming convention of dlls to the PackageManager Standard:
+ Unity.Analytics.dll, Unity.Analytics.Editor.dll, Unity.Analytics.Tracker.dll,
+ Unity.Analytics.StandardEvents.dll.
+- Deprecated old Analytics tracker and removed it from the add component menu.
+- Merged Standardevents package into Analytics package.
+
+## [2.0.14] - 2018-02-08
+- Added proper documentation and better description text.
+
+## [2.0.5] -
+- Update analytics tracker to 2.0 (1.0 version is still available)
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/DataPrivacy/AssemblyInfo.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/DataPrivacy/AssemblyInfo.cs
new file mode 100644
index 00000000..a97f2747
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/DataPrivacy/AssemblyInfo.cs
@@ -0,0 +1,4 @@
+using System.Runtime.CompilerServices;
+
+[assembly: InternalsVisibleTo("Unity.Analytics.DataPrivacy.Tests")]
+[assembly: InternalsVisibleTo("Unity.Analytics.DataPrivacy.WebRequest.Tests")]
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/DataPrivacy/DataPrivacy.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/DataPrivacy/DataPrivacy.cs
new file mode 100644
index 00000000..f48eb131
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/DataPrivacy/DataPrivacy.cs
@@ -0,0 +1,132 @@
+#if ENABLE_CLOUD_SERVICES_ANALYTICS
+using System;
+using System.Text;
+using UnityEngine.Networking;
+
+namespace UnityEngine.Analytics
+{
+ public class DataPrivacy
+ {
+ [Serializable]
+ internal struct UserPostData
+ {
+ public string appid;
+ public string userid;
+ public long sessionid;
+ public string platform;
+ public UInt32 platformid;
+ public string sdk_ver;
+ public bool debug_device;
+ public string deviceid;
+ public string plugin_ver;
+ }
+
+ [Serializable]
+ internal struct TokenData
+ {
+ public string url;
+ public string token;
+ }
+
+ const string kVersion = "3.0.0";
+ const string kVersionString = "DataPrivacyPackage/" + kVersion;
+
+ internal const string kBaseUrl = "https://data-optout-service.uca.cloud.unity3d.com";
+ const string kTokenUrl = kBaseUrl + "/token";
+
+ internal static UserPostData GetUserData()
+ {
+ var postData = new UserPostData
+ {
+ appid = Application.cloudProjectId,
+ userid = AnalyticsSessionInfo.userId,
+ sessionid = AnalyticsSessionInfo.sessionId,
+ platform = Application.platform.ToString(),
+ platformid = (UInt32)Application.platform,
+ sdk_ver = Application.unityVersion,
+ debug_device = Debug.isDebugBuild,
+ deviceid = SystemInfo.deviceUniqueIdentifier,
+ plugin_ver = kVersionString
+ };
+
+ return postData;
+ }
+
+ static string GetUserAgent()
+ {
+ var message = "UnityPlayer/{0} ({1}/{2}{3} {4})";
+ return String.Format(message,
+ Application.unityVersion,
+ Application.platform.ToString(),
+ (UInt32)Application.platform,
+ Debug.isDebugBuild ? "-dev" : "",
+ kVersionString);
+ }
+
+ static String getErrorString(UnityWebRequest www)
+ {
+ var json = www.downloadHandler.text;
+ var error = www.error;
+ if (String.IsNullOrEmpty(error))
+ {
+ // 5.5 sometimes fails to parse an error response, and the only clue will be
+ // in www.responseHeadersString, which isn't accessible.
+ error = "Empty response";
+ }
+
+ if (!String.IsNullOrEmpty(json))
+ {
+ error += ": " + json;
+ }
+
+ return error;
+ }
+
+ public static void FetchPrivacyUrl(Action success, Action failure = null)
+ {
+ string postJson = JsonUtility.ToJson(GetUserData());
+ byte[] bytes = Encoding.UTF8.GetBytes(postJson);
+ var uploadHandler = new UploadHandlerRaw(bytes);
+ uploadHandler.contentType = "application/json";
+
+ var www = UnityWebRequest.Post(kTokenUrl, "");
+ www.uploadHandler = uploadHandler;
+#if !UNITY_WEBGL
+ www.SetRequestHeader("User-Agent", GetUserAgent());
+#endif
+ var async = www.SendWebRequest();
+
+ async.completed += (AsyncOperation async2) =>
+ {
+ var json = www.downloadHandler.text;
+ if (!String.IsNullOrEmpty(www.error) || String.IsNullOrEmpty(json))
+ {
+ var error = getErrorString(www);
+ if (failure != null)
+ {
+ failure(error);
+ }
+ }
+ else
+ {
+ TokenData tokenData;
+ tokenData.url = ""; // Just to quell "possibly unassigned" error
+ try
+ {
+ tokenData = JsonUtility.FromJson(json);
+ }
+ catch (Exception e)
+ {
+ if (failure != null)
+ {
+ failure(e.ToString());
+ }
+ }
+
+ success(tokenData.url);
+ }
+ };
+ }
+ }
+}
+#endif //ENABLE_CLOUD_SERVICES_ANALYTICS
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/DataPrivacy/DataPrivacyButton.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/DataPrivacy/DataPrivacyButton.cs
new file mode 100644
index 00000000..412b430c
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/DataPrivacy/DataPrivacyButton.cs
@@ -0,0 +1,52 @@
+#if ENABLE_CLOUD_SERVICES_ANALYTICS
+using System;
+using UnityEngine.UI;
+
+namespace UnityEngine.Analytics
+{
+ public class DataPrivacyButton : Button
+ {
+ bool urlOpened = false;
+
+ DataPrivacyButton()
+ {
+ onClick.AddListener(OpenDataPrivacyUrl);
+ }
+
+ void OnFailure(string reason)
+ {
+ interactable = true;
+ Debug.LogWarning(String.Format("Failed to get data privacy url: {0}", reason));
+ }
+
+ void OpenUrl(string url)
+ {
+ interactable = true;
+ urlOpened = true;
+
+ #if UNITY_WEBGL && !UNITY_EDITOR
+ Application.ExternalEval("window.open(\"" + url + "\",\"_blank\")");
+ #else
+ Application.OpenURL(url);
+ #endif
+ }
+
+ void OpenDataPrivacyUrl()
+ {
+ interactable = false;
+ DataPrivacy.FetchPrivacyUrl(OpenUrl, OnFailure);
+ }
+
+ void OnApplicationFocus(bool hasFocus)
+ {
+ if (hasFocus && urlOpened)
+ {
+ urlOpened = false;
+ // Immediately refresh the remote config so new privacy settings can be enabled
+ // as soon as possible if they have changed.
+ RemoteSettings.ForceUpdate();
+ }
+ }
+ }
+}
+#endif //ENABLE_CLOUD_SERVICES_ANALYTICS
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/DataPrivacy/DataPrivacyButton.prefab b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/DataPrivacy/DataPrivacyButton.prefab
new file mode 100644
index 00000000..53543550
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/DataPrivacy/DataPrivacyButton.prefab
@@ -0,0 +1,246 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &109074
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 100100000}
+ serializedVersion: 4
+ m_Component:
+ - 224: {fileID: 22409074}
+ - 222: {fileID: 22209074}
+ - 114: {fileID: 11409072}
+ m_Layer: 5
+ m_Name: Image
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!1 &109076
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 100100000}
+ serializedVersion: 4
+ m_Component:
+ - 224: {fileID: 22409076}
+ - 222: {fileID: 22209076}
+ - 114: {fileID: 11409074}
+ - 114: {fileID: 11409076}
+ m_Layer: 5
+ m_Name: DataPrivacyButton
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!1 &109078
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 100100000}
+ serializedVersion: 4
+ m_Component:
+ - 224: {fileID: 22409078}
+ - 222: {fileID: 22209078}
+ - 114: {fileID: 11409078}
+ m_Layer: 0
+ m_Name: Text
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &11409072
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 100100000}
+ m_GameObject: {fileID: 109074}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: .196078405, g: .196078405, b: .196078405, a: 1}
+ m_Sprite: {fileID: 21300000, guid: 599a5fd92bab81a4ab02e52d0b1b1c60, type: 3}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+--- !u!114 &11409074
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 100100000}
+ m_GameObject: {fileID: 109076}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+--- !u!114 &11409076
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 100100000}
+ m_GameObject: {fileID: 109076}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: a5ebb11c6fc3a2f498bd89593f7744aa, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: .960784316, g: .960784316, b: .960784316, a: 1}
+ m_PressedColor: {r: .784313738, g: .784313738, b: .784313738, a: 1}
+ m_DisabledColor: {r: .784313738, g: .784313738, b: .784313738, a: .501960814}
+ m_ColorMultiplier: 1
+ m_FadeDuration: .100000001
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 11409074}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
+ Culture=neutral, PublicKeyToken=null
+--- !u!114 &11409078
+MonoBehaviour:
+ m_ObjectHideFlags: 1
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 100100000}
+ m_GameObject: {fileID: 109078}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: .196078405, g: .196078405, b: .196078405, a: 1}
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 14
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 10
+ m_MaxSize: 40
+ m_Alignment: 4
+ m_RichText: 0
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: Open Data Privacy Page
+--- !u!222 &22209074
+CanvasRenderer:
+ m_ObjectHideFlags: 1
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 100100000}
+ m_GameObject: {fileID: 109074}
+--- !u!222 &22209076
+CanvasRenderer:
+ m_ObjectHideFlags: 1
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 100100000}
+ m_GameObject: {fileID: 109076}
+--- !u!222 &22209078
+CanvasRenderer:
+ m_ObjectHideFlags: 1
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 100100000}
+ m_GameObject: {fileID: 109078}
+--- !u!224 &22409074
+RectTransform:
+ m_ObjectHideFlags: 1
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 100100000}
+ m_GameObject: {fileID: 109074}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 22409076}
+ m_RootOrder: 1
+ m_AnchorMin: {x: 1, y: .5}
+ m_AnchorMax: {x: 1, y: .5}
+ m_AnchoredPosition: {x: -8, y: 0}
+ m_SizeDelta: {x: 20, y: 20}
+ m_Pivot: {x: 1, y: .5}
+--- !u!224 &22409076
+RectTransform:
+ m_ObjectHideFlags: 1
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 100100000}
+ m_GameObject: {fileID: 109076}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 22409078}
+ - {fileID: 22409074}
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_AnchorMin: {x: .5, y: .5}
+ m_AnchorMax: {x: .5, y: .5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 200, y: 30}
+ m_Pivot: {x: .5, y: .5}
+--- !u!224 &22409078
+RectTransform:
+ m_ObjectHideFlags: 1
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 100100000}
+ m_GameObject: {fileID: 109078}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 22409076}
+ m_RootOrder: 0
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: .850000024, y: 1}
+ m_AnchoredPosition: {x: 8, y: 0}
+ m_SizeDelta: {x: -12, y: 0}
+ m_Pivot: {x: 0, y: .5}
+--- !u!1001 &100100000
+Prefab:
+ m_ObjectHideFlags: 1
+ serializedVersion: 2
+ m_Modification:
+ m_TransformParent: {fileID: 0}
+ m_Modifications: []
+ m_RemovedComponents: []
+ m_ParentPrefab: {fileID: 0}
+ m_RootGameObject: {fileID: 109076}
+ m_IsPrefabParent: 1
+ m_IsExploded: 1
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/DataPrivacy/DataPrivacyIcon.png b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/DataPrivacy/DataPrivacyIcon.png
new file mode 100644
index 00000000..564b374b
Binary files /dev/null and b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/DataPrivacy/DataPrivacyIcon.png differ
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/DataPrivacy/Unity.Analytics.DataPrivacy.asmdef b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/DataPrivacy/Unity.Analytics.DataPrivacy.asmdef
new file mode 100644
index 00000000..0bf89c3e
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/DataPrivacy/Unity.Analytics.DataPrivacy.asmdef
@@ -0,0 +1,8 @@
+{
+ "name": "Unity.Analytics.DataPrivacy",
+ "references": ["Unity.ugui"],
+ "optionalUnityReferences": [],
+ "includePlatforms": [],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false
+}
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Editor/AnalyticsEventTracker icon.png b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Editor/AnalyticsEventTracker icon.png
new file mode 100644
index 00000000..23763936
Binary files /dev/null and b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Editor/AnalyticsEventTracker icon.png differ
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/License.md b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/License.md
new file mode 100644
index 00000000..27c17ac4
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/License.md
@@ -0,0 +1,32 @@
+**Unity Companion Package License v1.0 ("_License_")**
+
+Copyright © 2017 Unity Technologies ApS ("**_Unity_**")
+
+Unity hereby grants to you a worldwide, non-exclusive, no-charge, and royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute the software that is made available with this License ("**_Software_**"), subject to the following terms and conditions:
+
+1. *Unity Companion Use Only*. Exercise of the license granted herein is limited to exercise for the creation, use, and/or distribution of applications, software, or other content pursuant to a valid Unity development engine software license ("**_Engine License_**"). That means while use of the Software is not limited to use in the software licensed under the Engine License, the Software may not be used for any purpose other than the creation, use, and/or distribution of Engine License-dependent applications, software, or other content. No other exercise of the license granted herein is permitted.
+
+1. *No Modification of Engine License*. Neither this License nor any exercise of the license granted herein modifies the Engine License in any way.
+
+1. *Ownership & Grant Back to You*.
+
+ 3.1. You own your content. In this License, "derivative works" means derivatives of the Software itself--works derived only from the Software by you under this License (for example, modifying the code of the Software itself to improve its efficacy); “derivative works” of the Software do not include, for example, games, apps, or content that you create using the Software. You keep all right, title, and interest to your own content.
+
+ 3.2. Unity owns its content. While you keep all right, title, and interest to your own content per the above, as between Unity and you, Unity will own all right, title, and interest to all intellectual property rights (including patent, trademark, and copyright) in the Software and derivative works of the Software, and you hereby assign and agree to assign all such rights in those derivative works to Unity.
+
+ 3.3. You have a license to those derivative works. Subject to this License, Unity grants to you the same worldwide, non-exclusive, no-charge, and royalty-free copyright license to derivative works of the Software you create as is granted to you for the Software under this License.
+
+1. *Trademarks*. You are not granted any right or license under this License to use any trademarks, service marks, trade names, products names, or branding of Unity or its affiliates ("**_Trademarks_**"). Descriptive uses of Trademarks are permitted; see, for example, Unity’s Branding Usage Guidelines at [https://unity3d.com/public-relations/brand](https://unity3d.com/public-relations/brand).
+
+1. *Notices & Third-Party Rights*. This License, including the copyright notice above, must be provided in all substantial portions of the Software and derivative works thereof (or, if that is impracticable, in any other location where such notices are customarily placed). Further, if the Software is accompanied by a Unity "third-party notices" or similar file, you acknowledge and agree that software identified in that file is governed by those separate license terms.
+
+1. *DISCLAIMER, LIMITATION OF LIABILITY*. THE SOFTWARE AND ANY DERIVATIVE WORKS THEREOF IS PROVIDED ON AN "AS IS" BASIS, AND IS PROVIDED WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND/OR NONINFRINGEMENT. IN NO EVENT SHALL ANY COPYRIGHT HOLDER OR AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES (WHETHER DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL, INCLUDING PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS, AND BUSINESS INTERRUPTION), OR OTHER LIABILITY WHATSOEVER, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM OR OUT OF, OR IN CONNECTION WITH, THE SOFTWARE OR ANY DERIVATIVE WORKS THEREOF OR THE USE OF OR OTHER DEALINGS IN SAME, EVEN WHERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+1. *USE IS ACCEPTANCE and License Versions*. Your receipt and use of the Software constitutes your acceptance of this License and its terms and conditions. Software released by Unity under this License may be modified or updated and the License with it; upon any such modification or update, you will comply with the terms of the updated License for any use of any of the Software under the updated License.
+
+1. *Use in Compliance with Law and Termination*. Your exercise of the license granted herein will at all times be in compliance with applicable law and will not infringe any proprietary rights (including intellectual property rights); this License will terminate immediately on any breach by you of this License.
+
+1. *Severability*. If any provision of this License is held to be unenforceable or invalid, that provision will be enforced to the maximum extent possible and the other provisions will remain in full force and effect.
+
+1. *Governing Law and Venue*. This License is governed by and construed in accordance with the laws of Denmark, except for its conflict of laws rules; the United Nations Convention on Contracts for the International Sale of Goods will not apply. If you reside (or your principal place of business is) within the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the state and federal courts located in San Francisco County, California concerning any dispute arising out of this License ("**_Dispute_**"). If you reside (or your principal place of business is) outside the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the courts located in Copenhagen, Denmark concerning any Dispute.
+
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/README.md b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/README.md
new file mode 100644
index 00000000..9d6fd499
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/README.md
@@ -0,0 +1,14 @@
+Unity Analytics: Tracker
+------------------------------
+Please visit the following URL to see documentation for the Analytics Event Tracker.
+
+https://docs.google.com/document/d/1glh4zEk0KQ_FhOgk95H-VOubcdzrVGyu5BYCmhFQCh0/edit#
+
+Please note, the documentation at this URL is considered a "living" document and subject to change.
+
+
+Unity Analytics: Standard Events
+------------------------------
+Track player behavior specific to your game
+
+Standard Events are a set of curated custom events focused on player experience.
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/.tests.json b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/.tests.json
new file mode 100644
index 00000000..327abb29
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/.tests.json
@@ -0,0 +1,3 @@
+{
+ "createSeparatePackage": false
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/AchievementStepTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/AchievementStepTests.cs
new file mode 100644
index 00000000..f4c1af3e
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/AchievementStepTests.cs
@@ -0,0 +1,48 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void AchievementStep_StepIndexTest(
+ [Values(-1, 0, 1)] int stepIndex
+ )
+ {
+ var achievementId = "unit_tester";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AchievementStep(stepIndex, achievementId));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void AchievementStep_AchievementIdTest(
+ [Values("unit_tester", "", null)] string achievementId
+ )
+ {
+ var stepIndex = 0;
+
+ if (string.IsNullOrEmpty(achievementId))
+ {
+ Assert.Throws(() => AnalyticsEvent.AchievementStep(stepIndex, achievementId));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AchievementStep(stepIndex, achievementId));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ [Test]
+ public void AchievementStep_CustomDataTest()
+ {
+ var stepIndex = 0;
+ var achievementId = "unit_tester";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AchievementStep(stepIndex, achievementId, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/AchievementUnlockedTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/AchievementUnlockedTests.cs
new file mode 100644
index 00000000..4cb4c4bd
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/AchievementUnlockedTests.cs
@@ -0,0 +1,34 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void AchievementUnlocked_AchievementIdTest(
+ [Values("unit_tester", "", null)] string achievementId
+ )
+ {
+ if (string.IsNullOrEmpty(achievementId))
+ {
+ Assert.Throws(() => AnalyticsEvent.AchievementUnlocked(achievementId));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AchievementUnlocked(achievementId));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ [Test]
+ public void AchievementUnlocked_CustomDataTest()
+ {
+ var achievementId = "unit_tester";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AchievementUnlocked(achievementId, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/AdCompleteTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/AdCompleteTests.cs
new file mode 100644
index 00000000..5efd551a
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/AdCompleteTests.cs
@@ -0,0 +1,62 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void AdComplete_RewardedTest(
+ [Values(true, false)] bool rewarded
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdComplete(rewarded));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void AdComplete_NetworkStringTest(
+ [Values("unityads", "", null)] string network
+ )
+ {
+ var rewarded = true;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdComplete(rewarded, network));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void AdComplete_NetworkEnumTest(
+ [Values(AdvertisingNetwork.UnityAds, AdvertisingNetwork.None)] AdvertisingNetwork network
+ )
+ {
+ var rewarded = true;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdComplete(rewarded, network));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void AdComplete_PlacementIdTest(
+ [Values("rewardedVideo", "", null)] string placementId
+ )
+ {
+ var rewarded = true;
+ var network = AdvertisingNetwork.UnityAds;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdComplete(rewarded, network, placementId));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void AdComplete_CustomDataTest()
+ {
+ var rewarded = true;
+ var network = AdvertisingNetwork.UnityAds;
+ var placementId = "rewardedVideo";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdComplete(rewarded, network, placementId, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/AdOfferTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/AdOfferTests.cs
new file mode 100644
index 00000000..c5dfedb4
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/AdOfferTests.cs
@@ -0,0 +1,62 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void AdOffer_RewardedTest(
+ [Values(true, false)] bool rewarded
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdOffer(rewarded));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void AdOffer_NetworkStringTest(
+ [Values("unityads", "", null)] string network
+ )
+ {
+ var rewarded = true;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdOffer(rewarded, network));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void AdOffer_NetworkEnumTest(
+ [Values(AdvertisingNetwork.UnityAds, AdvertisingNetwork.None)] AdvertisingNetwork network
+ )
+ {
+ var rewarded = true;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdOffer(rewarded, network));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void AdOffer_PlacementIdTest(
+ [Values("rewardedVideo", "", null)] string placementId
+ )
+ {
+ var rewarded = true;
+ var network = AdvertisingNetwork.UnityAds;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdOffer(rewarded, network, placementId));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void AdOffer_CustomDataTest()
+ {
+ var rewarded = true;
+ var network = AdvertisingNetwork.UnityAds;
+ var placementId = "rewardedVideo";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdOffer(rewarded, network, placementId, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/AdSkipTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/AdSkipTests.cs
new file mode 100644
index 00000000..8c554b65
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/AdSkipTests.cs
@@ -0,0 +1,62 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void AdSkip_RewardedTest(
+ [Values(true, false)] bool rewarded
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdSkip(rewarded));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void AdSkip_NetworkStringTest(
+ [Values("unityads", "", null)] string network
+ )
+ {
+ var rewarded = true;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdSkip(rewarded, network));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void AdSkip_NetworkEnumTest(
+ [Values(AdvertisingNetwork.UnityAds, AdvertisingNetwork.None)] AdvertisingNetwork network
+ )
+ {
+ var rewarded = true;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdSkip(rewarded, network));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void AdSkip_PlacementIdTest(
+ [Values("rewardedVideo", "", null)] string placementId
+ )
+ {
+ var rewarded = true;
+ var network = AdvertisingNetwork.UnityAds;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdSkip(rewarded, network, placementId));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void AdSkip_CustomDataTest()
+ {
+ var rewarded = true;
+ var network = AdvertisingNetwork.UnityAds;
+ var placementId = "rewardedVideo";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdSkip(rewarded, network, placementId, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/AdStartTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/AdStartTests.cs
new file mode 100644
index 00000000..ae104d88
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/AdStartTests.cs
@@ -0,0 +1,62 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void AdStart_RewardedTest(
+ [Values(true, false)] bool rewarded
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdStart(rewarded));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void AdStart_NetworkStringTest(
+ [Values("unityads", "", null)] string network
+ )
+ {
+ var rewarded = true;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdStart(rewarded, network));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void AdStart_NetworkEnumTest(
+ [Values(AdvertisingNetwork.UnityAds, AdvertisingNetwork.None)] AdvertisingNetwork network
+ )
+ {
+ var rewarded = true;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdStart(rewarded, network));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void AdStart_PlacementIdTest(
+ [Values("rewardedVideo", "", null)] string placementId
+ )
+ {
+ var rewarded = true;
+ var network = AdvertisingNetwork.UnityAds;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdStart(rewarded, network, placementId));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void AdStart_CustomDataTest()
+ {
+ var rewarded = true;
+ var network = AdvertisingNetwork.UnityAds;
+ var placementId = "rewardedVideo";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.AdStart(rewarded, network, placementId, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/AnalyticsEventTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/AnalyticsEventTests.cs
new file mode 100644
index 00000000..e24c6919
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/AnalyticsEventTests.cs
@@ -0,0 +1,115 @@
+#pragma warning disable 0612, 0618
+
+using System;
+using System.Collections.Generic;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ [TestFixture, Category("Standard Event SDK")]
+ public partial class AnalyticsEventTests
+ {
+ readonly Dictionary m_CustomData = new Dictionary();
+ AnalyticsResult m_Result = AnalyticsResult.Ok;
+
+ [SetUp]
+ public void TestCaseSetUp()
+ {
+ m_Result = AnalyticsResult.Ok;
+
+ m_CustomData.Clear();
+ m_CustomData.Add("custom_param", "test");
+ }
+
+ [Test]
+ public void SdkVersion_FormatTest()
+ {
+ int major, minor, patch;
+ var versions = AnalyticsEvent.sdkVersion.Split('.');
+
+ Assert.AreEqual(3, versions.Length, "Number of integer fields in version format");
+
+ Assert.IsTrue(int.TryParse(versions[0], out major), "Major version is an integer");
+ Assert.IsTrue(int.TryParse(versions[1], out minor), "Minor version is an integer");
+ Assert.IsTrue(int.TryParse(versions[2], out patch), "Patch version is an integer");
+
+ Assert.LessOrEqual(0, major, "Major version");
+ Assert.LessOrEqual(0, minor, "Minor version");
+ Assert.LessOrEqual(0, patch, "Patch version");
+ }
+
+ [Test]
+ public void Custom_EventNameTest(
+ [Values("custom_event", "", null)] string eventName
+ )
+ {
+ if (string.IsNullOrEmpty(eventName))
+ {
+ Assert.Throws(() => m_Result = AnalyticsEvent.Custom(eventName));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.Custom(eventName));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ [Test]
+ public void Custom_EventDataTest()
+ {
+ var eventName = "custom_event";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.Custom(eventName, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void Custom_RegisterUnregisterUnnamedTest()
+ {
+ Action> myAction =
+ eventData => eventData.Add("my_key", "my_value");
+
+ AnalyticsEvent.Register(myAction); // Registering for a named AnalyticsEvent
+
+ var eventName = "custom_event";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.Custom(eventName, m_CustomData));
+
+ EvaluateRegisteredCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+
+ AnalyticsEvent.Unregister(myAction);
+ }
+
+ /// Normal. Unregistered.
+ public static void EvaluateCustomData(IDictionary customData)
+ {
+ Assert.AreEqual(1, customData.Count, "Custom param count");
+ }
+
+ /// For Registered case.
+ public static void EvaluateRegisteredCustomData(IDictionary customData)
+ {
+ Assert.AreEqual(2, customData.Count, "Custom param count");
+ }
+
+ public static void EvaluateAnalyticsResult(AnalyticsResult result)
+ {
+ switch (result)
+ {
+ case AnalyticsResult.Ok:
+ break;
+ case AnalyticsResult.InvalidData:
+ Assert.Fail("Event data is invalid.");
+ break;
+ case AnalyticsResult.TooManyItems:
+ Assert.Fail("Event data consists of too many parameters.");
+ break;
+ default:
+ Debug.LogFormat("A result of {0} is passable for the purpose of this test.", result);
+ break;
+ }
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/ChatMessageSentTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/ChatMessageSentTests.cs
new file mode 100644
index 00000000..56496550
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/ChatMessageSentTests.cs
@@ -0,0 +1,22 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void ChatMessageSent_NoArgsTest()
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ChatMessageSent());
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void ChatMessageSent_CustomDataTest()
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ChatMessageSent(m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/CutsceneSkipTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/CutsceneSkipTests.cs
new file mode 100644
index 00000000..4b3cfd35
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/CutsceneSkipTests.cs
@@ -0,0 +1,34 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void CutsceneSkip_CutsceneNameTest(
+ [Values("test_cutscene", "", null)] string name
+ )
+ {
+ if (string.IsNullOrEmpty(name))
+ {
+ Assert.Throws(() => AnalyticsEvent.CutsceneSkip(name));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.CutsceneSkip(name));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ [Test]
+ public void CutsceneSkip_CustomDataTest()
+ {
+ var name = "test_cutscene";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.CutsceneSkip(name, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/CutsceneStartTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/CutsceneStartTests.cs
new file mode 100644
index 00000000..508cc790
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/CutsceneStartTests.cs
@@ -0,0 +1,34 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void CutsceneStart_CutsceneNameTest(
+ [Values("test_cutscene", "", null)] string name
+ )
+ {
+ if (string.IsNullOrEmpty(name))
+ {
+ Assert.Throws(() => AnalyticsEvent.CutsceneStart(name));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.CutsceneStart(name));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ [Test]
+ public void CutsceneStart_CustomDataTest()
+ {
+ var name = "test_cutscene";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.CutsceneStart(name, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/FirstInteractionTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/FirstInteractionTests.cs
new file mode 100644
index 00000000..a5cc8442
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/FirstInteractionTests.cs
@@ -0,0 +1,33 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void FirstInteraction_NoArgsTest()
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.FirstInteraction());
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void FirstInteraction_ActionIdTest(
+ [Values("test_user_action", "", null)] string actionId
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.FirstInteraction(actionId));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void FirstInteraction_CustomDataTest()
+ {
+ var actionId = "test_user_action";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.FirstInteraction(actionId, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/GameOverTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/GameOverTests.cs
new file mode 100644
index 00000000..8e88f445
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/GameOverTests.cs
@@ -0,0 +1,58 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void GameOver_NoArgsTest()
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameOver());
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void GameOver_LevelIndexTest(
+ [Values(-1, 0, 1)] int levelIndex
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameOver(levelIndex));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void GameOver_LevelNameTest(
+ [Values("test_level", "", null)] string levelName
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameOver(levelName));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void GameOver_LevelIndex_LevelNameTest(
+ [Values(0)] int levelIndex,
+ [Values("test_level", "", null)] string levelName
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameOver(levelIndex, levelName));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void GameOver_CustomDataTest()
+ {
+ var levelIndex = 0;
+ var levelName = "test_level";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameOver(levelName, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameOver(levelIndex, levelName, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/GameStartTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/GameStartTests.cs
new file mode 100644
index 00000000..18749c7c
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/GameStartTests.cs
@@ -0,0 +1,22 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void GameStart_NoArgsTest()
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameStart());
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void GameStart_CustomDataTest()
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.GameStart(m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/IAPTransactionTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/IAPTransactionTests.cs
new file mode 100644
index 00000000..439d4e77
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/IAPTransactionTests.cs
@@ -0,0 +1,111 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void IAPTransaction_ContextTest(
+ [Values("test", "", null)] string context)
+ {
+ var price = 1f;
+ var itemId = "test_item";
+
+ if (string.IsNullOrEmpty(context))
+ {
+ Assert.Throws(() => AnalyticsEvent.IAPTransaction(context, price, itemId));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.IAPTransaction(context, price, itemId));
+ }
+
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void IAPTransaction_PriceTest(
+ [Values(-1f, 0f, 1f)] float price)
+ {
+ var context = "test";
+ var itemId = "test_item";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.IAPTransaction(context, price, itemId));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void IAPTransaction_ItemIdTest(
+ [Values("test_item", "", null)] string itemId)
+ {
+ var context = "test";
+ var price = 1f;
+
+ if (string.IsNullOrEmpty(itemId))
+ {
+ Assert.Throws(() => AnalyticsEvent.IAPTransaction(context, price, itemId));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.IAPTransaction(context, price, itemId));
+ }
+
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void IAPTransaction_ItemTypeTest(
+ [Values("test_type", "", null)] string itemType)
+ {
+ var context = "test";
+ var price = 1f;
+ var itemId = "test_item";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.IAPTransaction(context, price, itemId, itemType));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void IAPTransaction_LevelTest(
+ [Values("test_level", "", null)] string level)
+ {
+ var context = "test";
+ var price = 1f;
+ var itemId = "test_item";
+ var itemType = "test_type";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.IAPTransaction(context, price, itemId, itemType, level));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void IAPTransaction_TransactionIdTest(
+ [Values("test_id", "", null)] string transactionId)
+ {
+ var context = "test";
+ var price = 1f;
+ var itemId = "test_item";
+ var itemType = "test_type";
+ var level = "test_level";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.IAPTransaction(context, price, itemId, itemType, level, transactionId));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void IAPTransaction_CustomDataTest()
+ {
+ var context = "test";
+ var price = 1f;
+ var itemId = "test_item";
+ var itemType = "test_type";
+ var level = "test_level";
+ var transactionId = "test_id";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.IAPTransaction(context, price, itemId, itemType, level, transactionId, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/ItemAcquiredTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/ItemAcquiredTests.cs
new file mode 100644
index 00000000..ec2b6683
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/ItemAcquiredTests.cs
@@ -0,0 +1,176 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void ItemAcquired_CurrencyTypeTest(
+ [Values(AcquisitionType.Premium, AcquisitionType.Soft)] AcquisitionType currencyType)
+ {
+ var context = "test";
+ var amount = 1f;
+ var itemId = "test_item";
+ var balance = 1f;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId));
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void ItemAcquired_ContextTest(
+ [Values("test", "", null)] string context)
+ {
+ var currencyType = AcquisitionType.Soft;
+ var amount = 1f;
+ var itemId = "test_item";
+ var balance = 1f;
+
+ if (string.IsNullOrEmpty(context))
+ {
+ Assert.Throws(() => AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId));
+ Assert.Throws(() => AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance));
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ [Test]
+ public void ItemAcquired_AmountTest(
+ [Values(-1f, 0f, 1f)] float amount)
+ {
+ var currencyType = AcquisitionType.Soft;
+ var context = "test";
+ var itemId = "test_item";
+ var balance = 1f;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId));
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void ItemAcquired_ItemIdTest(
+ [Values("test_item", "", null)] string itemId)
+ {
+ var currencyType = AcquisitionType.Soft;
+ var context = "test";
+ var amount = 1f;
+ var balance = 1f;
+
+ if (string.IsNullOrEmpty(itemId))
+ {
+ Assert.Throws(() => AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId));
+ Assert.Throws(() => AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId));
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ [Test]
+ public void ItemAcquired_BalanceTest(
+ [Values(-1f, 0, 1f)] float balance)
+ {
+ var currencyType = AcquisitionType.Soft;
+ var context = "test";
+ var amount = 1f;
+ var itemId = "test_item";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void ItemAcquired_ItemTypeTest(
+ [Values("test_type", "", null)] string itemType)
+ {
+ var currencyType = AcquisitionType.Soft;
+ var context = "test";
+ var amount = 1f;
+ var itemId = "test_item";
+ var balance = 1f;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, itemType));
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance, itemType));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void ItemAcquired_LevelTest(
+ [Values("test_level", "", null)] string level)
+ {
+ var currencyType = AcquisitionType.Soft;
+ var context = "test";
+ var amount = 1f;
+ var itemId = "test_item";
+ var balance = 1f;
+ var itemType = "test_type";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, itemType, level));
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance, itemType, level));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void ItemAcquired_TransactionIdTest(
+ [Values("test_id", "", null)] string transactionId)
+ {
+ var currencyType = AcquisitionType.Soft;
+ var context = "test";
+ var amount = 1f;
+ var itemId = "test_item";
+ var balance = 1f;
+ var itemType = "test_type";
+ var level = "test_level";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, itemType, level, transactionId));
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance, itemType, level, transactionId));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void ItemAcquired_CustomDataTest()
+ {
+ var currencyType = AcquisitionType.Soft;
+ var context = "test";
+ var amount = 1f;
+ var itemId = "test_item";
+ var balance = 1f;
+ var itemType = "test_type";
+ var level = "test_level";
+ var transactionId = "test_id";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, itemType, level, transactionId, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemAcquired(currencyType, context, amount, itemId, balance, itemType, level, transactionId, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/ItemSpentTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/ItemSpentTests.cs
new file mode 100644
index 00000000..52ee9422
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/ItemSpentTests.cs
@@ -0,0 +1,176 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void ItemSpent_CurrencyTypeTest(
+ [Values(AcquisitionType.Premium, AcquisitionType.Soft)] AcquisitionType currencyType)
+ {
+ var context = "test";
+ var amount = 1f;
+ var itemId = "test_item";
+ var balance = 1f;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId));
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void ItemSpent_ContextTest(
+ [Values("test", "", null)] string context)
+ {
+ var currencyType = AcquisitionType.Soft;
+ var amount = 1f;
+ var itemId = "test_item";
+ var balance = 1f;
+
+ if (string.IsNullOrEmpty(context))
+ {
+ Assert.Throws(() => AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId));
+ Assert.Throws(() => AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance));
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ [Test]
+ public void ItemSpent_AmountTest(
+ [Values(-1f, 0f, 1f)] float amount)
+ {
+ var currencyType = AcquisitionType.Soft;
+ var context = "test";
+ var itemId = "test_item";
+ var balance = 1f;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId));
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void ItemSpent_ItemIdTest(
+ [Values("test_item", "", null)] string itemId)
+ {
+ var currencyType = AcquisitionType.Soft;
+ var context = "test";
+ var amount = 1f;
+ var balance = 1f;
+
+ if (string.IsNullOrEmpty(itemId))
+ {
+ Assert.Throws(() => AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId));
+ Assert.Throws(() => AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId));
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ [Test]
+ public void ItemSpent_BalanceTest(
+ [Values(-1f, 0, 1f)] float balance)
+ {
+ var currencyType = AcquisitionType.Soft;
+ var context = "test";
+ var amount = 1f;
+ var itemId = "test_item";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void ItemSpent_ItemTypeTest(
+ [Values("test_type", "", null)] string itemType)
+ {
+ var currencyType = AcquisitionType.Soft;
+ var context = "test";
+ var amount = 1f;
+ var itemId = "test_item";
+ var balance = 1f;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, itemType));
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance, itemType));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void ItemSpent_LevelTest(
+ [Values("test_level", "", null)] string level)
+ {
+ var currencyType = AcquisitionType.Soft;
+ var context = "test";
+ var amount = 1f;
+ var itemId = "test_item";
+ var balance = 1f;
+ var itemType = "test_type";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, itemType, level));
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance, itemType, level));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void ItemSpent_TransactionIdTest(
+ [Values("test_id", "", null)] string transactionId)
+ {
+ var currencyType = AcquisitionType.Soft;
+ var context = "test";
+ var amount = 1f;
+ var itemId = "test_item";
+ var balance = 1f;
+ var itemType = "test_type";
+ var level = "test_level";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, itemType, level, transactionId));
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance, itemType, level, transactionId));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void ItemSpent_CustomDataTest()
+ {
+ var currencyType = AcquisitionType.Soft;
+ var context = "test";
+ var amount = 1f;
+ var itemId = "test_item";
+ var balance = 1f;
+ var itemType = "test_type";
+ var level = "test_level";
+ var transactionId = "test_id";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, itemType, level, transactionId, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ItemSpent(currencyType, context, amount, itemId, balance, itemType, level, transactionId, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/LevelCompleteTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/LevelCompleteTests.cs
new file mode 100644
index 00000000..274e37c4
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/LevelCompleteTests.cs
@@ -0,0 +1,58 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void LevelComplete_LevelIndexTest(
+ [Values(-1, 0, 1)] int levelIndex
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelComplete(levelIndex));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void LevelComplete_LevelNameTest(
+ [Values("test_level", "", null)] string levelName
+ )
+ {
+ if (string.IsNullOrEmpty(levelName))
+ {
+ Assert.Throws(() => AnalyticsEvent.LevelComplete(levelName));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelComplete(levelName));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ // [Test]
+ // public void LevelComplete_LevelIndex_LevelNameTest (
+ // [Values(0)] int levelIndex,
+ // [Values("test_level", "", null)] string levelName
+ // )
+ // {
+ // Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelComplete(levelIndex, levelName));
+ // EvaluateAnalyticsResult(m_Result);
+ // }
+
+ [Test]
+ public void LevelComplete_CustomDataTest()
+ {
+ var levelIndex = 0;
+ var levelName = "test_level";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelComplete(levelName, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelComplete(levelIndex, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/LevelFailTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/LevelFailTests.cs
new file mode 100644
index 00000000..fece2ead
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/LevelFailTests.cs
@@ -0,0 +1,58 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void LevelFail_LevelIndexTest(
+ [Values(-1, 0, 1)] int levelIndex
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelFail(levelIndex));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void LevelFail_LevelNameTest(
+ [Values("test_level", "", null)] string levelName
+ )
+ {
+ if (string.IsNullOrEmpty(levelName))
+ {
+ Assert.Throws(() => AnalyticsEvent.LevelFail(levelName));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelFail(levelName));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ // [Test]
+ // public void LevelFail_LevelIndex_LevelNameTest (
+ // [Values(-1, 0, 1)] int levelIndex,
+ // [Values("test_level", "", null)] string levelName
+ // )
+ // {
+ // Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelFail(levelIndex, levelName));
+ // EvaluateAnalyticsResult(m_Result);
+ // }
+
+ [Test]
+ public void LevelFail_CustomDataTest()
+ {
+ var levelIndex = 0;
+ var levelName = "test_level";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelFail(levelName, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelFail(levelIndex, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/LevelQuitTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/LevelQuitTests.cs
new file mode 100644
index 00000000..e4859aba
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/LevelQuitTests.cs
@@ -0,0 +1,58 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void LevelQuit_LevelIndexTest(
+ [Values(-1, 0, 1)] int levelIndex
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelQuit(levelIndex));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void LevelQuit_LevelNameTest(
+ [Values("test_level", "", null)] string levelName
+ )
+ {
+ if (string.IsNullOrEmpty(levelName))
+ {
+ Assert.Throws(() => AnalyticsEvent.LevelQuit(levelName));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelQuit(levelName));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ // [Test]
+ // public void LevelQuit_LevelIndex_LevelNameTest (
+ // [Values(-1, 0, 1)] int levelIndex,
+ // [Values("test_level", "", null)] string levelName
+ // )
+ // {
+ // Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelQuit(levelIndex, levelName));
+ // EvaluateAnalyticsResult(m_Result);
+ // }
+
+ [Test]
+ public void LevelQuit_CustomDataTest()
+ {
+ var levelIndex = 0;
+ var levelName = "test_level";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelQuit(levelName, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelQuit(levelIndex, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/LevelSkipTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/LevelSkipTests.cs
new file mode 100644
index 00000000..fcbe9eb6
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/LevelSkipTests.cs
@@ -0,0 +1,58 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void LevelSkip_LevelIndexTest(
+ [Values(-1, 0, 1)] int levelIndex
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelSkip(levelIndex));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void LevelSkip_LevelNameTest(
+ [Values("test_level", "", null)] string levelName
+ )
+ {
+ if (string.IsNullOrEmpty(levelName))
+ {
+ Assert.Throws(() => AnalyticsEvent.LevelSkip(levelName));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelSkip(levelName));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ // [Test]
+ // public void LevelSkip_LevelIndex_LevelNameTest (
+ // [Values(-1, 0, 1)] int levelIndex,
+ // [Values("test_level", "", null)] string levelName
+ // )
+ // {
+ // Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelSkip(levelIndex, levelName));
+ // EvaluateAnalyticsResult(m_Result);
+ // }
+
+ [Test]
+ public void LevelSkip_CustomDataTest()
+ {
+ var levelIndex = 0;
+ var levelName = "test_level";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelSkip(levelName, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelSkip(levelIndex, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/LevelStartTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/LevelStartTests.cs
new file mode 100644
index 00000000..ff4ef434
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/LevelStartTests.cs
@@ -0,0 +1,58 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void LevelStart_LevelIndexTest(
+ [Values(-1, 0, 1)] int levelIndex
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelStart(levelIndex));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void LevelStart_LevelNameTest(
+ [Values("test_level", "", null)] string levelName
+ )
+ {
+ if (string.IsNullOrEmpty(levelName))
+ {
+ Assert.Throws(() => AnalyticsEvent.LevelStart(levelName));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelStart(levelName));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ // [Test]
+ // public void LevelStart_LevelIndex_LevelNameTest (
+ // [Values(0)] int levelIndex,
+ // [Values("test_level", "", null)] string levelName
+ // )
+ // {
+ // Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelStart(levelIndex, levelName));
+ // EvaluateAnalyticsResult(m_Result);
+ // }
+
+ [Test]
+ public void LevelStart_CustomDataTest()
+ {
+ var levelIndex = 0;
+ var levelName = "test_level";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelStart(levelName, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelStart(levelIndex, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/LevelUpTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/LevelUpTests.cs
new file mode 100644
index 00000000..96578a71
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/LevelUpTests.cs
@@ -0,0 +1,58 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void LevelUp_LevelIndexTest(
+ [Values(0, 1, 2)] int newLevelIndex
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelUp(newLevelIndex));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void LevelUp_LevelNameTest(
+ [Values("new_test_level", "", null)] string newLevelName
+ )
+ {
+ if (string.IsNullOrEmpty(newLevelName))
+ {
+ Assert.Throws(() => AnalyticsEvent.LevelUp(newLevelName));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelUp(newLevelName));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ // [Test]
+ // public void LevelUp_LevelIndex_LevelNameTest (
+ // [Values(1)] int newLevelIndex,
+ // [Values("new_test_level", "", null)] string newLevelName
+ // )
+ // {
+ // Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelUp(newLevelIndex, newLevelName));
+ // EvaluateAnalyticsResult(m_Result);
+ // }
+
+ [Test]
+ public void LevelUp_CustomDataTest()
+ {
+ var newLevelIndex = 1;
+ var newLevelName = "new_test_level";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelUp(newLevelName, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.LevelUp(newLevelIndex, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/PostAdActionTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/PostAdActionTests.cs
new file mode 100644
index 00000000..80ffa6df
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/PostAdActionTests.cs
@@ -0,0 +1,62 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void PostAdAction_RewardedTest(
+ [Values(true, false)] bool rewarded
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.PostAdAction(rewarded));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void PostAdAction_NetworkStringTest(
+ [Values("unityads", "", null)] string network
+ )
+ {
+ var rewarded = true;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.PostAdAction(rewarded, network));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void PostAdAction_NetworkEnumTest(
+ [Values(AdvertisingNetwork.UnityAds, AdvertisingNetwork.None)] AdvertisingNetwork network
+ )
+ {
+ var rewarded = true;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.PostAdAction(rewarded, network));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void PostAdAction_PlacementIdTest(
+ [Values("rewardedVideo", "", null)] string placementId
+ )
+ {
+ var rewarded = true;
+ var network = AdvertisingNetwork.UnityAds;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.PostAdAction(rewarded, network, placementId));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void PostAdAction_CustomDataTest()
+ {
+ var rewarded = true;
+ var network = AdvertisingNetwork.UnityAds;
+ var placementId = "rewardedVideo";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.PostAdAction(rewarded, network, placementId, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/PushNotificationClickTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/PushNotificationClickTests.cs
new file mode 100644
index 00000000..5923cedd
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/PushNotificationClickTests.cs
@@ -0,0 +1,34 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void PushNotificationClick_MessageIdTest(
+ [Values("test_message", "", null)] string messageId
+ )
+ {
+ if (string.IsNullOrEmpty(messageId))
+ {
+ Assert.Throws(() => AnalyticsEvent.PushNotificationClick(messageId));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.PushNotificationClick(messageId));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ [Test]
+ public void PushNotificationClick_CustomDataTest()
+ {
+ var messageId = "test_message";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.PushNotificationClick(messageId, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/PushNotificationEnableTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/PushNotificationEnableTests.cs
new file mode 100644
index 00000000..2e842bdc
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/PushNotificationEnableTests.cs
@@ -0,0 +1,22 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void PushNotificationEnable_NoArgsTest()
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.PushNotificationEnable());
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void PushNotificationEnable_CustomDataTest()
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.PushNotificationEnable(m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/ScreenVisitTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/ScreenVisitTests.cs
new file mode 100644
index 00000000..97a60fcc
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/ScreenVisitTests.cs
@@ -0,0 +1,43 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void ScreenVisit_ScreenNameStringTest(
+ [Values("test_screen", "", null)] string screenName
+ )
+ {
+ if (string.IsNullOrEmpty(screenName))
+ {
+ Assert.Throws(() => AnalyticsEvent.ScreenVisit(screenName));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ScreenVisit(screenName));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ [Test]
+ public void ScreenVisit_ScreenNameEnumTest(
+ [Values(ScreenName.CrossPromo, ScreenName.IAPPromo, ScreenName.None)] ScreenName screenName
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ScreenVisit(screenName));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void ScreenVisit_CustomDataTest()
+ {
+ var screenName = ScreenName.MainMenu;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.ScreenVisit(screenName, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/SocialShareAcceptTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/SocialShareAcceptTests.cs
new file mode 100644
index 00000000..7cb38a1d
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/SocialShareAcceptTests.cs
@@ -0,0 +1,110 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void SocialShareAccept_ShareTypeStringTest(
+ [Values("test_share", "", null)] string shareType
+ )
+ {
+ var socialNetwork = SocialNetwork.Facebook;
+
+ if (string.IsNullOrEmpty(shareType))
+ {
+ Assert.Throws(() => AnalyticsEvent.SocialShare(shareType, socialNetwork));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.SocialShareAccept(shareType, socialNetwork));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ [Test]
+ public void SocialShareAccept_ShareTypeEnumTest(
+ [Values(ShareType.TextOnly, ShareType.Image, ShareType.None)] ShareType shareType
+ )
+ {
+ var socialNetwork = SocialNetwork.Twitter;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.SocialShareAccept(shareType, socialNetwork));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void SocialShareAccept_SocialNetworkStringTest(
+ [Values("test_network", "", null)] string socialNetwork
+ )
+ {
+ var shareType = ShareType.Image;
+
+ if (string.IsNullOrEmpty(socialNetwork))
+ {
+ Assert.Throws(() => AnalyticsEvent.SocialShare(shareType, socialNetwork));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.SocialShareAccept(shareType, socialNetwork));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ [Test]
+ public void SocialShareAccept_SocialNetworkEnumTest(
+ [Values(SocialNetwork.GooglePlus, SocialNetwork.OK_ru, SocialNetwork.None)] SocialNetwork socialNetwork
+ )
+ {
+ var shareType = ShareType.Video;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.SocialShareAccept(shareType, socialNetwork));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void SocialShareAccept_SenderIdTest(
+ [Values("test_sender", "", null)] string senderId
+ )
+ {
+ var shareType = ShareType.TextOnly;
+ var socialNetwork = SocialNetwork.Twitter;
+
+ Assert.DoesNotThrow(
+ () => m_Result = AnalyticsEvent.SocialShareAccept(shareType, socialNetwork, senderId)
+ );
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void SocialShareAccept_RecipientIdTest(
+ [Values("test_recipient", "", null)] string recipientId
+ )
+ {
+ var shareType = ShareType.TextOnly;
+ var socialNetwork = SocialNetwork.Twitter;
+ var senderId = "test_sender";
+
+ Assert.DoesNotThrow(
+ () => m_Result = AnalyticsEvent.SocialShareAccept(shareType, socialNetwork, senderId, recipientId)
+ );
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void SocialShareAccept_CustomDataTest()
+ {
+ var shareType = ShareType.TextOnly;
+ var socialNetwork = SocialNetwork.Twitter;
+ var senderId = "test_sender";
+ var recipientId = "test_recipient";
+
+ Assert.DoesNotThrow(
+ () => m_Result = AnalyticsEvent.SocialShareAccept(shareType, socialNetwork, senderId, recipientId, m_CustomData)
+ );
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/SocialShareTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/SocialShareTests.cs
new file mode 100644
index 00000000..0809d04a
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/SocialShareTests.cs
@@ -0,0 +1,110 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void SocialShare_ShareTypeStringTest(
+ [Values("test_share", "", null)] string shareType
+ )
+ {
+ var socialNetwork = SocialNetwork.Facebook;
+
+ if (string.IsNullOrEmpty(shareType))
+ {
+ Assert.Throws(() => AnalyticsEvent.SocialShare(shareType, socialNetwork));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.SocialShare(shareType, socialNetwork));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ [Test]
+ public void SocialShare_ShareTypeEnumTest(
+ [Values(ShareType.TextOnly, ShareType.Image, ShareType.None)] ShareType shareType
+ )
+ {
+ var socialNetwork = SocialNetwork.Twitter;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.SocialShare(shareType, socialNetwork));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void SocialShare_SocialNetworkStringTest(
+ [Values("test_network", "", null)] string socialNetwork
+ )
+ {
+ var shareType = ShareType.Image;
+
+ if (string.IsNullOrEmpty(socialNetwork))
+ {
+ Assert.Throws(() => AnalyticsEvent.SocialShare(shareType, socialNetwork));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.SocialShare(shareType, socialNetwork));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ [Test]
+ public void SocialShare_SocialNetworkEnumTest(
+ [Values(SocialNetwork.GooglePlus, SocialNetwork.OK_ru, SocialNetwork.None)] SocialNetwork socialNetwork
+ )
+ {
+ var shareType = ShareType.Video;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.SocialShare(shareType, socialNetwork));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void SocialShare_SenderIdTest(
+ [Values("test_sender", "", null)] string senderId
+ )
+ {
+ var shareType = ShareType.TextOnly;
+ var socialNetwork = SocialNetwork.Twitter;
+
+ Assert.DoesNotThrow(
+ () => m_Result = AnalyticsEvent.SocialShare(shareType, socialNetwork, senderId)
+ );
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void SocialShare_RecipientIdTest(
+ [Values("test_recipient", "", null)] string recipientId
+ )
+ {
+ var shareType = ShareType.TextOnly;
+ var socialNetwork = SocialNetwork.Twitter;
+ var senderId = "test_sender";
+
+ Assert.DoesNotThrow(
+ () => m_Result = AnalyticsEvent.SocialShare(shareType, socialNetwork, senderId, recipientId)
+ );
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void SocialShare_CustomDataTest()
+ {
+ var shareType = ShareType.TextOnly;
+ var socialNetwork = SocialNetwork.Twitter;
+ var senderId = "test_sender";
+ var recipientId = "test_recipient";
+
+ Assert.DoesNotThrow(
+ () => m_Result = AnalyticsEvent.SocialShare(shareType, socialNetwork, senderId, recipientId, m_CustomData)
+ );
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/StoreItemClickTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/StoreItemClickTests.cs
new file mode 100644
index 00000000..367a4599
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/StoreItemClickTests.cs
@@ -0,0 +1,75 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void StoreItemClick_StoreTypeTest(
+ [Values(StoreType.Premium, StoreType.Soft)] StoreType storeType
+ )
+ {
+ var itemId = "test_item";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.StoreItemClick(storeType, itemId));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void StoreItemClick_ItemIdTest(
+ [Values("test_item", "", null)] string itemId
+ )
+ {
+ var storeType = StoreType.Soft;
+
+ if (string.IsNullOrEmpty(itemId))
+ {
+ Assert.Throws(() => AnalyticsEvent.StoreItemClick(storeType, itemId));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.StoreItemClick(storeType, itemId));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ [Test]
+ public void StoreItemClick_ItemId_ItemNameTest(
+ [Values("test_item_id", "", null)] string itemId,
+ [Values("Test Item Name", "", null)] string itemName
+ )
+ {
+ var storeType = StoreType.Soft;
+
+ if (string.IsNullOrEmpty(itemId) && string.IsNullOrEmpty(itemName))
+ {
+ Assert.Throws(() => AnalyticsEvent.StoreItemClick(storeType, itemId));
+ }
+ else
+ {
+ if (string.IsNullOrEmpty(itemId))
+ {
+ Assert.Throws(() => AnalyticsEvent.StoreItemClick(storeType, itemId));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.StoreItemClick(storeType, itemId, itemName));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+ }
+
+ [Test]
+ public void StoreItemClick_CustomDataTest()
+ {
+ var storeType = StoreType.Soft;
+ var itemId = "test_item";
+ var itemName = "Test Item";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.StoreItemClick(storeType, itemId, itemName, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/StoreOpenedTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/StoreOpenedTests.cs
new file mode 100644
index 00000000..48918872
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/StoreOpenedTests.cs
@@ -0,0 +1,27 @@
+using System.Collections.Generic;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void StoreOpened_StoreTypeTest(
+ [Values(StoreType.Premium, StoreType.Soft)] StoreType storeType
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.StoreOpened(storeType));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void StoreOpened_CustomDataTest()
+ {
+ var storeType = StoreType.Soft;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.StoreOpened(storeType, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/TutorialCompleteTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/TutorialCompleteTests.cs
new file mode 100644
index 00000000..3e166af2
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/TutorialCompleteTests.cs
@@ -0,0 +1,26 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void TutorialComplete_TutorialIdTest(
+ [Values("test_tutorial", "", null)] string tutorialId
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.TutorialComplete(tutorialId));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void TutorialComplete_CustomDataTest()
+ {
+ var tutorialId = "test_tutorial";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.TutorialComplete(tutorialId, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/TutorialSkipTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/TutorialSkipTests.cs
new file mode 100644
index 00000000..9b413eda
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/TutorialSkipTests.cs
@@ -0,0 +1,26 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void TutorialSkip_TutorialIdTest(
+ [Values("test_tutorial", "", null)] string tutorialId
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.TutorialSkip(tutorialId));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void TutorialSkip_CustomDataTest()
+ {
+ var tutorialId = "test_tutorial";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.TutorialSkip(tutorialId, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/TutorialStartTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/TutorialStartTests.cs
new file mode 100644
index 00000000..425f2773
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/TutorialStartTests.cs
@@ -0,0 +1,26 @@
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void TutorialStart_TutorialIdTest(
+ [Values("test_tutorial", "", null)] string tutorialId
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.TutorialStart(tutorialId));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void TutorialStart_CustomDataTest()
+ {
+ var tutorialId = "test_tutorial";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.TutorialStart(tutorialId, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/TutorialStepTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/TutorialStepTests.cs
new file mode 100644
index 00000000..524d8195
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/TutorialStepTests.cs
@@ -0,0 +1,39 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void TutorialStep_StepIndexTest(
+ [Values(-1, 0, 1)] int stepIndex
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.TutorialStep(stepIndex));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void TutorialStep_TutorialIdTest(
+ [Values("test_tutorial", "", null)] string tutorialId
+ )
+ {
+ var stepIndex = 0;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.TutorialStep(stepIndex, tutorialId));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void TutorialStep_CustomDataTest()
+ {
+ var stepIndex = 0;
+ var tutorialId = "test_tutorial";
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.TutorialStep(stepIndex, tutorialId, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/Unity.Analytics.StandardEvents.EditorTests.asmdef b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/Unity.Analytics.StandardEvents.EditorTests.asmdef
new file mode 100644
index 00000000..e2141b4b
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/Unity.Analytics.StandardEvents.EditorTests.asmdef
@@ -0,0 +1,19 @@
+{
+ "name": "Unity.Analytics.StandardEvents.EditorTests",
+ "references": [],
+ "optionalUnityReferences": [
+ "TestAssemblies"
+ ],
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": true,
+ "precompiledReferences": [
+ "Unity.Analytics.StandardEvents.dll"
+ ],
+ "autoReferenced": true,
+ "defineConstraints": [],
+ "versionDefines": []
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/UserSignupTests.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/UserSignupTests.cs
new file mode 100644
index 00000000..56920a63
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Editor/Unity.Analytics.StandardEvents/UserSignupTests.cs
@@ -0,0 +1,43 @@
+using System;
+using NUnit.Framework;
+
+namespace UnityEngine.Analytics.Tests
+{
+ public partial class AnalyticsEventTests
+ {
+ [Test]
+ public void UserSignup_AuthorizationNetworkStringTest(
+ [Values("test_network", "", null)] string network
+ )
+ {
+ if (string.IsNullOrEmpty(network))
+ {
+ Assert.Throws(() => AnalyticsEvent.UserSignup(network));
+ }
+ else
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.UserSignup(network));
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+
+ [Test]
+ public void UserSignup_AuthorizationNetworkEnumTest(
+ [Values(AuthorizationNetwork.Facebook, AuthorizationNetwork.GameCenter, AuthorizationNetwork.None)] AuthorizationNetwork network
+ )
+ {
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.UserSignup(network));
+ EvaluateAnalyticsResult(m_Result);
+ }
+
+ [Test]
+ public void UserSignup_CustomDataTest()
+ {
+ var network = AuthorizationNetwork.Internal;
+
+ Assert.DoesNotThrow(() => m_Result = AnalyticsEvent.UserSignup(network, m_CustomData));
+ EvaluateCustomData(m_CustomData);
+ EvaluateAnalyticsResult(m_Result);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Runtime/DataPrivacy/JsonSerialization.cs b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Runtime/DataPrivacy/JsonSerialization.cs
new file mode 100644
index 00000000..921976a5
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Runtime/DataPrivacy/JsonSerialization.cs
@@ -0,0 +1,24 @@
+using System;
+using NUnit.Framework;
+using UnityEngine;
+using UnityEngine.Analytics;
+
+public class JsonSerialization
+{
+ // This test was create to verifiy JsonUtility could properly deserialize the nested
+ // structs used for opt-out status. That process is now handled with remote config so
+ // now we just verify that the expected response from the token API can be deserialized.
+
+ const string kTokenJson = "{" +
+ "\"url\": \"https://analytics.cloud.unity3d.com/optout?token=24a96770b5c4420a4f930dbb4b72fbb83erfg3edf3ert4r1/\"," +
+ "\"token\": \"24a96770b5c4420a4f930dbb4b72fbb83erfg3edf3ert4r1\"" +
+ "}";
+
+ [Test]
+ public void TestTokenStruct_JsonUtility()
+ {
+ var tokenData = JsonUtility.FromJson(kTokenJson);
+ Assert.AreEqual("https://analytics.cloud.unity3d.com/optout?token=24a96770b5c4420a4f930dbb4b72fbb83erfg3edf3ert4r1/", tokenData.url);
+ Assert.AreEqual("24a96770b5c4420a4f930dbb4b72fbb83erfg3edf3ert4r1", tokenData.token);
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Runtime/DataPrivacy/Unity.Analytics.DataPrivacy.Tests.asmdef b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Runtime/DataPrivacy/Unity.Analytics.DataPrivacy.Tests.asmdef
new file mode 100644
index 00000000..54d317a0
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Tests/Runtime/DataPrivacy/Unity.Analytics.DataPrivacy.Tests.asmdef
@@ -0,0 +1,12 @@
+{
+ "name": "Unity.Analytics.DataPrivacy.Tests",
+ "references": [
+ "Unity.Analytics.DataPrivacy"
+ ],
+ "optionalUnityReferences": [
+ "TestAssemblies"
+ ],
+ "includePlatforms": [],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false
+}
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Unity.Analytics.Editor.dll b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Unity.Analytics.Editor.dll
new file mode 100644
index 00000000..8f567aad
Binary files /dev/null and b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Unity.Analytics.Editor.dll differ
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Unity.Analytics.Editor.dll.mdb b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Unity.Analytics.Editor.dll.mdb
new file mode 100644
index 00000000..ab7a630c
Binary files /dev/null and b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Unity.Analytics.Editor.dll.mdb differ
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Unity.Analytics.StandardEvents.dll b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Unity.Analytics.StandardEvents.dll
new file mode 100644
index 00000000..b8e7ea79
Binary files /dev/null and b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Unity.Analytics.StandardEvents.dll differ
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Unity.Analytics.StandardEvents.dll.mdb b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Unity.Analytics.StandardEvents.dll.mdb
new file mode 100644
index 00000000..03748075
Binary files /dev/null and b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Unity.Analytics.StandardEvents.dll.mdb differ
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Unity.Analytics.Tracker.dll b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Unity.Analytics.Tracker.dll
new file mode 100644
index 00000000..21975ccf
Binary files /dev/null and b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Unity.Analytics.Tracker.dll differ
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Unity.Analytics.Tracker.dll.mdb b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Unity.Analytics.Tracker.dll.mdb
new file mode 100644
index 00000000..0811ab65
Binary files /dev/null and b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/Unity.Analytics.Tracker.dll.mdb differ
diff --git a/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/package.json b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/package.json
new file mode 100644
index 00000000..a1f71399
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.analytics@3.3.2/package.json
@@ -0,0 +1,21 @@
+{
+ "dependencies": {
+ "com.unity.ugui": "1.0.0"
+ },
+ "description": "The Unity Analytics Library contains the Analytics Event Tracker component, the Data Privacy plug-in, and the Standard Events API.",
+ "displayName": "Analytics Library",
+ "keywords": [
+ "analytics",
+ "unity"
+ ],
+ "name": "com.unity.analytics",
+ "readme": "Unity Analytics",
+ "repoPackagePath": "build/install/com.unity.analytics",
+ "repository": {
+ "revision": "8196036181e573933751e8c0296037c7b6ddca65",
+ "type": "git",
+ "url": "git@gitlab.cds.internal.unity3d.com:upm-packages/analytics/com.unity.analytics.git"
+ },
+ "unity": "2019.1",
+ "version": "3.3.2"
+}
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/.npmignore b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/.npmignore
new file mode 100644
index 00000000..1586aea7
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/.npmignore
@@ -0,0 +1,6 @@
+
+automation/**
+utr_output/**
+.Editor/**
+.yamato/**
+*.zip*
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md
new file mode 100644
index 00000000..3c6c85d5
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md
@@ -0,0 +1,31 @@
+# Changelog
+All notable changes to this package will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
+
+## [1.2.16] - 2019-02-11
+Update stylesheet to pass USS validation
+
+## [1.2.15] - 2018-11-16
+Added support for non-experimental UIElements.
+
+## [1.2.11] - 2018-09-04
+Made some performance improvements to reduce impact on ReloadAssemblies.
+
+## [1.2.9] - 2018-08-13
+Test issues for the Collab History Window are now fixed.
+
+## [1.2.7] - 2018-08-07
+Toolbar drop-down will no longer show up when package is uninstalled.
+
+## [1.2.6] - 2018-06-15
+Fixed an issue where Collab's History window wouldn't load properly.
+
+## [1.2.5] - 2018-05-21
+This is the first release of *Unity Package CollabProxy*.
+
+### Added
+- Collab history and toolbar windows
+- Collab view and presenter classes
+- Collab Editor tests for view and presenter
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md
new file mode 100644
index 00000000..57808d56
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md
@@ -0,0 +1,9 @@
+
+
+
+ Unity.CollabProxy.Dependencies
+ 1.1.0-experimental
+ Rohit Garg
+ Dependencies for the CollabProxy package
+
+
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs
new file mode 100644
index 00000000..d7266b63
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs
@@ -0,0 +1,4 @@
+using System.Runtime.CompilerServices;
+using UnityEngine;
+
+[assembly: InternalsVisibleTo("Unity.CollabProxy.EditorTests")]
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs
new file mode 100644
index 00000000..029ce1c7
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs
@@ -0,0 +1,24 @@
+using UnityEditor;
+using UnityEditor.Collaboration;
+using UnityEngine;
+
+namespace CollabProxy.UI
+{
+ [InitializeOnLoad]
+ public class Bootstrap
+ {
+ private const float kCollabToolbarButtonWidth = 78.0f;
+
+ static Bootstrap()
+ {
+ Collab.ShowHistoryWindow = CollabHistoryWindow.ShowHistoryWindow;
+ Collab.ShowToolbarAtPosition = CollabToolbarWindow.ShowCenteredAtPosition;
+ Collab.IsToolbarVisible = CollabToolbarWindow.IsVisible;
+ Collab.CloseToolbar = CollabToolbarWindow.CloseToolbar;
+ Toolbar.AddSubToolbar(new CollabToolbarButton
+ {
+ Width = kCollabToolbarButtonWidth
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs
new file mode 100644
index 00000000..c7f90aa1
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs
@@ -0,0 +1,21 @@
+using System;
+
+namespace UnityEditor.Collaboration
+{
+ internal static class CollabAnalytics
+ {
+ [Serializable]
+ private struct CollabUserActionAnalyticsEvent
+ {
+ public string category;
+ public string action;
+ }
+
+ public static void SendUserAction(string category, string action)
+ {
+ EditorAnalytics.SendCollabUserAction(new CollabUserActionAnalyticsEvent() { category = category, action = action });
+ }
+
+ public static readonly string historyCategoryString = "History";
+ };
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs
new file mode 100644
index 00000000..b855bce3
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs
@@ -0,0 +1,330 @@
+using System;
+using System.Linq;
+using System.Collections.Generic;
+using UnityEditor.Collaboration;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEditor.UIElements;
+using UnityEngine.UIElements;
+#else
+using UnityEditor.Experimental.UIElements;
+using UnityEngine.Experimental.UIElements;
+using UnityEngine.Experimental.UIElements.StyleEnums;
+#endif
+
+using UnityEngine;
+using UnityEditor.Connect;
+
+namespace UnityEditor
+{
+ internal class CollabHistoryWindow : EditorWindow, ICollabHistoryWindow
+ {
+#if UNITY_2019_1_OR_NEWER
+ private const string ResourcesPath = "Packages/com.unity.collab-proxy/Editor/Resources/Styles/";
+#else
+ private const string ResourcesPath = "StyleSheets/";
+#endif
+
+
+ const string kWindowTitle = "Collab History";
+ const string kServiceUrl = "developer.cloud.unity3d.com";
+
+ [MenuItem("Window/Asset Management/Collab History", false, 1)]
+ public static void ShowHistoryWindow()
+ {
+ EditorWindow.GetWindow(kWindowTitle);
+ }
+
+ [MenuItem("Window/Asset Management/Collab History", true)]
+ public static bool ValidateShowHistoryWindow()
+ {
+ return Collab.instance.IsCollabEnabledForCurrentProject();
+ }
+
+ CollabHistoryPresenter m_Presenter;
+ Dictionary m_Views;
+ List m_HistoryItems = new List();
+ HistoryState m_State;
+ VisualElement m_Container;
+ PagedListView m_Pager;
+ ScrollView m_HistoryView;
+ int m_ItemsPerPage = 5;
+ string m_InProgressRev;
+ bool m_RevisionActionsEnabled;
+
+ public CollabHistoryWindow()
+ {
+ minSize = new Vector2(275, 50);
+ }
+
+ public void OnEnable()
+ {
+ SetupGUI();
+ name = "CollabHistory";
+
+ if (m_Presenter == null)
+ {
+ m_Presenter = new CollabHistoryPresenter(this, new CollabHistoryItemFactory(), new RevisionsService(Collab.instance, UnityConnect.instance));
+ }
+ m_Presenter.OnWindowEnabled();
+ }
+
+ public void OnDisable()
+ {
+ m_Presenter.OnWindowDisabled();
+ }
+
+ public bool revisionActionsEnabled
+ {
+ get { return m_RevisionActionsEnabled; }
+ set
+ {
+ if (m_RevisionActionsEnabled == value)
+ return;
+
+ m_RevisionActionsEnabled = value;
+ foreach (var historyItem in m_HistoryItems)
+ {
+ historyItem.RevisionActionsEnabled = value;
+ }
+ }
+ }
+
+ private void AddStyleSheetPath(VisualElement root, string path)
+ {
+#if UNITY_2019_1_OR_NEWER
+ root.styleSheets.Add(EditorGUIUtility.Load(path) as StyleSheet);
+#else
+ root.AddStyleSheetPath(path);
+#endif
+ }
+
+
+ public void SetupGUI()
+ {
+#if UNITY_2019_1_OR_NEWER
+ var root = this.rootVisualElement;
+#else
+ var root = this.GetRootVisualContainer();
+#endif
+ AddStyleSheetPath(root, ResourcesPath + "CollabHistoryCommon.uss");
+ if (EditorGUIUtility.isProSkin)
+ {
+ AddStyleSheetPath(root, ResourcesPath + "CollabHistoryDark.uss");
+ }
+ else
+ {
+ AddStyleSheetPath(root, ResourcesPath + "CollabHistoryLight.uss");
+ }
+
+ m_Container = new VisualElement();
+ m_Container.StretchToParentSize();
+ root.Add(m_Container);
+
+ m_Pager = new PagedListView()
+ {
+ name = "PagedElement",
+ pageSize = m_ItemsPerPage
+ };
+
+ var errorView = new StatusView()
+ {
+ message = "An Error Occurred",
+ icon = EditorGUIUtility.LoadIconRequired("Collab.Warning") as Texture,
+ };
+
+ var noInternetView = new StatusView()
+ {
+ message = "No Internet Connection",
+ icon = EditorGUIUtility.LoadIconRequired("Collab.NoInternet") as Texture,
+ };
+
+ var maintenanceView = new StatusView()
+ {
+ message = "Maintenance",
+ };
+
+ var loginView = new StatusView()
+ {
+ message = "Sign in to access Collaborate",
+ buttonText = "Sign in...",
+ callback = SignInClick,
+ };
+
+ var noSeatView = new StatusView()
+ {
+ message = "Ask your project owner for access to Unity Teams",
+ buttonText = "Learn More",
+ callback = NoSeatClick,
+ };
+
+ var waitingView = new StatusView()
+ {
+ message = "Updating...",
+ };
+
+ m_HistoryView = new ScrollView() { name = "HistoryContainer", showHorizontal = false};
+ m_HistoryView.contentContainer.StretchToParentWidth();
+ m_HistoryView.Add(m_Pager);
+
+ m_Views = new Dictionary()
+ {
+ {HistoryState.Error, errorView},
+ {HistoryState.Offline, noInternetView},
+ {HistoryState.Maintenance, maintenanceView},
+ {HistoryState.LoggedOut, loginView},
+ {HistoryState.NoSeat, noSeatView},
+ {HistoryState.Waiting, waitingView},
+ {HistoryState.Ready, m_HistoryView}
+ };
+ }
+
+ public void UpdateState(HistoryState state, bool force)
+ {
+ if (state == m_State && !force)
+ return;
+
+ m_State = state;
+ switch (state)
+ {
+ case HistoryState.Ready:
+ UpdateHistoryView(m_Pager);
+ break;
+ case HistoryState.Disabled:
+ Close();
+ return;
+ }
+
+ m_Container.Clear();
+ m_Container.Add(m_Views[m_State]);
+ }
+
+ public void UpdateRevisions(IEnumerable datas, string tip, int totalRevisions, int currentPage)
+ {
+ var elements = new List();
+ var isFullDateObtained = false; // Has everything from this date been obtained?
+ m_HistoryItems.Clear();
+
+ if (datas != null)
+ {
+ DateTime currentDate = DateTime.MinValue;
+ foreach (var data in datas)
+ {
+ if (data.timeStamp.Date != currentDate.Date)
+ {
+ elements.Add(new CollabHistoryRevisionLine(data.timeStamp, isFullDateObtained));
+ currentDate = data.timeStamp;
+ }
+
+ var item = new CollabHistoryItem(data);
+ m_HistoryItems.Add(item);
+
+ var container = new VisualElement();
+ container.style.flexDirection = FlexDirection.Row;
+ if (data.current)
+ {
+ isFullDateObtained = true;
+ container.AddToClassList("currentRevision");
+ container.AddToClassList("obtainedRevision");
+ }
+ else if (data.obtained)
+ {
+ container.AddToClassList("obtainedRevision");
+ }
+ else
+ {
+ container.AddToClassList("absentRevision");
+ }
+ // If we use the index as-is, the latest commit will become #1, but we want it to be last
+ container.Add(new CollabHistoryRevisionLine(data.index));
+ container.Add(item);
+ elements.Add(container);
+ }
+ }
+
+ m_HistoryView.scrollOffset = new Vector2(0, 0);
+ m_Pager.totalItems = totalRevisions;
+ m_Pager.curPage = currentPage;
+ m_Pager.items = elements;
+ }
+
+ public string inProgressRevision
+ {
+ get { return m_InProgressRev; }
+ set
+ {
+ m_InProgressRev = value;
+ foreach (var historyItem in m_HistoryItems)
+ {
+ historyItem.SetInProgressStatus(value);
+ }
+ }
+ }
+
+ public int itemsPerPage
+ {
+ set
+ {
+ if (m_ItemsPerPage == value)
+ return;
+ m_Pager.pageSize = m_ItemsPerPage;
+ }
+ }
+
+ public PageChangeAction OnPageChangeAction
+ {
+ set { m_Pager.OnPageChanged = value; }
+ }
+
+ public RevisionAction OnGoBackAction
+ {
+ set { CollabHistoryItem.s_OnGoBack = value; }
+ }
+
+ public RevisionAction OnUpdateAction
+ {
+ set { CollabHistoryItem.s_OnUpdate = value; }
+ }
+
+ public RevisionAction OnRestoreAction
+ {
+ set { CollabHistoryItem.s_OnRestore = value; }
+ }
+
+ public ShowBuildAction OnShowBuildAction
+ {
+ set { CollabHistoryItem.s_OnShowBuild = value; }
+ }
+
+ public Action OnShowServicesAction
+ {
+ set { CollabHistoryItem.s_OnShowServices = value; }
+ }
+
+ void UpdateHistoryView(VisualElement history)
+ {
+ }
+
+ void NoSeatClick()
+ {
+ var connection = UnityConnect.instance;
+ var env = connection.GetEnvironment();
+ // Map environment to url - prod is special
+ if (env == "production")
+ env = "";
+ else
+ env += "-";
+
+ var url = "https://" + env + kServiceUrl
+ + "/orgs/" + connection.GetOrganizationId()
+ + "/projects/" + connection.GetProjectName()
+ + "/unity-teams/";
+ Application.OpenURL(url);
+ }
+
+ void SignInClick()
+ {
+ UnityConnect.instance.ShowLogin();
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs
new file mode 100644
index 00000000..eebe4aca
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs
@@ -0,0 +1,297 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEditor.Collaboration;
+using UnityEditor.Connect;
+using UnityEditor.Web;
+using UnityEngine;
+
+namespace UnityEditor
+{
+ internal class CollabToolbarButton : SubToolbar, IDisposable
+ {
+ // Must match s_CollabIcon array
+ enum CollabToolbarState
+ {
+ NeedToEnableCollab,
+ UpToDate,
+ Conflict,
+ OperationError,
+ ServerHasChanges,
+ FilesToPush,
+ InProgress,
+ Disabled,
+ Offline
+ }
+
+ private class CollabToolbarContent
+ {
+ readonly string m_iconName;
+ readonly string m_toolTip;
+ readonly CollabToolbarState m_state;
+
+ static Dictionary m_CollabIcons;
+
+ public CollabToolbarState RegisteredForState
+ {
+ get { return m_state; }
+ }
+
+ public GUIContent GuiContent
+ {
+ get
+ {
+ if (m_CollabIcons == null)
+ {
+ m_CollabIcons = new Dictionary();
+ }
+
+ if (!m_CollabIcons.ContainsKey(this))
+ {
+ m_CollabIcons.Add(this, EditorGUIUtility.TrTextContentWithIcon("Collab", m_toolTip, m_iconName));
+ }
+
+ return m_CollabIcons[this];
+ }
+ }
+
+ public CollabToolbarContent(CollabToolbarState state, string iconName, string toolTip)
+ {
+ m_state = state;
+ m_iconName = iconName;
+ m_toolTip = toolTip;
+ }
+ }
+
+ CollabToolbarContent[] m_toolbarContents;
+ CollabToolbarState m_CollabToolbarState = CollabToolbarState.UpToDate;
+ const float kCollabButtonWidth = 78.0f;
+ ButtonWithAnimatedIconRotation m_CollabButton;
+ string m_DynamicTooltip;
+ static bool m_ShowCollabTooltip = false;
+
+ private GUIContent currentCollabContent
+ {
+ get
+ {
+ CollabToolbarContent toolbarContent =
+ m_toolbarContents.FirstOrDefault(c => c.RegisteredForState.Equals(m_CollabToolbarState));
+ GUIContent content = new GUIContent(toolbarContent == null? m_toolbarContents.First().GuiContent : toolbarContent.GuiContent);
+ if (!m_ShowCollabTooltip)
+ {
+ content.tooltip = null;
+ }
+ else if (m_DynamicTooltip != "")
+ {
+ content.tooltip = m_DynamicTooltip;
+ }
+
+ if (Collab.instance.AreTestsRunning())
+ {
+ content.text = "CTF";
+ }
+
+ return content;
+ }
+ }
+
+ public CollabToolbarButton()
+ {
+ m_toolbarContents = new[]
+ {
+ new CollabToolbarContent(CollabToolbarState.NeedToEnableCollab, "CollabNew", " You need to enable collab."),
+ new CollabToolbarContent(CollabToolbarState.UpToDate, "Collab", " You are up to date."),
+ new CollabToolbarContent(CollabToolbarState.Conflict, "CollabConflict", " Please fix your conflicts prior to publishing."),
+ new CollabToolbarContent(CollabToolbarState.OperationError, "CollabError", " Last operation failed. Please retry later."),
+ new CollabToolbarContent(CollabToolbarState.ServerHasChanges, "CollabPull", " Please update, there are server changes."),
+ new CollabToolbarContent(CollabToolbarState.FilesToPush, "CollabPush", " You have files to publish."),
+ new CollabToolbarContent(CollabToolbarState.InProgress, "CollabProgress", " Operation in progress."),
+ new CollabToolbarContent(CollabToolbarState.Disabled, "CollabNew", " Collab is disabled."),
+ new CollabToolbarContent(CollabToolbarState.Offline, "CollabNew", " Please check your network connection.")
+ };
+
+ Collab.instance.StateChanged += OnCollabStateChanged;
+ UnityConnect.instance.StateChanged += OnUnityConnectStateChanged;
+ UnityConnect.instance.UserStateChanged += OnUnityConnectUserStateChanged;
+ }
+
+ void OnUnityConnectUserStateChanged(UserInfo state)
+ {
+ UpdateCollabToolbarState();
+ }
+
+ void OnUnityConnectStateChanged(ConnectInfo state)
+ {
+ UpdateCollabToolbarState();
+ }
+
+ public override void OnGUI(Rect rect)
+ {
+ DoCollabDropDown(rect);
+ }
+
+ Rect GUIToScreenRect(Rect guiRect)
+ {
+ Vector2 screenPoint = GUIUtility.GUIToScreenPoint(new Vector2(guiRect.x, guiRect.y));
+ guiRect.x = screenPoint.x;
+ guiRect.y = screenPoint.y;
+ return guiRect;
+ }
+
+ void ShowPopup(Rect rect)
+ {
+ // window should be centered on the button
+ ReserveRight(kCollabButtonWidth / 2, ref rect);
+ ReserveBottom(5, ref rect);
+ // calculate screen rect before saving assets since it might open the AssetSaveDialog window
+ var screenRect = GUIToScreenRect(rect);
+ // save all the assets
+ AssetDatabase.SaveAssets();
+ if (Collab.ShowToolbarAtPosition != null && Collab.ShowToolbarAtPosition(screenRect))
+ {
+ GUIUtility.ExitGUI();
+ }
+ }
+
+ void DoCollabDropDown(Rect rect)
+ {
+ UpdateCollabToolbarState();
+ GUIStyle collabButtonStyle = "OffsetDropDown";
+ bool showPopup = Toolbar.requestShowCollabToolbar;
+ Toolbar.requestShowCollabToolbar = false;
+
+ bool enable = !EditorApplication.isPlaying;
+
+ using (new EditorGUI.DisabledScope(!enable))
+ {
+ bool animate = m_CollabToolbarState == CollabToolbarState.InProgress;
+
+ EditorGUIUtility.SetIconSize(new Vector2(12, 12));
+ if (GetCollabButton().OnGUI(rect, currentCollabContent, animate, collabButtonStyle))
+ {
+ showPopup = true;
+ }
+ EditorGUIUtility.SetIconSize(Vector2.zero);
+ }
+
+ if (m_CollabToolbarState == CollabToolbarState.Disabled)
+ return;
+
+ if (showPopup)
+ {
+ ShowPopup(rect);
+ }
+ }
+
+ public void OnCollabStateChanged(CollabInfo info)
+ {
+ UpdateCollabToolbarState();
+ }
+
+ public void UpdateCollabToolbarState()
+ {
+ var currentCollabState = CollabToolbarState.UpToDate;
+ bool networkAvailable = UnityConnect.instance.connectInfo.online && UnityConnect.instance.connectInfo.loggedIn;
+ m_DynamicTooltip = "";
+
+ if (UnityConnect.instance.isDisableCollabWindow)
+ {
+ currentCollabState = CollabToolbarState.Disabled;
+ }
+ else if (networkAvailable)
+ {
+ Collab collab = Collab.instance;
+ CollabInfo currentInfo = collab.collabInfo;
+ UnityErrorInfo errInfo;
+ bool error = false;
+ if (collab.GetError((UnityConnect.UnityErrorFilter.ByContext | UnityConnect.UnityErrorFilter.ByChild), out errInfo))
+ {
+ error = (errInfo.priority <= (int)UnityConnect.UnityErrorPriority.Error);
+ m_DynamicTooltip = errInfo.shortMsg;
+ }
+
+ if (!currentInfo.ready)
+ {
+ currentCollabState = CollabToolbarState.InProgress;
+ }
+ else if (error)
+ {
+ currentCollabState = CollabToolbarState.OperationError;
+ }
+ else if (currentInfo.inProgress)
+ {
+ currentCollabState = CollabToolbarState.InProgress;
+ }
+ else
+ {
+ bool collabEnable = Collab.instance.IsCollabEnabledForCurrentProject();
+
+ if (UnityConnect.instance.projectInfo.projectBound == false || !collabEnable)
+ {
+ currentCollabState = CollabToolbarState.NeedToEnableCollab;
+ }
+ else if (currentInfo.update)
+ {
+ currentCollabState = CollabToolbarState.ServerHasChanges;
+ }
+ else if (currentInfo.conflict)
+ {
+ currentCollabState = CollabToolbarState.Conflict;
+ }
+ else if (currentInfo.publish)
+ {
+ currentCollabState = CollabToolbarState.FilesToPush;
+ }
+ }
+ }
+ else
+ {
+ currentCollabState = CollabToolbarState.Offline;
+ }
+
+ if (Collab.IsToolbarVisible != null)
+ {
+ if (currentCollabState != m_CollabToolbarState ||
+ Collab.IsToolbarVisible() == m_ShowCollabTooltip)
+ {
+ m_CollabToolbarState = currentCollabState;
+ m_ShowCollabTooltip = !Collab.IsToolbarVisible();
+ Toolbar.RepaintToolbar();
+ }
+ }
+ }
+
+ void ReserveRight(float width, ref Rect pos)
+ {
+ pos.x += width;
+ }
+
+ void ReserveBottom(float height, ref Rect pos)
+ {
+ pos.y += height;
+ }
+
+ ButtonWithAnimatedIconRotation GetCollabButton()
+ {
+ if (m_CollabButton == null)
+ {
+ const int repaintsPerSecond = 20;
+ const float animSpeed = 500f;
+ const bool mouseDownButton = true;
+ m_CollabButton = new ButtonWithAnimatedIconRotation(() => (float)EditorApplication.timeSinceStartup * animSpeed, Toolbar.RepaintToolbar, repaintsPerSecond, mouseDownButton);
+ }
+
+ return m_CollabButton;
+ }
+
+ public void Dispose()
+ {
+ Collab.instance.StateChanged -= OnCollabStateChanged;
+ UnityConnect.instance.StateChanged -= OnUnityConnectStateChanged;
+ UnityConnect.instance.UserStateChanged -= OnUnityConnectUserStateChanged;
+
+ if (m_CollabButton != null)
+ m_CollabButton.Clear();
+ }
+ }
+} // namespace
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs
new file mode 100644
index 00000000..27938750
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs
@@ -0,0 +1,137 @@
+using UnityEngine;
+using UnityEditor.Collaboration;
+using UnityEditor.Web;
+using UnityEditor.Connect;
+
+namespace UnityEditor
+{
+ [InitializeOnLoad]
+ internal class WebViewStatic : ScriptableSingleton
+ {
+ [SerializeField]
+ WebView m_WebView;
+
+ static public WebView GetWebView()
+ {
+ return instance.m_WebView;
+ }
+
+ static public void SetWebView(WebView webView)
+ {
+ instance.m_WebView = webView;
+ }
+ }
+
+ [InitializeOnLoad]
+ internal class CollabToolbarWindow : WebViewEditorStaticWindow, IHasCustomMenu
+ {
+ internal override WebView webView
+ {
+ get {return WebViewStatic.GetWebView(); }
+ set {WebViewStatic.SetWebView(value); }
+ }
+
+ private const string kWindowName = "Unity Collab Toolbar";
+
+ private static long s_LastClosedTime;
+ private static CollabToolbarWindow s_CollabToolbarWindow;
+
+ public static bool s_ToolbarIsVisible = false;
+
+ const int kWindowWidth = 320;
+ const int kWindowHeight = 350;
+
+ public static void CloseToolbar()
+ {
+ foreach (CollabToolbarWindow window in Resources.FindObjectsOfTypeAll())
+ window.Close();
+ }
+
+ [MenuItem("Window/Asset Management/Collab Toolbar", false /*IsValidateFunction*/, 2, true /* IsInternalMenu */)]
+ public static CollabToolbarWindow ShowToolbarWindow()
+ {
+ //Create a new window if it does not exist
+ if (s_CollabToolbarWindow == null)
+ {
+ s_CollabToolbarWindow = GetWindow(false, kWindowName) as CollabToolbarWindow;
+ }
+
+ return s_CollabToolbarWindow;
+ }
+
+ [MenuItem("Window/Asset Management/Collab Toolbar", true /*IsValidateFunction*/)]
+ public static bool ValidateShowToolbarWindow()
+ {
+ return true;
+ }
+
+ public static bool IsVisible()
+ {
+ return s_ToolbarIsVisible;
+ }
+
+ public static bool ShowCenteredAtPosition(Rect buttonRect)
+ {
+ buttonRect.x -= kWindowWidth / 2;
+ // We could not use realtimeSinceStartUp since it is set to 0 when entering/exitting playmode, we assume an increasing time when comparing time.
+ long nowMilliSeconds = System.DateTime.Now.Ticks / System.TimeSpan.TicksPerMillisecond;
+ bool justClosed = nowMilliSeconds < s_LastClosedTime + 50;
+ if (!justClosed)
+ {
+ // Method may have been triggered programmatically, without a user event to consume.
+ if (Event.current.type != EventType.Layout)
+ {
+ Event.current.Use();
+ }
+ if (s_CollabToolbarWindow == null)
+ s_CollabToolbarWindow = CreateInstance() as CollabToolbarWindow;
+ var windowSize = new Vector2(kWindowWidth, kWindowHeight);
+ s_CollabToolbarWindow.initialOpenUrl = "file:///" + EditorApplication.userJavascriptPackagesPath + "unityeditor-collab-toolbar/dist/index.html";
+ s_CollabToolbarWindow.Init();
+ s_CollabToolbarWindow.ShowAsDropDown(buttonRect, windowSize);
+ s_CollabToolbarWindow.OnFocus();
+ return true;
+ }
+ return false;
+ }
+
+ // Receives HTML title
+ public void OnReceiveTitle(string title)
+ {
+ titleContent.text = title;
+ }
+
+ public new void OnInitScripting()
+ {
+ base.OnInitScripting();
+ }
+
+ public override void OnEnable()
+ {
+ minSize = new Vector2(kWindowWidth, kWindowHeight);
+ maxSize = new Vector2(kWindowWidth, kWindowHeight);
+ initialOpenUrl = "file:///" + EditorApplication.userJavascriptPackagesPath + "unityeditor-collab-toolbar/dist/index.html";
+ base.OnEnable();
+ s_ToolbarIsVisible = true;
+ }
+
+ internal new void OnDisable()
+ {
+ s_LastClosedTime = System.DateTime.Now.Ticks / System.TimeSpan.TicksPerMillisecond;
+ if (s_CollabToolbarWindow)
+ {
+ s_ToolbarIsVisible = false;
+ NotifyVisibility(s_ToolbarIsVisible);
+ }
+ s_CollabToolbarWindow = null;
+
+ base.OnDisable();
+ }
+
+ public new void OnDestroy()
+ {
+ OnLostFocus();
+ base.OnDestroy();
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs
new file mode 100644
index 00000000..91d500be
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs
@@ -0,0 +1,228 @@
+using System.Collections.Generic;
+using UnityEditor.Connect;
+using UnityEditor.Web;
+
+namespace UnityEditor.Collaboration
+{
+ internal class CollabHistoryPresenter
+ {
+ public const int ItemsPerPage = 5;
+ ICollabHistoryWindow m_Window;
+ ICollabHistoryItemFactory m_Factory;
+ IRevisionsService m_Service;
+ ConnectInfo m_ConnectState;
+ CollabInfo m_CollabState;
+ bool m_IsCollabError;
+ int m_TotalRevisions;
+ int m_CurrentPage;
+ int m_RequestedPage;
+ bool m_FetchInProgress;
+
+ BuildAccess m_BuildAccess;
+ string m_ProgressRevision;
+ public bool BuildServiceEnabled {get; set; }
+
+ public CollabHistoryPresenter(ICollabHistoryWindow window, ICollabHistoryItemFactory factory, IRevisionsService service)
+ {
+ m_Window = window;
+ m_Factory = factory;
+ m_Service = service;
+ m_CurrentPage = 0;
+ m_BuildAccess = new BuildAccess();
+ m_Service.FetchRevisionsCallback += OnFetchRevisions;
+ }
+
+ public void OnWindowEnabled()
+ {
+ UnityConnect.instance.StateChanged += OnConnectStateChanged;
+ Collab.instance.StateChanged += OnCollabStateChanged;
+ Collab.instance.RevisionUpdated += OnCollabRevisionUpdated;
+ Collab.instance.JobsCompleted += OnCollabJobsCompleted;
+ Collab.instance.ErrorOccurred += OnCollabError;
+ Collab.instance.ErrorCleared += OnCollabErrorCleared;
+ EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
+ m_ConnectState = UnityConnect.instance.GetConnectInfo();
+ m_CollabState = Collab.instance.GetCollabInfo();
+
+ m_Window.revisionActionsEnabled = !EditorApplication.isPlayingOrWillChangePlaymode;
+
+ // Setup window callbacks
+ m_Window.OnPageChangeAction = OnUpdatePage;
+ m_Window.OnUpdateAction = OnUpdate;
+ m_Window.OnRestoreAction = OnRestore;
+ m_Window.OnGoBackAction = OnGoBack;
+ m_Window.OnShowBuildAction = ShowBuildForCommit;
+ m_Window.OnShowServicesAction = ShowServicePage;
+ m_Window.itemsPerPage = ItemsPerPage;
+
+ // Initialize data
+ UpdateBuildServiceStatus();
+ var state = RecalculateState();
+ // Only try to load the page if we're ready
+ if (state == HistoryState.Ready)
+ OnUpdatePage(m_CurrentPage);
+ m_Window.UpdateState(state, true);
+ }
+
+ public void OnWindowDisabled()
+ {
+ UnityConnect.instance.StateChanged -= OnConnectStateChanged;
+ Collab.instance.StateChanged -= OnCollabStateChanged;
+ Collab.instance.RevisionUpdated -= OnCollabRevisionUpdated;
+ Collab.instance.JobsCompleted -= OnCollabJobsCompleted;
+ EditorApplication.playModeStateChanged -= OnPlayModeStateChanged;
+ }
+
+ private void OnConnectStateChanged(ConnectInfo state)
+ {
+ m_ConnectState = state;
+
+ m_Window.UpdateState(RecalculateState(), false);
+ }
+
+ private void OnCollabStateChanged(CollabInfo state)
+ {
+ // Sometimes a collab state change will trigger even though everything is the same
+ if (m_CollabState.Equals(state))
+ return;
+
+ if (m_CollabState.tip != state.tip)
+ OnUpdatePage(m_CurrentPage);
+
+ m_CollabState = state;
+ m_Window.UpdateState(RecalculateState(), false);
+ if (state.inProgress)
+ {
+ m_Window.inProgressRevision = m_ProgressRevision;
+ }
+ else
+ {
+ m_Window.inProgressRevision = null;
+ }
+ }
+
+ private void OnCollabRevisionUpdated(CollabInfo state)
+ {
+ OnUpdatePage(m_CurrentPage);
+ }
+
+ private void OnCollabJobsCompleted(CollabInfo state)
+ {
+ m_ProgressRevision = null;
+ }
+
+ private void OnCollabError()
+ {
+ m_IsCollabError = true;
+ m_Window.UpdateState(RecalculateState(), false);
+ }
+
+ private void OnCollabErrorCleared()
+ {
+ m_IsCollabError = false;
+ m_FetchInProgress = true;
+ m_Service.GetRevisions(m_CurrentPage * ItemsPerPage, ItemsPerPage);
+ m_Window.UpdateState(RecalculateState(), false);
+ }
+
+ private void OnPlayModeStateChanged(PlayModeStateChange stateChange)
+ {
+ // If entering play mode, disable
+ if (stateChange == PlayModeStateChange.ExitingEditMode ||
+ stateChange == PlayModeStateChange.EnteredPlayMode)
+ {
+ m_Window.revisionActionsEnabled = false;
+ }
+ // If exiting play mode, enable!
+ else if (stateChange == PlayModeStateChange.EnteredEditMode ||
+ stateChange == PlayModeStateChange.ExitingPlayMode)
+ {
+ m_Window.revisionActionsEnabled = true;
+ }
+ }
+
+ private HistoryState RecalculateState()
+ {
+ if (!m_ConnectState.online)
+ return HistoryState.Offline;
+ if (m_ConnectState.maintenance || m_CollabState.maintenance)
+ return HistoryState.Maintenance;
+ if (!m_ConnectState.loggedIn)
+ return HistoryState.LoggedOut;
+ if (!m_CollabState.seat)
+ return HistoryState.NoSeat;
+ if (!Collab.instance.IsCollabEnabledForCurrentProject())
+ return HistoryState.Disabled;
+ if (!Collab.instance.IsConnected() || !m_CollabState.ready || m_FetchInProgress)
+ return HistoryState.Waiting;
+ if (m_ConnectState.error || m_IsCollabError)
+ return HistoryState.Error;
+
+ return HistoryState.Ready;
+ }
+
+ // TODO: Eventually this can be a listener on the build service status
+ public void UpdateBuildServiceStatus()
+ {
+ foreach (var service in UnityConnectServiceCollection.instance.GetAllServiceInfos())
+ {
+ if (service.name.Equals("Build"))
+ {
+ BuildServiceEnabled = service.enabled;
+ }
+ }
+ }
+
+ public void ShowBuildForCommit(string revisionID)
+ {
+ m_BuildAccess.ShowBuildForCommit(revisionID);
+ }
+
+ public void ShowServicePage()
+ {
+ m_BuildAccess.ShowServicePage();
+ }
+
+ public void OnUpdatePage(int page)
+ {
+ m_FetchInProgress = true;
+ m_Service.GetRevisions(page * ItemsPerPage, ItemsPerPage);
+ m_Window.UpdateState(RecalculateState(), false);
+ m_RequestedPage = page;
+ }
+
+ private void OnFetchRevisions(RevisionsResult data)
+ {
+ m_FetchInProgress = false;
+ IEnumerable items = null;
+ if (data != null)
+ {
+ m_CurrentPage = m_RequestedPage;
+ m_TotalRevisions = data.RevisionsInRepo;
+ items = m_Factory.GenerateElements(data.Revisions, m_TotalRevisions, m_CurrentPage * ItemsPerPage, m_Service.tipRevision, m_Window.inProgressRevision, m_Window.revisionActionsEnabled, BuildServiceEnabled, m_Service.currentUser);
+ }
+
+ // State must be recalculated prior to inserting items
+ m_Window.UpdateState(RecalculateState(), false);
+ m_Window.UpdateRevisions(items, m_Service.tipRevision, m_TotalRevisions, m_CurrentPage);
+ }
+
+ private void OnRestore(string revisionId, bool updatetorevision)
+ {
+ m_ProgressRevision = revisionId;
+ Collab.instance.ResyncToRevision(revisionId);
+ }
+
+ private void OnGoBack(string revisionId, bool updatetorevision)
+ {
+ m_ProgressRevision = revisionId;
+ Collab.instance.GoBackToRevision(revisionId, false);
+ }
+
+ private void OnUpdate(string revisionId, bool updatetorevision)
+ {
+ m_ProgressRevision = revisionId;
+ Collab.instance.Update(revisionId, updatetorevision);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs
new file mode 100644
index 00000000..ac3754d2
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs
@@ -0,0 +1,53 @@
+using System;
+using UnityEditor;
+using UnityEditor.Collaboration;
+using UnityEngine;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+#endif
+
+namespace UnityEditor.Collaboration
+{
+ internal class BuildStatusButton : Button
+ {
+ private readonly string iconPrefix = "Icons/Collab.Build";
+ private readonly string iconSuffix = ".png";
+ Label labelElement = new Label();
+ Image iconElement = new Image() {name = "BuildIcon"};
+
+ public BuildStatusButton(Action clickEvent) : base(clickEvent)
+ {
+ iconElement.image = EditorGUIUtility.Load(iconPrefix + iconSuffix) as Texture;
+ labelElement.text = "Build Now";
+ Add(iconElement);
+ Add(labelElement);
+ }
+
+ public BuildStatusButton(Action clickEvent, BuildState state, int failures) : base(clickEvent)
+ {
+ switch (state)
+ {
+ case BuildState.InProgress:
+ iconElement.image = EditorGUIUtility.Load(iconPrefix + iconSuffix) as Texture;
+ labelElement.text = "In progress";
+ break;
+
+ case BuildState.Failed:
+ iconElement.image = EditorGUIUtility.Load(iconPrefix + "Failed" + iconSuffix) as Texture;
+ labelElement.text = failures + ((failures == 1) ? " failure" : " failures");
+ break;
+
+ case BuildState.Success:
+ iconElement.image = EditorGUIUtility.Load(iconPrefix + "Succeeded" + iconSuffix) as Texture;
+ labelElement.text = "success";
+ break;
+ }
+
+ Add(iconElement);
+ Add(labelElement);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs
new file mode 100644
index 00000000..e3bb05a6
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs
@@ -0,0 +1,78 @@
+using UnityEngine;
+using System.Collections.Generic;
+using UnityEditor.Connect;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+#endif
+
+
+namespace UnityEditor.Collaboration
+{
+ internal class CollabHistoryDropDown : VisualElement
+ {
+ private readonly VisualElement m_FilesContainer;
+ private readonly Label m_ToggleLabel;
+ private int m_ChangesTotal;
+ private string m_RevisionId;
+
+ public CollabHistoryDropDown(ICollection changes, int changesTotal, bool changesTruncated, string revisionId)
+ {
+ m_FilesContainer = new VisualElement();
+ m_ChangesTotal = changesTotal;
+ m_RevisionId = revisionId;
+
+ m_ToggleLabel = new Label(ToggleText(false));
+ m_ToggleLabel.AddManipulator(new Clickable(ToggleDropdown));
+ Add(m_ToggleLabel);
+
+ foreach (ChangeData change in changes)
+ {
+ m_FilesContainer.Add(new CollabHistoryDropDownItem(change.path, change.action));
+ }
+
+ if (changesTruncated)
+ {
+ m_FilesContainer.Add(new Button(ShowAllClick)
+ {
+ text = "Show all on dashboard"
+ });
+ }
+ }
+
+ private void ToggleDropdown()
+ {
+ if (Contains(m_FilesContainer))
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "CollapseAssets");
+ Remove(m_FilesContainer);
+ m_ToggleLabel.text = ToggleText(false);
+ }
+ else
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ExpandAssets");
+ Add(m_FilesContainer);
+ m_ToggleLabel.text = ToggleText(true);
+ }
+ }
+
+ private string ToggleText(bool open)
+ {
+ var icon = open ? "\u25bc" : "\u25b6";
+ var change = m_ChangesTotal == 1 ? "Change" : "Changes";
+ return string.Format("{0} {1} Asset {2}", icon, m_ChangesTotal, change);
+ }
+
+ private void ShowAllClick()
+ {
+ var host = UnityConnect.instance.GetConfigurationURL(CloudConfigUrl.CloudServicesDashboard);
+ var org = UnityConnect.instance.GetOrganizationId();
+ var proj = UnityConnect.instance.GetProjectGUID();
+ var url = string.Format("{0}/collab/orgs/{1}/projects/{2}/commits?commit={3}", host, org, proj, m_RevisionId);
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ShowAllOnDashboard");
+ Application.OpenURL(url);
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs
new file mode 100644
index 00000000..3ad43f23
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs
@@ -0,0 +1,53 @@
+using System;
+using System.IO;
+using System.Linq;
+using UnityEngine;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+#endif
+
+
+namespace UnityEditor.Collaboration
+{
+ internal class CollabHistoryDropDownItem : VisualElement
+ {
+ public CollabHistoryDropDownItem(string path, string action)
+ {
+ var fileName = Path.GetFileName(path);
+ var isFolder = Path.GetFileNameWithoutExtension(path).Equals(fileName);
+ var fileIcon = GetIconElement(action, fileName, isFolder);
+ var metaContainer = new VisualElement();
+ var fileNameLabel = new Label
+ {
+ name = "FileName",
+ text = fileName
+ };
+ var filePathLabel = new Label
+ {
+ name = "FilePath",
+ text = path
+ };
+ metaContainer.Add(fileNameLabel);
+ metaContainer.Add(filePathLabel);
+ Add(fileIcon);
+ Add(metaContainer);
+ }
+
+ private Image GetIconElement(string action, string fileName, bool isFolder)
+ {
+ var prefix = isFolder ? "Folder" : "File";
+ var actionName = action.First().ToString().ToUpper() + action.Substring(1);
+ // Use the same icon for renamed and moved files
+ actionName = actionName.Equals("Renamed") ? "Moved" : actionName;
+ var iconElement = new Image
+ {
+ name = "FileIcon",
+ image = EditorGUIUtility.LoadIcon("Icons/Collab." + prefix + actionName + ".png")
+ };
+ return iconElement;
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs
new file mode 100644
index 00000000..24e5d1dd
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs
@@ -0,0 +1,229 @@
+using System;
+using System.Linq;
+using System.Security.Cryptography;
+using UnityEditor.Connect;
+using UnityEditor.Web;
+using UnityEngine;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+using UnityEngine.Experimental.UIElements.StyleEnums;
+#endif
+
+namespace UnityEditor.Collaboration
+{
+ internal class CollabHistoryItem : VisualElement
+ {
+ public static RevisionAction s_OnRestore;
+ public static RevisionAction s_OnGoBack;
+ public static RevisionAction s_OnUpdate;
+ public static ShowBuildAction s_OnShowBuild;
+ public static Action s_OnShowServices;
+
+ private readonly string m_RevisionId;
+ private readonly string m_FullDescription;
+ private readonly DateTime m_TimeStamp;
+ private readonly Button m_Button;
+ private readonly HistoryProgressSpinner m_ProgressSpinner;
+ private VisualElement m_ActionsTray;
+ private VisualElement m_Details;
+ private Label m_Description;
+ private Label m_TimeAgo;
+ private readonly Button m_ExpandCollapseButton;
+ private bool m_Expanded;
+
+ private const int kMaxDescriptionChars = 500;
+
+ public bool RevisionActionsEnabled
+ {
+ set
+ {
+ m_Button.SetEnabled(value);
+ }
+ }
+
+ public DateTime timeStamp
+ {
+ get { return m_TimeStamp; }
+ }
+
+ public CollabHistoryItem(RevisionData data)
+ {
+ m_RevisionId = data.id;
+ m_TimeStamp = data.timeStamp;
+ name = "HistoryItem";
+ m_ActionsTray = new VisualElement {name = "HistoryItemActionsTray"};
+ m_ProgressSpinner = new HistoryProgressSpinner();
+ m_Details = new VisualElement {name = "HistoryDetail"};
+ var author = new Label(data.authorName) {name = "Author"};
+ m_TimeAgo = new Label(TimeAgo.GetString(m_TimeStamp));
+ m_FullDescription = data.comment;
+ var shouldTruncate = ShouldTruncateDescription(m_FullDescription);
+ if (shouldTruncate)
+ {
+ m_Description = new Label(GetTruncatedDescription(m_FullDescription));
+ }
+ else
+ {
+ m_Description = new Label(m_FullDescription);
+ }
+ m_Description.name = "RevisionDescription";
+ var dropdown = new CollabHistoryDropDown(data.changes, data.changesTotal, data.changesTruncated, data.id);
+ if (data.current)
+ {
+ m_Button = new Button(Restore) {name = "ActionButton", text = "Restore"};
+ }
+ else if (data.obtained)
+ {
+ m_Button = new Button(GoBackTo) {name = "ActionButton", text = "Go back to..."};
+ }
+ else
+ {
+ m_Button = new Button(UpdateTo) {name = "ActionButton", text = "Update"};
+ }
+ m_Button.SetEnabled(data.enabled);
+ m_ProgressSpinner.ProgressEnabled = data.inProgress;
+
+ m_ActionsTray.Add(m_ProgressSpinner);
+ m_ActionsTray.Add(m_Button);
+
+ m_Details.Add(author);
+ m_Details.Add(m_TimeAgo);
+ m_Details.Add(m_Description);
+
+ if (shouldTruncate)
+ {
+ m_ExpandCollapseButton = new Button(ToggleDescription) { name = "ToggleDescription", text = "Show More" };
+ m_Details.Add(m_ExpandCollapseButton);
+ }
+
+ if (data.buildState != BuildState.None)
+ {
+ BuildStatusButton buildButton;
+ if (data.buildState == BuildState.Configure)
+ buildButton = new BuildStatusButton(ShowServicePage);
+ else
+ buildButton = new BuildStatusButton(ShowBuildForCommit, data.buildState, data.buildFailures);
+
+ m_Details.Add(buildButton);
+ }
+
+ m_Details.Add(m_ActionsTray);
+ m_Details.Add(dropdown);
+
+ Add(m_Details);
+
+ this.schedule.Execute(UpdateTimeAgo).Every(1000 * 20);
+ }
+
+ public static void SetUpCallbacks(RevisionAction Restore, RevisionAction GoBack, RevisionAction Update)
+ {
+ s_OnRestore = Restore;
+ s_OnGoBack = GoBack;
+ s_OnUpdate = Update;
+ }
+
+ public void SetInProgressStatus(string revisionIdInProgress)
+ {
+ if (String.IsNullOrEmpty(revisionIdInProgress))
+ {
+ m_Button.SetEnabled(true);
+ m_ProgressSpinner.ProgressEnabled = false;
+ }
+ else
+ {
+ m_Button.SetEnabled(false);
+ if (m_RevisionId.Equals(revisionIdInProgress))
+ {
+ m_ProgressSpinner.ProgressEnabled = true;
+ }
+ }
+ }
+
+ void ShowBuildForCommit()
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ShowBuild");
+ if (s_OnShowBuild != null)
+ {
+ s_OnShowBuild(m_RevisionId);
+ }
+ }
+
+ void ShowServicePage()
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ShowServices");
+ if (s_OnShowServices != null)
+ {
+ s_OnShowServices();
+ }
+ }
+
+ void Restore()
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "Restore");
+ if (s_OnRestore != null)
+ {
+ s_OnRestore(m_RevisionId, false);
+ }
+ }
+
+ void GoBackTo()
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "GoBackTo");
+ if (s_OnGoBack != null)
+ {
+ s_OnGoBack(m_RevisionId, false);
+ }
+ }
+
+ void UpdateTo()
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "Update");
+ if (s_OnUpdate != null)
+ {
+ s_OnUpdate(m_RevisionId, true);
+ }
+ }
+
+ void UpdateTimeAgo()
+ {
+ m_TimeAgo.text = TimeAgo.GetString(m_TimeStamp);
+ }
+
+ bool ShouldTruncateDescription(string description)
+ {
+ return description.Contains(Environment.NewLine) || description.Length > kMaxDescriptionChars;
+ }
+
+ string GetTruncatedDescription(string description)
+ {
+ string result = description.Contains(Environment.NewLine) ?
+ description.Substring(0, description.IndexOf(Environment.NewLine)) : description;
+ if (result.Length > kMaxDescriptionChars)
+ {
+ result = result.Substring(0, kMaxDescriptionChars) + "...";
+ }
+ return result;
+ }
+
+ void ToggleDescription()
+ {
+ if (m_Expanded)
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "CollapseDescription");
+ m_Expanded = false;
+ m_ExpandCollapseButton.text = "Show More";
+ m_Description.text = GetTruncatedDescription(m_FullDescription);
+ }
+ else
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ExpandDescription");
+ m_Expanded = true;
+ m_ExpandCollapseButton.text = "Show Less";
+ m_Description.text = m_FullDescription;
+ }
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs
new file mode 100644
index 00000000..e7d7aa6c
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs
@@ -0,0 +1,121 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEditor.Collaboration;
+using UnityEngine;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+using UnityEngine.Experimental.UIElements.StyleEnums;
+#endif
+
+
+namespace UnityEditor.Collaboration
+{
+ internal class CollabHistoryItemFactory : ICollabHistoryItemFactory
+ {
+ const int k_MaxChangesPerRevision = 10;
+
+ public IEnumerable GenerateElements(IEnumerable revisions, int totalRevisions, int startIndex, string tipRev, string inProgressRevision, bool revisionActionsEnabled, bool buildServiceEnabled, string currentUser)
+ {
+ int index = startIndex;
+
+ foreach (var rev in revisions)
+ {
+ index++;
+ var current = rev.revisionID == tipRev;
+
+ // Calculate build status
+ BuildState buildState = BuildState.None;
+ int buildFailures = 0;
+ if (rev.buildStatuses != null && rev.buildStatuses.Length > 0)
+ {
+ bool inProgress = false;
+ foreach (CloudBuildStatus buildStatus in rev.buildStatuses)
+ {
+ if (buildStatus.complete)
+ {
+ if (!buildStatus.success)
+ {
+ buildFailures++;
+ }
+ }
+ else
+ {
+ inProgress = true;
+ break;
+ }
+ }
+
+ if (inProgress)
+ {
+ buildState = BuildState.InProgress;
+ }
+ else if (buildFailures > 0)
+ {
+ buildState = BuildState.Failed;
+ }
+ else
+ {
+ buildState = BuildState.Success;
+ }
+ }
+ else if (current && !buildServiceEnabled)
+ {
+ buildState = BuildState.Configure;
+ }
+
+ // Calculate the number of changes performed on files and folders (not meta files)
+ var paths = new Dictionary();
+ foreach (ChangeAction change in rev.entries)
+ {
+ if (change.path.EndsWith(".meta"))
+ {
+ var path = change.path.Substring(0, change.path.Length - 5);
+ // Actions taken on meta files are secondary to any actions taken on the main file
+ if (!paths.ContainsKey(path))
+ paths[path] = new ChangeData() {path = path, action = change.action};
+ }
+ else
+ {
+ paths[change.path] = new ChangeData() {path = change.path, action = change.action};
+ }
+ }
+
+ var displayName = (rev.author != currentUser) ? rev.authorName : "You";
+
+ var item = new RevisionData
+ {
+ id = rev.revisionID,
+ index = totalRevisions - index + 1,
+ timeStamp = TimeStampToDateTime(rev.timeStamp),
+ authorName = displayName,
+ comment = rev.comment,
+
+ obtained = rev.isObtained,
+ current = current,
+ inProgress = (rev.revisionID == inProgressRevision),
+ enabled = revisionActionsEnabled,
+
+ buildState = buildState,
+ buildFailures = buildFailures,
+
+ changes = paths.Values.Take(k_MaxChangesPerRevision).ToList(),
+ changesTotal = paths.Values.Count,
+ changesTruncated = paths.Values.Count > k_MaxChangesPerRevision,
+ };
+
+ yield return item;
+ }
+ }
+
+ private static DateTime TimeStampToDateTime(double timeStamp)
+ {
+ DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
+ dateTime = dateTime.AddSeconds(timeStamp).ToLocalTime();
+ return dateTime;
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs
new file mode 100644
index 00000000..2b8fe652
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs
@@ -0,0 +1,94 @@
+using System;
+using UnityEditor;
+using UnityEditor.Collaboration;
+using UnityEngine;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+#endif
+
+namespace UnityEditor.Collaboration
+{
+ internal class CollabHistoryRevisionLine : VisualElement
+ {
+ public CollabHistoryRevisionLine(int number)
+ {
+ AddNumber(number);
+ AddLine("topLine");
+ AddLine("bottomLine");
+ AddIndicator();
+ }
+
+ public CollabHistoryRevisionLine(DateTime date, bool isFullDateObtained)
+ {
+ AddLine(isFullDateObtained ? "obtainedDateLine" : "absentDateLine");
+ AddHeader(GetFormattedHeader(date));
+ AddToClassList("revisionLineHeader");
+ }
+
+ private void AddHeader(string content)
+ {
+ Add(new Label
+ {
+ text = content
+ });
+ }
+
+ private void AddIndicator()
+ {
+ Add(new VisualElement
+ {
+ name = "RevisionIndicator"
+ });
+ }
+
+ private void AddLine(string className = null)
+ {
+ var line = new VisualElement
+ {
+ name = "RevisionLine"
+ };
+ if (!String.IsNullOrEmpty(className))
+ {
+ line.AddToClassList(className);
+ }
+ Add(line);
+ }
+
+ private void AddNumber(int number)
+ {
+ Add(new Label
+ {
+ text = number.ToString(),
+ name = "RevisionIndex"
+ });
+ }
+
+ private string GetFormattedHeader(DateTime date)
+ {
+ string result = "Commits on " + date.ToString("MMM d");
+ switch (date.Day)
+ {
+ case 1:
+ case 21:
+ case 31:
+ result += "st";
+ break;
+ case 2:
+ case 22:
+ result += "nd";
+ break;
+ case 3:
+ case 23:
+ result += "rd";
+ break;
+ default:
+ result += "th";
+ break;
+ }
+ return result;
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs
new file mode 100644
index 00000000..fad3b824
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs
@@ -0,0 +1,69 @@
+using UnityEngine;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+#endif
+
+namespace UnityEditor.Collaboration
+{
+ internal class HistoryProgressSpinner : Image
+ {
+ private readonly Texture2D[] m_StatusWheelTextures;
+ private bool m_ProgressEnabled;
+ private IVisualElementScheduledItem m_Animation;
+
+ public bool ProgressEnabled
+ {
+ set
+ {
+ if (m_ProgressEnabled == value)
+ return;
+
+ m_ProgressEnabled = value;
+ visible = value;
+
+
+ if (value)
+ {
+ if (m_Animation == null)
+ {
+ m_Animation = this.schedule.Execute(AnimateProgress).Every(33);
+ }
+ else
+ {
+ m_Animation.Resume();
+ }
+ }
+ else
+ {
+ if (m_Animation != null)
+ {
+ m_Animation.Pause();
+ }
+ }
+ }
+ }
+
+ public HistoryProgressSpinner()
+ {
+ m_StatusWheelTextures = new Texture2D[12];
+ for (int i = 0; i < 12; i++)
+ {
+ m_StatusWheelTextures[i] = EditorGUIUtility.LoadIcon("WaitSpin" + i.ToString("00"));
+ }
+ image = m_StatusWheelTextures[0];
+ style.width = m_StatusWheelTextures[0].width;
+ style.height = m_StatusWheelTextures[0].height;
+ visible = false;
+ }
+
+ private void AnimateProgress(TimerState obj)
+ {
+ int frame = (int)Mathf.Repeat(Time.realtimeSinceStartup * 10, 11.99f);
+ image = m_StatusWheelTextures[frame];
+ MarkDirtyRepaint();
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs
new file mode 100644
index 00000000..03239a33
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using UnityEditor.Collaboration;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+#endif
+
+namespace UnityEditor.Collaboration
+{
+ internal interface ICollabHistoryItemFactory
+ {
+ IEnumerable GenerateElements(IEnumerable revsRevisions, int mTotalRevisions, int startIndex, string tipRev, string inProgressRevision, bool revisionActionsEnabled, bool buildServiceEnabled, string currentUser);
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs
new file mode 100644
index 00000000..472a70e7
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs
@@ -0,0 +1,192 @@
+using System;
+using System.Collections.Generic;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+using UnityEngine.Experimental.UIElements.StyleEnums;
+#endif
+
+namespace UnityEditor.Collaboration
+{
+ internal interface IPagerData
+ {
+ int curPage { get; }
+ int totalPages { get; }
+ PageChangeAction OnPageChanged { get; }
+ }
+
+ internal class PagerElement : VisualElement
+ {
+ IPagerData m_Data;
+ readonly Label m_PageText;
+ readonly Button m_DownButton;
+ readonly Button m_UpButton;
+
+ public PagerElement(IPagerData dataSource)
+ {
+ m_Data = dataSource;
+
+ this.style.flexDirection = FlexDirection.Row;
+ this.style.alignSelf = Align.Center;
+
+ Add(m_DownButton = new Button(OnPageDownClicked) {text = "\u25c5 Newer"});
+ m_DownButton.AddToClassList("PagerDown");
+
+ m_PageText = new Label();
+ m_PageText.AddToClassList("PagerLabel");
+ Add(m_PageText);
+
+ Add(m_UpButton = new Button(OnPageUpClicked) {text = "Older \u25bb"});
+ m_UpButton.AddToClassList("PagerUp");
+
+ UpdateControls();
+ }
+
+ void OnPageDownClicked()
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "NewerPage");
+ m_Data.OnPageChanged(m_Data.curPage - 1);
+ }
+
+ void OnPageUpClicked()
+ {
+ CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "OlderPage");
+ m_Data.OnPageChanged(m_Data.curPage + 1);
+ }
+
+ public void Refresh()
+ {
+ UpdateControls();
+ }
+
+ void UpdateControls()
+ {
+ var curPage = m_Data.curPage;
+ var totalPages = m_Data.totalPages;
+
+ m_PageText.text = (curPage + 1) + " / " + totalPages;
+ m_DownButton.SetEnabled(curPage > 0);
+ m_UpButton.SetEnabled(curPage < totalPages - 1);
+ }
+ }
+
+ internal enum PagerLocation
+ {
+ Top,
+ Bottom,
+ }
+
+ internal class PagedListView : VisualElement, IPagerData
+ {
+ public const int DefaultItemsPerPage = 10;
+
+ readonly VisualElement m_ItemContainer;
+ readonly PagerElement m_PagerTop, m_PagerBottom;
+ int m_PageSize = DefaultItemsPerPage;
+ IEnumerable m_Items;
+ int m_TotalItems;
+ int m_CurPage;
+
+ public int pageSize
+ {
+ set { m_PageSize = value; }
+ }
+
+ public IEnumerable items
+ {
+ set
+ {
+ m_Items = value;
+ LayoutItems();
+ }
+ }
+
+ public int totalItems
+ {
+ set
+ {
+ if (m_TotalItems == value)
+ return;
+
+ m_TotalItems = value;
+ UpdatePager();
+ }
+ }
+
+ public PageChangeAction OnPageChanged { get; set; }
+
+ public PagedListView()
+ {
+ m_PagerTop = new PagerElement(this);
+
+ m_ItemContainer = new VisualElement()
+ {
+ name = "PagerItems",
+ };
+ Add(m_ItemContainer);
+ m_Items = new List();
+
+ m_PagerBottom = new PagerElement(this);
+ }
+
+ void LayoutItems()
+ {
+ m_ItemContainer.Clear();
+ foreach (var item in m_Items)
+ {
+ m_ItemContainer.Add(item);
+ }
+ }
+
+ void UpdatePager()
+ {
+ if (m_PagerTop.parent != this && totalPages > 1 && curPage > 0)
+ Insert(0, m_PagerTop);
+ if (m_PagerTop.parent == this && (totalPages <= 1 || curPage == 0))
+ Remove(m_PagerTop);
+
+ if (m_PagerBottom.parent != this && totalPages > 1)
+ Add(m_PagerBottom);
+ if (m_PagerBottom.parent == this && totalPages <= 1)
+ Remove(m_PagerBottom);
+
+ m_PagerTop.Refresh();
+ m_PagerBottom.Refresh();
+ }
+
+ int pageCount
+ {
+ get
+ {
+ var pages = m_TotalItems / m_PageSize;
+ if (m_TotalItems % m_PageSize > 0)
+ pages++;
+
+ return pages;
+ }
+ }
+
+ public int curPage
+ {
+ get { return m_CurPage; }
+ set
+ {
+ m_CurPage = value;
+ UpdatePager();
+ }
+ }
+
+ public int totalPages
+ {
+ get
+ {
+ var extraPage = 0;
+ if (m_TotalItems % m_PageSize > 0)
+ extraPage = 1;
+ return m_TotalItems / m_PageSize + extraPage;
+ }
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs
new file mode 100644
index 00000000..9b50e7a5
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs
@@ -0,0 +1,88 @@
+using System;
+using UnityEditor;
+using UnityEngine;
+
+#if UNITY_2019_1_OR_NEWER
+using UnityEngine.UIElements;
+#else
+using UnityEngine.Experimental.UIElements;
+using UnityEngine.Experimental.UIElements.StyleEnums;
+#endif
+
+namespace UnityEditor.Collaboration
+{
+ internal class StatusView : VisualElement
+ {
+ Image m_Image;
+ Label m_Message;
+ Button m_Button;
+ Action m_Callback;
+
+ public Texture icon
+ {
+ get { return m_Image.image; }
+ set
+ {
+ m_Image.image = value;
+ m_Image.visible = value != null;
+ // Until "display: hidden" is added, this is the only way to hide an element
+ m_Image.style.height = value != null ? 150 : 0;
+ }
+ }
+
+ public string message
+ {
+ get { return m_Message.text; }
+ set
+ {
+ m_Message.text = value;
+ m_Message.visible = value != null;
+ }
+ }
+
+ public string buttonText
+ {
+ get { return m_Button.text; }
+ set
+ {
+ m_Button.text = value;
+ UpdateButton();
+ }
+ }
+
+ public Action callback
+ {
+ get { return m_Callback; }
+ set
+ {
+ m_Callback = value;
+ UpdateButton();
+ }
+ }
+
+ public StatusView()
+ {
+ name = "StatusView";
+
+ this.StretchToParentSize();
+
+ m_Image = new Image() { name = "StatusIcon", visible = false, style = { height = 0f }};
+ m_Message = new Label() { name = "StatusMessage", visible = false};
+ m_Button = new Button(InternalCallaback) { name = "StatusButton", visible = false};
+
+ Add(m_Image);
+ Add(m_Message);
+ Add(m_Button);
+ }
+
+ private void UpdateButton()
+ {
+ m_Button.visible = m_Button.text != null && m_Callback != null;
+ }
+
+ private void InternalCallaback()
+ {
+ m_Callback();
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss
new file mode 100644
index 00000000..b20f08e9
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss
@@ -0,0 +1,259 @@
+.unity-button {
+ min-height:0;
+ -unity-text-align:middle-center;
+ margin-left:4px;
+ margin-top:3px;
+ margin-right:4px;
+ margin-bottom:3px;
+ border-left-width:6px;
+ border-top-width:4px;
+ border-right-width:6px;
+ border-bottom-width:4px;
+ padding-left:6px;
+ padding-top:2px;
+ padding-right:6px;
+ padding-bottom:3px;
+}
+
+.unity-label {
+ overflow: hidden;
+ margin-left:4px;
+ margin-top:2px;
+ margin-right:4px;
+ margin-bottom:2px;
+ padding-left:2px;
+ padding-top:1px;
+ min-height: 0;
+}
+
+#HistoryContainer {
+ flex: 1 0 0;
+}
+
+#HistoryItem {
+ flex: 1 0 0;
+ flex-direction: row;
+}
+
+#HistoryDetail {
+ margin-top: 10px;
+ margin-left: 10px;
+ margin-bottom: 10px;
+ margin-right: 10px;
+ padding-top: 4px;
+ flex: 1 0 0;
+}
+
+#Author {
+ -unity-font-style: bold;
+ font-size: 12px;
+}
+
+#HistoryDetail > Button {
+ align-self: flex-end;
+}
+
+CollabHistoryRevisionLine {
+ width: 40px;
+}
+
+#RevisionLine {
+ flex: 1 0 0;
+ margin-left: 35px;
+ width: 1.5px;
+}
+
+#RevisionLine.topLine {
+ height: 20px;
+ flex: 0 0 auto;
+}
+
+#RevisionLine.absentDateLine {
+ background-color: #797676;
+}
+
+.absentRevision #RevisionLine {
+ background-color: #797676;
+}
+
+.currentRevision #RevisionLine.topLine {
+ background-color: #797676;
+}
+
+#RevisionIndex {
+ position: absolute;
+ min-width: 23px;
+ -unity-text-align: middle-right;
+ top: 15.8px;
+ font-size: 9px;
+}
+
+#RevisionIndicator {
+ position: absolute;
+ background-color: #000;
+ border-radius: 3px;
+ width: 8px;
+ height: 8px;
+ border-bottom-width: 2px;
+ border-left-width: 2px;
+ border-right-width: 2px;
+ border-top-width: 2px;
+ top: 20px;
+ left: 32px;
+}
+
+.revisionLineHeader {
+ width: 200px;
+ height: 20px;
+}
+
+.revisionLineHeader > .unity-label {
+ position: absolute;
+ margin-left: 47px;
+ margin-top: 3px;
+}
+
+#PagerItems {
+ flex-direction: column;
+}
+
+PagerElement > .unity-label {
+ margin-top: 8px;
+}
+
+.absentRevision #RevisionIndicator {
+ border-color: #797676;
+}
+
+.absentRevision #RevisionIndex {
+ color: #797676;
+}
+
+.currentRevision #HistoryDetail {
+ border-top-width: 2px;
+}
+
+#HistoryItem #RevisionDescription {
+ white-space: normal;
+}
+
+#HistoryItem #ToggleDescription {
+ align-self: flex-start;
+ padding-top: 0;
+ padding-left: 0;
+ padding-right: 0;
+ padding-bottom: 2px;
+}
+
+#HistoryItem #ActionButton {
+ position: absolute;
+ right: 0;
+}
+
+#HistoryItem #BuildIcon {
+ width: 16px;
+ height: 13px;
+}
+
+#HistoryItemActionsTray {
+ flex: 1 0 0;
+ flex-direction: row;
+ align-items: center;
+ height: 38px;
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+CollabHistoryDropDown {
+ border-top-width: 1px;
+}
+
+CollabHistoryDropDown > .unity-label {
+ padding-top: 10px;
+ padding-bottom: 10px;
+}
+
+CollabHistoryDropDownItem {
+ flex-direction: row;
+ border-top-width: 1px;
+ overflow: hidden;
+}
+
+#FileIcon {
+ align-self: center;
+ width: 26px;
+ height: 26px;
+}
+
+#FileName {
+ -unity-font-style: bold;
+ padding-bottom: 0;
+ margin-bottom: 0;
+}
+
+#FileIcon {
+ padding-top: 0;
+ margin-top: 0;
+}
+
+#ErrorBar {
+ height: 24px;
+ background-color: #ff0000;
+ color: #000;
+ font-size: 12px;
+}
+
+#ErrorBar > #CloseButton {
+ position: absolute;
+ right: 0;
+ top: 0;
+ width: 24px;
+ height: 24px;
+ color: #000;
+ font-size: 18px;
+ -unity-font-style: bold;
+}
+
+#StatusView {
+ flex-direction: column;
+ justify-content: center;
+ align-self: center;
+ align-items: center;
+ flex: 1 0 0;
+}
+
+#StatusView > #StatusIcon {
+ width: 115px;
+ height: 150px;
+}
+
+#StatusView > #StatusMessage {
+ font-size: 22px;
+ width: 230px;
+ white-space: normal;
+ -unity-text-align: middle-center;
+}
+
+#StatusView > #StatusButton {
+ font-size: 12px;
+ margin-top: 20px;
+ background-image: none;
+ width: 108px;
+ height: 29px;
+}
+
+BuildStatusButton.unity-button {
+ flex-direction: row;
+ align-self: flex-end;
+ align-items: center;
+ margin-right: 10px;
+ padding-left:0;
+ padding-top:0;
+ padding-right:0;
+ padding-bottom:0;
+}
+
+BuildStatusButton.unity-button .unity-label {
+ padding-left: 2px;
+}
+
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss
new file mode 100644
index 00000000..de436f89
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss
@@ -0,0 +1,86 @@
+#HistoryContainer {
+ background-color: #292929;
+}
+
+.obtainedRevision #HistoryDetail {
+ background-color: #333;
+}
+
+.absentRevision #HistoryDetail {
+ background-color: #595959;
+}
+
+#StatusView {
+ background-color: #292929;
+}
+
+#StatusView > #StatusMessage {
+ color: #959995;
+}
+
+BuildStatusButton.unity-button {
+ color: #B4B4B4;
+ background-image: resource("Builtin Skins/DarkSkin/Images/btn.png");
+}
+
+BuildStatusButton.unity-button:hover {
+ color: #FFF;
+}
+
+BuildStatusButton.unity-button:hover:active {
+ background-image: resource("Builtin Skins/DarkSkin/Images/btn act.png");
+}
+
+BuildStatusButton.unity-button:checked {
+ color: #F0F0F0;
+ background-image: resource("Builtin Skins/DarkSkin/Images/btn on.png");
+}
+
+BuildStatusButton.unity-button:hover:checked {
+ color: #FFF;
+}
+
+BuildStatusButton.unity-button:hover:active:checked {
+ background-image: resource("Builtin Skins/DarkSkin/Images/btn onact.png");
+}
+
+BuildStatusButton.unity-button:focus:checked {
+ background-image: resource("Builtin Skins/DarkSkin/Images/btn on focus.png");
+}
+
+CollabHistoryDropDown {
+ border-color: #292929;
+}
+
+CollabHistoryDropDownItem {
+ border-color: #292929;
+}
+
+#RevisionLine.obtainedDateLine {
+ background-color: #0cb4cc;
+}
+
+.obtainedRevision #RevisionLine {
+ background-color: #0cb4cc;
+}
+
+#RevisionIndex {
+ color: #0cb4cc;
+}
+
+#RevisionIndicator {
+ border-color: #0cb4cc;
+}
+
+.currentRevision #RevisionIndicator {
+ background-color: #0cb4cc;
+}
+
+.currentRevision #HistoryDetail {
+ border-color: #0cb4cc;
+}
+
+#StatusView > #StatusButton {
+ background-color: #0cb4cc;
+ border-color: #0cb4cc;
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss
new file mode 100644
index 00000000..3f9b85f3
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss
@@ -0,0 +1,86 @@
+#HistoryContainer {
+ background-color: #a2a2a2;
+}
+
+.obtainedRevision #HistoryDetail {
+ background-color: #c2c2c2;
+}
+
+.absentRevision #HistoryDetail {
+ background-color: #dedede;
+}
+
+#StatusView {
+ background-color: #a2a2a3;
+}
+
+#StatusView > #StatusMessage {
+ color: #000;
+}
+
+BuildStatusButton.unity-button {
+ color: #111;
+ background-image: resource("Builtin Skins/LightSkin/Images/btn.png");
+}
+
+BuildStatusButton.unity-button:hover {
+ color: #000;
+}
+
+BuildStatusButton.unity-button:hover:active {
+ background-image: resource("Builtin Skins/LightSkin/Images/btn act.png");
+}
+
+BuildStatusButton.unity-button:checked {
+ color: #F0F0F0;
+ background-image: resource("Builtin Skins/LightSkin/Images/btn on.png");
+}
+
+BuildStatusButton.unity-button:hover:checked {
+ color: #000;
+}
+
+BuildStatusButton.unity-button:hover:active:checked {
+ background-image: resource("Builtin Skins/LightSkin/Images/btn onact.png");
+}
+
+BuildStatusButton.unity-button:focus:checked {
+ background-image: resource("Builtin Skins/LightSkin/Images/btn on focus.png");
+}
+
+CollabHistoryDropDown {
+ border-color: #a2a2a2;
+}
+
+CollabHistoryDropDownItem {
+ border-color: #a2a2a2;
+}
+
+#RevisionLine.obtainedDateLine {
+ background-color: #018d98;
+}
+
+.obtainedRevision #RevisionLine {
+ background-color: #018d98;
+}
+
+#RevisionIndex {
+ color: #018d98;
+}
+
+#RevisionIndicator {
+ border-color: #018d98;
+}
+
+.currentRevision #RevisionIndicator {
+ background-color: #018d98;
+}
+
+.currentRevision #HistoryDetail {
+ border-color: #018d98;
+}
+
+#StatusView > #StatusButton {
+ background-color: #018d98;
+ border-color: #018d98;
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef
new file mode 100644
index 00000000..66511e1d
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef
@@ -0,0 +1,7 @@
+{
+ "name": "Unity.CollabProxy.Editor",
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": []
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md
new file mode 100644
index 00000000..31bde4e4
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md
@@ -0,0 +1,31 @@
+**Unity Companion Package License v1.0 ("_License_")**
+
+Copyright © 2017 Unity Technologies ApS ("**_Unity_**")
+
+Unity hereby grants to you a worldwide, non-exclusive, no-charge, and royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute the software that is made available with this License ("**_Software_**"), subject to the following terms and conditions:
+
+1. *Unity Companion Use Only*. Exercise of the license granted herein is limited to exercise for the creation, use, and/or distribution of applications, software, or other content pursuant to a valid Unity development engine software license ("**_Engine License_**"). That means while use of the Software is not limited to use in the software licensed under the Engine License, the Software may not be used for any purpose other than the creation, use, and/or distribution of Engine License-dependent applications, software, or other content. No other exercise of the license granted herein is permitted.
+
+1. *No Modification of Engine License*. Neither this License nor any exercise of the license granted herein modifies the Engine License in any way.
+
+1. *Ownership & Grant Back to You*.
+
+ 3.1. You own your content. In this License, "derivative works" means derivatives of the Software itself--works derived only from the Software by you under this License (for example, modifying the code of the Software itself to improve its efficacy); “derivative works” of the Software do not include, for example, games, apps, or content that you create using the Software. You keep all right, title, and interest to your own content.
+
+ 3.2. Unity owns its content. While you keep all right, title, and interest to your own content per the above, as between Unity and you, Unity will own all right, title, and interest to all intellectual property rights (including patent, trademark, and copyright) in the Software and derivative works of the Software, and you hereby assign and agree to assign all such rights in those derivative works to Unity.
+
+ 3.3. You have a license to those derivative works. Subject to this License, Unity grants to you the same worldwide, non-exclusive, no-charge, and royalty-free copyright license to derivative works of the Software you create as is granted to you for the Software under this License.
+
+1. *Trademarks*. You are not granted any right or license under this License to use any trademarks, service marks, trade names, products names, or branding of Unity or its affiliates ("**_Trademarks_**"). Descriptive uses of Trademarks are permitted; see, for example, Unity’s Branding Usage Guidelines at [https://unity3d.com/public-relations/brand](https://unity3d.com/public-relations/brand).
+
+1. *Notices & Third-Party Rights*. This License, including the copyright notice above, must be provided in all substantial portions of the Software and derivative works thereof (or, if that is impracticable, in any other location where such notices are customarily placed). Further, if the Software is accompanied by a Unity "third-party notices" or similar file, you acknowledge and agree that software identified in that file is governed by those separate license terms.
+
+1. *DISCLAIMER, LIMITATION OF LIABILITY*. THE SOFTWARE AND ANY DERIVATIVE WORKS THEREOF IS PROVIDED ON AN "AS IS" BASIS, AND IS PROVIDED WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND/OR NONINFRINGEMENT. IN NO EVENT SHALL ANY COPYRIGHT HOLDER OR AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES (WHETHER DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL, INCLUDING PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS, AND BUSINESS INTERRUPTION), OR OTHER LIABILITY WHATSOEVER, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM OR OUT OF, OR IN CONNECTION WITH, THE SOFTWARE OR ANY DERIVATIVE WORKS THEREOF OR THE USE OF OR OTHER DEALINGS IN SAME, EVEN WHERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+1. *USE IS ACCEPTANCE and License Versions*. Your receipt and use of the Software constitutes your acceptance of this License and its terms and conditions. Software released by Unity under this License may be modified or updated and the License with it; upon any such modification or update, you will comply with the terms of the updated License for any use of any of the Software under the updated License.
+
+1. *Use in Compliance with Law and Termination*. Your exercise of the license granted herein will at all times be in compliance with applicable law and will not infringe any proprietary rights (including intellectual property rights); this License will terminate immediately on any breach by you of this License.
+
+1. *Severability*. If any provision of this License is held to be unenforceable or invalid, that provision will be enforced to the maximum extent possible and the other provisions will remain in full force and effect.
+
+1. *Governing Law and Venue*. This License is governed by and construed in accordance with the laws of Denmark, except for its conflict of laws rules; the United Nations Convention on Contracts for the International Sale of Goods will not apply. If you reside (or your principal place of business is) within the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the state and federal courts located in San Francisco County, California concerning any dispute arising out of this License ("**_Dispute_**"). If you reside (or your principal place of business is) outside the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the courts located in Copenhagen, Denmark concerning any Dispute.
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md
new file mode 100644
index 00000000..5cfbd88a
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md
@@ -0,0 +1,16 @@
+# Collab Proxy UPM Package
+This is the packaged version of Collab, currently limited to containing the History and Toolbar windows, along with supporting classes.
+
+## Development
+Check this repository out in your {$PROJECT}/Packages/ folder, under the name com.unity.collab-proxy. The classes will be built by Unity.
+
+## Testing
+In order to run the tests, you will need to add this project to the testables key in your manifest.json - once you have done this, the tests will be picked up by the Unity Test Runner window.
+
+## Building
+You may build this project using msbuild. The commands to do so can be seen under .gitlab-ci.yml.
+
+## Deploying
+Gitlab will automatically build your project when you deploy. You can download the resulting artifact, which will be a dll, and place it in your Editor/bin/ folder. Open the package in Unity to generate the meta files, and then you will be able to publish.
+
+We're currently looking into a way to avoid this manual process.
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs
new file mode 100644
index 00000000..ba79a204
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs
@@ -0,0 +1,583 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEditor.Collaboration;
+using UnityEngine.TestTools;
+using NUnit.Framework;
+
+namespace UnityEditor.Collaboration.Tests
+{
+ [TestFixture]
+ internal class HistoryTests
+ {
+ private TestHistoryWindow _window;
+ private TestRevisionsService _service;
+ private CollabHistoryPresenter _presenter;
+
+ [SetUp]
+ public void SetUp()
+ {
+ _window = new TestHistoryWindow();
+ _service = new TestRevisionsService();
+ _presenter = new CollabHistoryPresenter(_window, new CollabHistoryItemFactory(), _service);
+ }
+
+ [TearDown]
+ public void TearDown()
+ {
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__PropagatesRevisionResult()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(authorName: "authorName", comment: "comment", revisionID: "revisionID"),
+ }
+ };
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual("revisionID", item.id);
+ Assert.AreEqual("authorName", item.authorName);
+ Assert.AreEqual("comment", item.comment);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__RevisionNumberingIsInOrder()
+ {
+ _service.result = new RevisionsResult()
+ {
+ RevisionsInRepo = 4,
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0"),
+ new Revision(revisionID: "1"),
+ new Revision(revisionID: "2"),
+ new Revision(revisionID: "3"),
+ }
+ };
+
+ _presenter.OnUpdatePage(0);
+ var items = _window.items.ToArray();
+
+ Assert.AreEqual(4, items[0].index);
+ Assert.AreEqual(3, items[1].index);
+ Assert.AreEqual(2, items[2].index);
+ Assert.AreEqual(1, items[3].index);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__RevisionNumberingChangesForMorePages()
+ {
+ _service.result = new RevisionsResult()
+ {
+ RevisionsInRepo = 12,
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0"),
+ new Revision(revisionID: "1"),
+ new Revision(revisionID: "2"),
+ new Revision(revisionID: "3"),
+ new Revision(revisionID: "4"),
+ }
+ };
+
+ _presenter.OnUpdatePage(1);
+ var items = _window.items.ToArray();
+
+ Assert.AreEqual(12, items[0].index);
+ Assert.AreEqual(11, items[1].index);
+ Assert.AreEqual(10, items[2].index);
+ Assert.AreEqual(9, items[3].index);
+ Assert.AreEqual(8, items[4].index);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__ObtainedIsCalculated()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(isObtained: false),
+ new Revision(isObtained: true),
+ }
+ };
+
+ _presenter.OnUpdatePage(0);
+ var items = _window.items.ToArray();
+
+ Assert.IsFalse(items[0].obtained);
+ Assert.IsTrue(items[1].obtained);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__CurrentIsCalculated()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "1"),
+ new Revision(revisionID: "2"),
+ new Revision(revisionID: "3"),
+ }
+ };
+ _service.tipRevision = "2";
+
+ _presenter.OnUpdatePage(0);
+ var items = _window.items.ToArray();
+
+ Assert.AreEqual(false, items[0].current);
+ Assert.AreEqual(true, items[1].current);
+ Assert.AreEqual(false, items[2].current);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__InProgressIsCalculated()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "1"),
+ new Revision(revisionID: "2"),
+ new Revision(revisionID: "3"),
+ }
+ };
+ _window.inProgressRevision = "2";
+
+ _presenter.OnUpdatePage(0);
+ var items = _window.items.ToArray();
+
+ Assert.IsFalse(items[0].inProgress);
+ Assert.IsTrue(items[1].inProgress);
+ Assert.IsFalse(items[2].inProgress);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__EnabledIsCalculated()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0"),
+ }
+ };
+ _window.revisionActionsEnabled = true;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(true, item.enabled);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__DisabledIsCalculated()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0"),
+ }
+ };
+ _window.revisionActionsEnabled = false;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(false, item.enabled);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasNoneWhenNotTip()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "1"),
+ }
+ };
+ _service.tipRevision = "0";
+ _presenter.BuildServiceEnabled = false;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(BuildState.None, item.buildState);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__BuildStateTipHasNoneWhenEnabled()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0"),
+ }
+ };
+ _service.tipRevision = "0";
+ _presenter.BuildServiceEnabled = true;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(BuildState.None, item.buildState);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasConfigureWhenTip()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0"),
+ }
+ };
+ _service.tipRevision = "0";
+ _presenter.BuildServiceEnabled = false;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(BuildState.Configure, item.buildState);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasConfigureWhenZeroBuildStatus()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0"),
+ }
+ };
+ _service.tipRevision = "0";
+ _presenter.BuildServiceEnabled = false;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(BuildState.Configure, item.buildState);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasNoneWhenZeroBuildStatuses()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0"),
+ }
+ };
+ _service.tipRevision = "0";
+ _presenter.BuildServiceEnabled = true;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(BuildState.None, item.buildState);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasSuccessWhenCompleteAndSucceeded()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision
+ (
+ revisionID: "0",
+ buildStatuses: new CloudBuildStatus[1]
+ {
+ new CloudBuildStatus(complete: true, success: true),
+ }
+ ),
+ }
+ };
+ _service.tipRevision = "0";
+ _presenter.BuildServiceEnabled = true;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(BuildState.Success, item.buildState);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasInProgress()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision
+ (
+ revisionID: "0",
+ buildStatuses: new CloudBuildStatus[1]
+ {
+ new CloudBuildStatus(complete: false),
+ }
+ ),
+ }
+ };
+ _service.tipRevision = "0";
+ _presenter.BuildServiceEnabled = true;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(BuildState.InProgress, item.buildState);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasFailure()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision
+ (
+ revisionID: "0",
+ buildStatuses: new CloudBuildStatus[1]
+ {
+ new CloudBuildStatus(complete: true, success: false),
+ }
+ ),
+ }
+ };
+ _service.tipRevision = "0";
+ _presenter.BuildServiceEnabled = true;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(BuildState.Failed, item.buildState);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasFailureWhenAnyBuildsFail()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision
+ (
+ revisionID: "0",
+ buildStatuses: new CloudBuildStatus[3]
+ {
+ new CloudBuildStatus(complete: true, success: false),
+ new CloudBuildStatus(complete: true, success: false),
+ new CloudBuildStatus(complete: true, success: true),
+ }
+ ),
+ }
+ };
+ _service.tipRevision = "0";
+ _presenter.BuildServiceEnabled = true;
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(BuildState.Failed, item.buildState);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__ChangesPropagateThrough()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0", entries: GenerateChangeActions(3)),
+ }
+ };
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+ var changes = item.changes.ToList();
+
+ Assert.AreEqual("Path0", changes[0].path);
+ Assert.AreEqual("Path1", changes[1].path);
+ Assert.AreEqual("Path2", changes[2].path);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__ChangesTotalIsCalculated()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0", entries: GenerateChangeActions(3)),
+ }
+ };
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(3, item.changes.Count);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__ChangesTruncatedIsCalculated()
+ {
+ for (var i = 0; i < 20; i++)
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(revisionID: "0", entries: GenerateChangeActions(i)),
+ }
+ };
+
+ _presenter.OnUpdatePage(0);
+ var item = _window.items.First();
+
+ Assert.AreEqual(i > 10, item.changesTruncated);
+ }
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__OnlyKeeps10ChangeActions()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision(authorName: "Test", author: "test", entries: GenerateChangeActions(12)),
+ }
+ };
+
+ _presenter.OnUpdatePage(1);
+ var item = _window.items.First();
+
+ Assert.AreEqual(10, item.changes.Count);
+ Assert.AreEqual(12, item.changesTotal);
+ Assert.AreEqual(true, item.changesTruncated);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__DeduplicatesMetaFiles()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision
+ (
+ authorName: "Test",
+ author: "test",
+ revisionID: "",
+ entries: new ChangeAction[2]
+ {
+ new ChangeAction(path: "Path1", action: "Action1"),
+ new ChangeAction(path: "Path1.meta", action: "Action1"),
+ }
+ ),
+ }
+ };
+
+ _presenter.OnUpdatePage(1);
+ var item = _window.items.First();
+
+ Assert.AreEqual(1, item.changes.Count);
+ Assert.AreEqual(1, item.changesTotal);
+ Assert.AreEqual("Path1", item.changes.First().path);
+ }
+
+ [Test]
+ public void CollabHistoryPresenter_OnUpdatePage__FolderMetaFilesAreCounted()
+ {
+ _service.result = new RevisionsResult()
+ {
+ Revisions = new List()
+ {
+ new Revision
+ (
+ authorName: "Test",
+ author: "test",
+ entries: new ChangeAction[1]
+ {
+ new ChangeAction(path: "Folder1.meta", action: "Action1"),
+ }
+ ),
+ }
+ };
+
+ _presenter.OnUpdatePage(1);
+ var item = _window.items.First();
+
+ Assert.AreEqual(1, item.changes.Count);
+ Assert.AreEqual(1, item.changesTotal);
+ Assert.AreEqual("Folder1", item.changes.First().path);
+ }
+
+ private static ChangeAction[] GenerateChangeActions(int count)
+ {
+ var entries = new ChangeAction[count];
+ for (var i = 0; i < count; i++)
+ entries[i] = new ChangeAction(path: "Path" + i, action: "Action" + i);
+ return entries;
+ }
+ }
+
+ internal class TestRevisionsService : IRevisionsService
+ {
+ public RevisionsResult result;
+ public event RevisionsDelegate FetchRevisionsCallback;
+
+ public string tipRevision { get; set; }
+ public string currentUser { get; set; }
+
+ public void GetRevisions(int offset, int count)
+ {
+ if(FetchRevisionsCallback != null)
+ {
+ FetchRevisionsCallback(result);
+ }
+ }
+ }
+
+ internal class TestHistoryWindow : ICollabHistoryWindow
+ {
+ public IEnumerable items;
+
+ public bool revisionActionsEnabled { get; set; }
+ public int itemsPerPage { get; set; }
+ public string errMessage { get; set; }
+ public string inProgressRevision { get; set; }
+ public PageChangeAction OnPageChangeAction { get; set; }
+ public RevisionAction OnGoBackAction { get; set; }
+ public RevisionAction OnUpdateAction { get; set; }
+ public RevisionAction OnRestoreAction { get; set; }
+ public ShowBuildAction OnShowBuildAction { get; set; }
+ public Action OnShowServicesAction { get; set; }
+
+ public void UpdateState(HistoryState state, bool force)
+ {
+ }
+
+ public void UpdateRevisions(IEnumerable items, string tip, int totalRevisions, int currPage)
+ {
+ this.items = items;
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef
new file mode 100644
index 00000000..3467a9ed
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef
@@ -0,0 +1,13 @@
+{
+ "name": "Unity.CollabProxy.EditorTests",
+ "references": [
+ "Unity.CollabProxy.Editor"
+ ],
+ "optionalUnityReferences": [
+ "TestAssemblies"
+ ],
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": []
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json
new file mode 100644
index 00000000..34022740
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "com.unity.collab-proxy",
+ "displayName": "Unity Collaborate",
+ "version": "1.2.16",
+ "unity": "2018.3",
+ "description": "Collaborate is a simple way for teams to save, share, and sync their Unity project",
+ "keywords": [
+ "collab",
+ "collaborate",
+ "teams",
+ "team",
+ "cloud",
+ "backup"
+ ],
+ "dependencies": {},
+ "repository": {
+ "type": "git",
+ "url": "https://gitlab.cds.internal.unity3d.com/upm-packages/cloud-services/collab-proxy.git",
+ "revision": "070e173b6a36e1d6097b1d95e09c08840c23f6ca"
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/.gitlab-ci.yml b/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/.gitlab-ci.yml
new file mode 100644
index 00000000..4c64e220
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/.gitlab-ci.yml
@@ -0,0 +1,15 @@
+image: node:6.10.0
+
+stages:
+ - push_to_packman_staging
+
+push_to_packman_staging:
+ stage: push_to_packman_staging
+ only:
+ - tags
+ script:
+ - sed -i "s/0.0.1-PLACEHOLDERVERSION/$CI_COMMIT_TAG/g" package.json
+ - sed -i "s/PLACEHOLDERSHA/$CI_COMMIT_SHA/g" package.json
+ - sed -i "s/0.0.1-PLACEHOLDERVERSION/$CI_COMMIT_TAG/g" CHANGELOG.md
+ - curl -u $USER_NAME:$API_KEY https://staging-packages.unity.com/auth > .npmrc
+ - npm publish
diff --git a/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/CHANGELOG.md b/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/CHANGELOG.md
new file mode 100644
index 00000000..225baeaa
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/CHANGELOG.md
@@ -0,0 +1,11 @@
+# Changelog
+All notable changes to this package will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
+
+## [1.0.0] - 2019-02-21
+
+### This is the first release of *Unity Package com.unity.ext.nunit*.
+
+- Migrated the custom version of nunit from inside of unity.
diff --git a/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/LICENSE.md b/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/LICENSE.md
new file mode 100644
index 00000000..ccc1f59c
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/LICENSE.md
@@ -0,0 +1,19 @@
+Copyright (c) 2018 Charlie Poole, Rob Prouse
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/README.md b/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/README.md
new file mode 100644
index 00000000..2a38b9d8
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/README.md
@@ -0,0 +1,6 @@
+# Custom Nunit build to work with Unity
+
+This version of nunit works with all platforms, il2cpp and Mono AOT.
+
+For Nunit Documentation:
+https://github.com/nunit/docs/wiki/NUnit-Documentation
diff --git a/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/This is a custom build DONT include.txt b/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/This is a custom build DONT include.txt
new file mode 100644
index 00000000..0839eb99
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/This is a custom build DONT include.txt
@@ -0,0 +1,4 @@
+This is a custom nUnit build meant to be used by Unity editor and players. It shoul not be included or referenced from anywhere (unless you know what you're doing)
+
+Build from this repo
+https://github.com/Unity-Technologies/nunit
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll b/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll
new file mode 100644
index 00000000..3af863c6
Binary files /dev/null and b/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll differ
diff --git a/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll.mdb b/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll.mdb
new file mode 100644
index 00000000..cb688df0
Binary files /dev/null and b/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.dll.mdb differ
diff --git a/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.xml b/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.xml
new file mode 100644
index 00000000..aea20992
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/net35/unity-custom/nunit.framework.xml
@@ -0,0 +1,18101 @@
+
+
+
+ nunit.framework
+
+
+
+
+ Basic Asserts on strings.
+
+
+
+
+ The Equals method throws an InvalidOperationException. This is done
+ to make sure there is no mistake by calling this function.
+
+
+
+
+
+
+ override the default ReferenceEquals to throw an InvalidOperationException. This
+ implementation makes sure there is no mistake in calling this function
+ as part of Assert.
+
+
+
+
+
+
+ Asserts that a string is found within another string.
+
+ The expected string
+ The string to be examined
+ The message to display in case of failure
+ Arguments used in formatting the message
+
+
+
+ Asserts that a string is found within another string.
+
+ The expected string
+ The string to be examined
+
+
+
+ Asserts that a string is not found within another string.
+
+ The expected string
+ The string to be examined
+ The message to display in case of failure
+ Arguments used in formatting the message
+
+
+
+ Asserts that a string is found within another string.
+
+ The expected string
+ The string to be examined
+
+
+
+ Asserts that a string starts with another string.
+
+ The expected string
+ The string to be examined
+ The message to display in case of failure
+ Arguments used in formatting the message
+
+
+
+ Asserts that a string starts with another string.
+
+ The expected string
+ The string to be examined
+
+
+
+ Asserts that a string does not start with another string.
+
+ The expected string
+ The string to be examined
+ The message to display in case of failure
+ Arguments used in formatting the message
+
+
+
+ Asserts that a string does not start with another string.
+
+ The expected string
+ The string to be examined
+
+
+
+ Asserts that a string ends with another string.
+
+ The expected string
+ The string to be examined
+ The message to display in case of failure
+ Arguments used in formatting the message
+
+
+
+ Asserts that a string ends with another string.
+
+ The expected string
+ The string to be examined
+
+
+
+ Asserts that a string does not end with another string.
+
+ The expected string
+ The string to be examined
+ The message to display in case of failure
+ Arguments used in formatting the message
+
+
+
+ Asserts that a string does not end with another string.
+
+ The expected string
+ The string to be examined
+
+
+
+ Asserts that two strings are equal, without regard to case.
+
+ The expected string
+ The actual string
+ The message to display in case of failure
+ Arguments used in formatting the message
+
+
+
+ Asserts that two strings are equal, without regard to case.
+
+ The expected string
+ The actual string
+
+
+
+ Asserts that two strings are not equal, without regard to case.
+
+ The expected string
+ The actual string
+ The message to display in case of failure
+ Arguments used in formatting the message
+
+
+
+ Asserts that two strings are not equal, without regard to case.
+
+ The expected string
+ The actual string
+
+
+
+ Asserts that a string matches an expected regular expression pattern.
+
+ The regex pattern to be matched
+ The actual string
+ The message to display in case of failure
+ Arguments used in formatting the message
+
+
+
+ Asserts that a string matches an expected regular expression pattern.
+
+ The regex pattern to be matched
+ The actual string
+
+
+
+ Asserts that a string does not match an expected regular expression pattern.
+
+ The regex pattern to be used
+ The actual string
+ The message to display in case of failure
+ Arguments used in formatting the message
+
+
+
+ Asserts that a string does not match an expected regular expression pattern.
+
+ The regex pattern to be used
+ The actual string
+
+
+
+ Combines multiple filters so that a test must pass all
+ of them in order to pass this filter.
+
+
+
+
+ A base class for multi-part filters
+
+
+
+
+ Interface to be implemented by filters applied to tests.
+ The filter applies when running the test, after it has been
+ loaded, since this is the only time an ITest exists.
+
+
+
+
+ Interface to be implemented by filters applied to tests.
+ The filter applies when running the test, after it has been
+ loaded, since this is the only time an ITest exists.
+
+
+
+
+ An object implementing IXmlNodeBuilder is able to build
+ an XML representation of itself and any children.
+
+
+
+
+ Returns a TNode representing the current object.
+
+ If true, children are included where applicable
+ A TNode representing the result
+
+
+
+ Returns a TNode representing the current object after
+ adding it as a child of the supplied parent node.
+
+ The parent node.
+ If true, children are included, where applicable
+
+
+
+
+ Determine if a particular test passes the filter criteria. Pass
+ may examine the parents and/or descendants of a test, depending
+ on the semantics of the particular filter
+
+ The test to which the filter is applied
+ True if the test passes the filter, otherwise false
+
+
+
+ Determine if a test matches the filter expicitly. That is, it must
+ be a direct match of the test itself or one of it's children.
+
+ The test to which the filter is applied
+ True if the test matches the filter explicityly, otherwise false
+
+
+
+ Unique Empty filter.
+
+
+
+
+ Determine if a particular test passes the filter criteria. The default
+ implementation checks the test itself, its parents and any descendants.
+
+ Derived classes may override this method or any of the Match methods
+ to change the behavior of the filter.
+
+ The test to which the filter is applied
+ True if the test passes the filter, otherwise false
+
+
+
+ Determine if a test matches the filter expicitly. That is, it must
+ be a direct match of the test itself or one of it's children.
+
+ The test to which the filter is applied
+ True if the test matches the filter explicityly, otherwise false
+
+
+
+ Determine whether the test itself matches the filter criteria, without
+ examining either parents or descendants. This is overridden by each
+ different type of filter to perform the necessary tests.
+
+ The test to which the filter is applied
+ True if the filter matches the any parent of the test
+
+
+
+ Determine whether any ancestor of the test matches the filter criteria
+
+ The test to which the filter is applied
+ True if the filter matches the an ancestor of the test
+
+
+
+ Determine whether any descendant of the test matches the filter criteria.
+
+ The test to be matched
+ True if at least one descendant matches the filter criteria
+
+
+
+ Create a TestFilter instance from an xml representation.
+
+
+
+
+ Create a TestFilter from it's TNode representation
+
+
+
+
+ Adds an XML node
+
+ True if recursive
+ The added XML node
+
+
+
+ Adds an XML node
+
+ Parent node
+ True if recursive
+ The added XML node
+
+
+
+ Indicates whether this is the EmptyFilter
+
+
+
+
+ Indicates whether this is a top-level filter,
+ not contained in any other filter.
+
+
+
+
+ Nested class provides an empty filter - one that always
+ returns true when called. It never matches explicitly.
+
+
+
+
+ Constructs an empty CompositeFilter
+
+
+
+
+ Constructs a CompositeFilter from an array of filters
+
+
+
+
+
+ Adds a filter to the list of filters
+
+ The filter to be added
+
+
+
+ Checks whether the CompositeFilter is matched by a test.
+
+ The test to be matched
+
+
+
+ Checks whether the CompositeFilter is matched by a test.
+
+ The test to be matched
+
+
+
+ Checks whether the CompositeFilter is explicit matched by a test.
+
+ The test to be matched
+
+
+
+ Adds an XML node
+
+ Parent node
+ True if recursive
+ The added XML node
+
+
+
+ Return a list of the composing filters.
+
+
+
+
+ Gets the element name
+
+ Element name
+
+
+
+ Constructs an empty AndFilter
+
+
+
+
+ Constructs an AndFilter from an array of filters
+
+
+
+
+
+ Checks whether the AndFilter is matched by a test
+
+ The test to be matched
+ True if all the component filters pass, otherwise false
+
+
+
+ Checks whether the AndFilter is matched by a test
+
+ The test to be matched
+ True if all the component filters match, otherwise false
+
+
+
+ Checks whether the AndFilter is explicit matched by a test.
+
+ The test to be matched
+ True if all the component filters explicit match, otherwise false
+
+
+
+ Gets the element name
+
+ Element name
+
+
+
+ SubstringConstraint can test whether a string contains
+ the expected substring.
+
+
+
+
+ StringConstraint is the abstract base for constraints
+ that operate on strings. It supports the IgnoreCase
+ modifier for string operations.
+
+
+
+
+ The Constraint class is the base of all built-in constraints
+ within NUnit. It provides the operator overloads used to combine
+ constraints.
+
+
+
+
+ Interface for all constraints
+
+
+
+
+ The IResolveConstraint interface is implemented by all
+ complete and resolvable constraints and expressions.
+
+
+
+
+ Return the top-level constraint for this expression
+
+
+
+
+
+ Applies the constraint to an actual value, returning a ConstraintResult.
+
+ The value to be tested
+ A ConstraintResult
+
+
+
+ Applies the constraint to an ActualValueDelegate that returns
+ the value to be tested. The default implementation simply evaluates
+ the delegate but derived classes may override it to provide for
+ delayed processing.
+
+ An ActualValueDelegate
+ A ConstraintResult
+
+
+
+ Test whether the constraint is satisfied by a given reference.
+ The default implementation simply dereferences the value but
+ derived classes may override it to provide for delayed processing.
+
+ A reference to the value to be tested
+ A ConstraintResult
+
+
+
+ The display name of this Constraint for use by ToString().
+
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ Arguments provided to this Constraint, for use in
+ formatting the description.
+
+
+
+
+ The ConstraintBuilder holding this constraint
+
+
+
+
+ Construct a constraint with optional arguments
+
+ Arguments to be saved
+
+
+
+ Applies the constraint to an actual value, returning a ConstraintResult.
+
+ The value to be tested
+ A ConstraintResult
+
+
+
+ Applies the constraint to an ActualValueDelegate that returns
+ the value to be tested. The default implementation simply evaluates
+ the delegate but derived classes may override it to provide for
+ delayed processing.
+
+ An ActualValueDelegate
+ A ConstraintResult
+
+
+
+ Test whether the constraint is satisfied by a given reference.
+ The default implementation simply dereferences the value but
+ derived classes may override it to provide for delayed processing.
+
+ A reference to the value to be tested
+ A ConstraintResult
+
+
+
+ Retrieves the value to be tested from an ActualValueDelegate.
+ The default implementation simply evaluates the delegate but derived
+ classes may override it to provide for delayed processing.
+
+ An ActualValueDelegate
+ Delegate evaluation result
+
+
+
+ Default override of ToString returns the constraint DisplayName
+ followed by any arguments within angle brackets.
+
+
+
+
+
+ Returns the string representation of this constraint
+
+
+
+
+ This operator creates a constraint that is satisfied only if both
+ argument constraints are satisfied.
+
+
+
+
+ This operator creates a constraint that is satisfied if either
+ of the argument constraints is satisfied.
+
+
+
+
+ This operator creates a constraint that is satisfied if the
+ argument constraint is not satisfied.
+
+
+
+
+ Returns a DelayedConstraint with the specified delay time.
+
+ The delay in milliseconds.
+
+
+
+
+ Returns a DelayedConstraint with the specified delay time
+ and polling interval.
+
+ The delay in milliseconds.
+ The interval at which to test the constraint.
+
+
+
+
+ Resolves any pending operators and returns the resolved constraint.
+
+
+
+
+ The display name of this Constraint for use by ToString().
+ The default value is the name of the constraint with
+ trailing "Constraint" removed. Derived classes may set
+ this to another name in their constructors.
+
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ Arguments provided to this Constraint, for use in
+ formatting the description.
+
+
+
+
+ The ConstraintBuilder holding this constraint
+
+
+
+
+ Returns a ConstraintExpression by appending And
+ to the current constraint.
+
+
+
+
+ Returns a ConstraintExpression by appending And
+ to the current constraint.
+
+
+
+
+ Returns a ConstraintExpression by appending Or
+ to the current constraint.
+
+
+
+
+ The expected value
+
+
+
+
+ Indicates whether tests should be case-insensitive
+
+
+
+
+ Description of this constraint
+
+
+
+
+ Constructs a StringConstraint without an expected value
+
+
+
+
+ Constructs a StringConstraint given an expected value
+
+ The expected value
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for success, false for failure
+
+
+
+ Test whether the constraint is satisfied by a given string
+
+ The string to be tested
+ True for success, false for failure
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ Modify the constraint to ignore case in matching.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The expected.
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for success, false for failure
+
+
+
+ Abstract base class used for prefixes
+
+
+
+
+ Construct given a base constraint
+
+
+
+
+
+ The base constraint
+
+
+
+
+ Prefix used in forming the constraint description
+
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ AssignableToConstraint is used to test that an object
+ can be assigned to a given Type.
+
+
+
+
+ TypeConstraint is the abstract base for constraints
+ that take a Type as their expected value.
+
+
+
+
+ The expected Type used by the constraint
+
+
+
+
+ The type of the actual argument to which the constraint was applied
+
+
+
+
+ Construct a TypeConstraint for a given Type
+
+ The expected type for the constraint
+ Prefix used in forming the constraint description
+
+
+
+ Applies the constraint to an actual value, returning a ConstraintResult.
+
+ The value to be tested
+ A ConstraintResult
+
+
+
+ Apply the constraint to an actual value, returning true if it succeeds
+
+ The actual argument
+ True if the constraint succeeds, otherwise false.
+
+
+
+ Construct an AssignableToConstraint for the type provided
+
+
+
+
+
+ Apply the constraint to an actual value, returning true if it succeeds
+
+ The actual argument
+ True if the constraint succeeds, otherwise false.
+
+
+
+ Summary description for MaxTimeAttribute.
+
+
+
+
+ PropertyAttribute is used to attach information to a test as a name/value pair..
+
+
+
+
+ The abstract base class for all custom attributes defined by NUnit.
+
+
+
+
+ Default constructor
+
+
+
+
+ The IApplyToTest interface is implemented by self-applying
+ attributes that modify the state of a test in some way.
+
+
+
+
+ Modifies a test as defined for the specific attribute.
+
+ The test to modify
+
+
+
+ Construct a PropertyAttribute with a name and string value
+
+ The name of the property
+ The property value
+
+
+
+ Construct a PropertyAttribute with a name and int value
+
+ The name of the property
+ The property value
+
+
+
+ Construct a PropertyAttribute with a name and double value
+
+ The name of the property
+ The property value
+
+
+
+ Constructor for derived classes that set the
+ property dictionary directly.
+
+
+
+
+ Constructor for use by derived classes that use the
+ name of the type as the property name. Derived classes
+ must ensure that the Type of the property value is
+ a standard type supported by the BCL. Any custom
+ types will cause a serialization Exception when
+ in the client.
+
+
+
+
+ Modifies a test by adding properties to it.
+
+ The test to modify
+
+
+
+ Gets the property dictionary for this attribute
+
+
+
+
+ Objects implementing this interface are used to wrap
+ the entire test, including SetUp and TearDown.
+
+
+
+
+ ICommandWrapper is implemented by attributes and other
+ objects able to wrap a TestCommand with another command.
+
+
+ Attributes or other objects should implement one of the
+ derived interfaces, rather than this one, since they
+ indicate in which part of the command chain the wrapper
+ should be applied.
+
+
+
+
+ Wrap a command and return the result.
+
+ The command to be wrapped
+ The wrapped command
+
+
+
+ Construct a MaxTimeAttribute, given a time in milliseconds.
+
+ The maximum elapsed time in milliseconds
+
+
+
+ Randomizer returns a set of random _values in a repeatable
+ way, to allow re-running of tests if necessary. It extends
+ the .NET Random class, providing random values for a much
+ wider range of types.
+
+ The class is used internally by the framework to generate
+ test case data and is also exposed for use by users through
+ the TestContext.Random property.
+
+
+ For consistency with the underlying Random Type, methods
+ returning a single value use the prefix "Next..." Those
+ without an argument return a non-negative value up to
+ the full positive range of the Type. Overloads are provided
+ for specifying a maximum or a range. Methods that return
+ arrays or strings use the prefix "Get..." to avoid
+ confusion with the single-value methods.
+
+
+
+
+ Default characters for random functions.
+
+ Default characters are the English alphabet (uppercase & lowercase), arabic numerals, and underscore
+
+
+
+ Get a Randomizer for a particular member, returning
+ one that has already been created if it exists.
+ This ensures that the same _values are generated
+ each time the tests are reloaded.
+
+
+
+
+ Get a randomizer for a particular parameter, returning
+ one that has already been created if it exists.
+ This ensures that the same values are generated
+ each time the tests are reloaded.
+
+
+
+
+ Create a new Randomizer using the next seed
+ available to ensure that each randomizer gives
+ a unique sequence of values.
+
+
+
+
+
+ Default constructor
+
+
+
+
+ Construct based on seed value
+
+
+
+
+
+ Returns a random unsigned int.
+
+
+
+
+ Returns a random unsigned int less than the specified maximum.
+
+
+
+
+ Returns a random unsigned int within a specified range.
+
+
+
+
+ Returns a non-negative random short.
+
+
+
+
+ Returns a non-negative random short less than the specified maximum.
+
+
+
+
+ Returns a non-negative random short within a specified range.
+
+
+
+
+ Returns a random unsigned short.
+
+
+
+
+ Returns a random unsigned short less than the specified maximum.
+
+
+
+
+ Returns a random unsigned short within a specified range.
+
+
+
+
+ Returns a random long.
+
+
+
+
+ Returns a random long less than the specified maximum.
+
+
+
+
+ Returns a non-negative random long within a specified range.
+
+
+
+
+ Returns a random ulong.
+
+
+
+
+ Returns a random ulong less than the specified maximum.
+
+
+
+
+ Returns a non-negative random long within a specified range.
+
+
+
+
+ Returns a random Byte
+
+
+
+
+ Returns a random Byte less than the specified maximum.
+
+
+
+
+ Returns a random Byte within a specified range
+
+
+
+
+ Returns a random SByte
+
+
+
+
+ Returns a random sbyte less than the specified maximum.
+
+
+
+
+ Returns a random sbyte within a specified range
+
+
+
+
+ Returns a random bool
+
+
+
+
+ Returns a random bool based on the probablility a true result
+
+
+
+
+ Returns a random double between 0.0 and the specified maximum.
+
+
+
+
+ Returns a random double within a specified range.
+
+
+
+
+ Returns a random float.
+
+
+
+
+ Returns a random float between 0.0 and the specified maximum.
+
+
+
+
+ Returns a random float within a specified range.
+
+
+
+
+ Returns a random enum value of the specified Type as an object.
+
+
+
+
+ Returns a random enum value of the specified Type.
+
+
+
+
+ Generate a random string based on the characters from the input string.
+
+ desired length of output string.
+ string representing the set of characters from which to construct the resulting string
+ A random string of arbitrary length
+
+
+
+ Generate a random string based on the characters from the input string.
+
+ desired length of output string.
+ A random string of arbitrary length
+ Uses DefaultStringChars as the input character set
+
+
+
+ Generate a random string based on the characters from the input string.
+
+ A random string of the default length
+ Uses DefaultStringChars as the input character set
+
+
+
+ Returns a random decimal.
+
+
+
+
+ Returns a random decimal between positive zero and the specified maximum.
+
+
+
+
+ Returns a random decimal within a specified range, which is not
+ permitted to exceed decimal.MaxVal in the current implementation.
+
+
+ A limitation of this implementation is that the range from min
+ to max must not exceed decimal.MaxVal.
+
+
+
+
+ Initial seed used to create randomizers for this run
+
+
+
+
+ The IFixtureBuilder interface is exposed by a class that knows how to
+ build a TestFixture from one or more Types. In general, it is exposed
+ by an attribute, but may be implemented in a helper class used by the
+ attribute in some cases.
+
+
+
+
+ Build one or more TestFixtures from type provided. At least one
+ non-null TestSuite must always be returned, since the method is
+ generally called because the user has marked the target class as
+ a fixture. If something prevents the fixture from being used, it
+ will be returned nonetheless, labelled as non-runnable.
+
+ The type info of the fixture to be used.
+ A TestSuite object or one derived from TestSuite.
+
+
+
+ The ITestBuilder interface is exposed by a class that knows how to
+ build one or more TestMethods from a MethodInfo. In general, it is exposed
+ by an attribute, which has additional information available to provide
+ the necessary test parameters to distinguish the test cases built.
+
+
+
+
+ Build one or more TestMethods from the provided MethodInfo.
+
+ The method to be used as a test
+ The TestSuite to which the method will be added
+ A TestMethod object
+
+
+
+ The IReflectionInfo interface is implemented by NUnit wrapper objects that perform reflection.
+
+
+
+
+ Returns an array of custom attributes of the specified type applied to this object
+
+
+
+
+ Returns a value indicating whether an attribute of the specified type is defined on this object.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Represents the result of running a test suite
+
+
+
+
+ The TestResult class represents the result of a test.
+
+
+
+
+ The ITestResult interface represents the result of a test.
+
+
+
+
+ Gets the ResultState of the test result, which
+ indicates the success or failure of the test.
+
+
+
+
+ Gets the name of the test result
+
+
+
+
+ Gets the full name of the test result
+
+
+
+
+ Gets the elapsed time for running the test in seconds
+
+
+
+
+ Gets or sets the time the test started running.
+
+
+
+
+ Gets or sets the time the test finished running.
+
+
+
+
+ Gets the message associated with a test
+ failure or with not running the test
+
+
+
+
+ Gets any stacktrace associated with an
+ error or failure. Not available in
+ the Compact Framework 1.0.
+
+
+
+
+ Gets the number of asserts executed
+ when running the test and all its children.
+
+
+
+
+ Gets the number of test cases that failed
+ when running the test and all its children.
+
+
+
+
+ Gets the number of test cases that passed
+ when running the test and all its children.
+
+
+
+
+ Gets the number of test cases that were skipped
+ when running the test and all its children.
+
+
+
+
+ Gets the number of test cases that were inconclusive
+ when running the test and all its children.
+
+
+
+
+ Indicates whether this result has any child results.
+ Accessing HasChildren should not force creation of the
+ Children collection in classes implementing this interface.
+
+
+
+
+ Gets the the collection of child results.
+
+
+
+
+ Gets the Test to which this result applies.
+
+
+
+
+ Gets any text output written to this result.
+
+
+
+
+ The minimum duration for tests
+
+
+
+
+ Error message for when child tests have errors
+
+
+
+
+ Error message for when child tests are ignored
+
+
+
+
+ Aggregate assertion count
+
+
+
+
+ Construct a test result given a Test
+
+ The test to be used
+
+
+
+ Returns the Xml representation of the result.
+
+ If true, descendant results are included
+ An XmlNode representing the result
+
+
+
+ Adds the XML representation of the result as a child of the
+ supplied parent node..
+
+ The parent node.
+ If true, descendant results are included
+
+
+
+
+ Set the result of the test
+
+ The ResultState to use in the result
+
+
+
+ Set the result of the test
+
+ The ResultState to use in the result
+ A message associated with the result state
+
+
+
+ Set the result of the test
+
+ The ResultState to use in the result
+ A message associated with the result state
+ Stack trace giving the location of the command
+
+
+
+ Set the test result based on the type of exception thrown
+
+ The exception that was thrown
+
+
+
+ Set the test result based on the type of exception thrown
+
+ The exception that was thrown
+ THe FailureSite to use in the result
+
+
+
+ RecordTearDownException appends the message and stacktrace
+ from an exception arising during teardown of the test
+ to any previously recorded information, so that any
+ earlier failure information is not lost. Note that
+ calling Assert.Ignore, Assert.Inconclusive, etc. during
+ teardown is treated as an error. If the current result
+ represents a suite, it may show a teardown error even
+ though all contained tests passed.
+
+ The Exception to be recorded
+
+
+
+ Adds a reason element to a node and returns it.
+
+ The target node.
+ The new reason element.
+
+
+
+ Adds a failure element to a node and returns it.
+
+ The target node.
+ The new failure element.
+
+
+
+ Gets the test with which this result is associated.
+
+
+
+
+ Gets the ResultState of the test result, which
+ indicates the success or failure of the test.
+
+
+
+
+ Gets the name of the test result
+
+
+
+
+ Gets the full name of the test result
+
+
+
+
+ Gets or sets the elapsed time for running the test in seconds
+
+
+
+
+ Gets or sets the time the test started running.
+
+
+
+
+ Gets or sets the time the test finished running.
+
+
+
+
+ Gets the message associated with a test
+ failure or with not running the test
+
+
+
+
+ Gets any stacktrace associated with an
+ error or failure.
+
+
+
+
+ Gets or sets the count of asserts executed
+ when running the test.
+
+
+
+
+ Gets the number of test cases that failed
+ when running the test and all its children.
+
+
+
+
+ Gets the number of test cases that passed
+ when running the test and all its children.
+
+
+
+
+ Gets the number of test cases that were skipped
+ when running the test and all its children.
+
+
+
+
+ Gets the number of test cases that were inconclusive
+ when running the test and all its children.
+
+
+
+
+ Indicates whether this result has any child results.
+
+
+
+
+ Gets the collection of child results.
+
+
+
+
+ Gets a TextWriter, which will write output to be included in the result.
+
+
+
+
+ Gets any text output written to this result.
+
+
+
+
+ Construct a TestSuiteResult base on a TestSuite
+
+ The TestSuite to which the result applies
+
+
+
+ Adds a child result to this result, setting this result's
+ ResultState to Failure if the child result failed.
+
+ The result to be added
+
+
+
+ Gets the number of test cases that failed
+ when running the test and all its children.
+
+
+
+
+ Gets the number of test cases that passed
+ when running the test and all its children.
+
+
+
+
+ Gets the number of test cases that were skipped
+ when running the test and all its children.
+
+
+
+
+ Gets the number of test cases that were inconclusive
+ when running the test and all its children.
+
+
+
+
+ Indicates whether this result has any child results.
+
+
+
+
+ Gets the collection of child results.
+
+
+
+
+ TestSuite represents a composite test, which contains other tests.
+
+
+
+
+ The Test abstract class represents a test within the framework.
+
+
+
+
+ Common interface supported by all representations
+ of a test. Only includes informational fields.
+ The Run method is specifically excluded to allow
+ for data-only representations of a test.
+
+
+
+
+ Gets the id of the test
+
+
+
+
+ Gets the name of the test
+
+
+
+
+ Gets the fully qualified name of the test
+
+
+
+
+ Gets the name of the class containing this test. Returns
+ null if the test is not associated with a class.
+
+
+
+
+ Gets the name of the method implementing this test.
+ Returns null if the test is not implemented as a method.
+
+
+
+
+ Gets the Type of the test fixture, if applicable, or
+ null if no fixture type is associated with this test.
+
+
+
+
+ Gets an IMethod for the method implementing this test.
+ Returns null if the test is not implemented as a method.
+
+
+
+
+ Gets the RunState of the test, indicating whether it can be run.
+
+
+
+
+ Count of the test cases ( 1 if this is a test case )
+
+
+
+
+ Gets the properties of the test
+
+
+
+
+ Gets the parent test, if any.
+
+ The parent test or null if none exists.
+
+
+
+ Returns true if this is a test suite
+
+
+
+
+ Gets a bool indicating whether the current test
+ has any descendant tests.
+
+
+
+
+ Gets this test's child tests
+
+ A list of child tests
+
+
+
+ Gets a fixture object for running this test.
+
+
+
+
+ Static value to seed ids. It's started at 1000 so any
+ uninitialized ids will stand out.
+
+
+
+
+ The SetUp methods.
+
+
+
+
+ The teardown methods
+
+
+
+
+ Used to cache the declaring type for this MethodInfo
+
+
+
+
+ Method property backing field
+
+
+
+
+ Constructs a test given its name
+
+ The name of the test
+
+
+
+ Constructs a test given the path through the
+ test hierarchy to its parent and a name.
+
+ The parent tests full name
+ The name of the test
+
+
+
+ TODO: Documentation needed for constructor
+
+
+
+
+
+ Construct a test from a MethodInfo
+
+
+
+
+
+ Creates a TestResult for this test.
+
+ A TestResult suitable for this type of test.
+
+
+
+ Modify a newly constructed test by applying any of NUnit's common
+ attributes, based on a supplied ICustomAttributeProvider, which is
+ usually the reflection element from which the test was constructed,
+ but may not be in some instances. The attributes retrieved are
+ saved for use in subsequent operations.
+
+ An object implementing ICustomAttributeProvider
+
+
+
+ Add standard attributes and members to a test node.
+
+
+
+
+
+
+ Returns the Xml representation of the test
+
+ If true, include child tests recursively
+
+
+
+
+ Returns an XmlNode representing the current result after
+ adding it as a child of the supplied parent node.
+
+ The parent node.
+ If true, descendant results are included
+
+
+
+
+ Compares this test to another test for sorting purposes
+
+ The other test
+ Value of -1, 0 or +1 depending on whether the current test is less than, equal to or greater than the other test
+
+
+
+ Gets or sets the id of the test
+
+
+
+
+
+ Gets or sets the name of the test
+
+
+
+
+ Gets or sets the fully qualified name of the test
+
+
+
+
+
+ Gets the name of the class where this test was declared.
+ Returns null if the test is not associated with a class.
+
+
+
+
+ Gets the name of the method implementing this test.
+ Returns null if the test is not implemented as a method.
+
+
+
+
+ Gets the TypeInfo of the fixture used in running this test
+ or null if no fixture type is associated with it.
+
+
+
+
+ Gets a MethodInfo for the method implementing this test.
+ Returns null if the test is not implemented as a method.
+
+
+
+
+ Whether or not the test should be run
+
+
+
+
+ Gets the name used for the top-level element in the
+ XML representation of this test
+
+
+
+
+ Gets a string representing the type of test. Used as an attribute
+ value in the XML representation of a test and has no other
+ function in the framework.
+
+
+
+
+ Gets a count of test cases represented by
+ or contained under this test.
+
+
+
+
+ Gets the properties for this test
+
+
+
+
+ Returns true if this is a TestSuite
+
+
+
+
+ Gets a bool indicating whether the current test
+ has any descendant tests.
+
+
+
+
+ Gets the parent as a Test object.
+ Used by the core to set the parent.
+
+
+
+
+ Gets this test's child tests
+
+ A list of child tests
+
+
+
+ Gets or sets a fixture object for running this test.
+
+
+
+
+ Static prefix used for ids in this AppDomain.
+ Set by FrameworkController.
+
+
+
+
+ Gets or Sets the Int value representing the seed for the RandomGenerator
+
+
+
+
+
+ Our collection of child tests
+
+
+
+
+ Initializes a new instance of the class.
+
+ The name of the suite.
+
+
+
+ Initializes a new instance of the class.
+
+ Name of the parent suite.
+ The name of the suite.
+
+
+
+ Initializes a new instance of the class.
+
+ Type of the fixture.
+
+
+
+ Initializes a new instance of the class.
+
+ Type of the fixture.
+
+
+
+ Sorts tests under this suite.
+
+
+
+
+ Adds a test to the suite.
+
+ The test.
+
+
+
+ Overridden to return a TestSuiteResult.
+
+ A TestResult for this test.
+
+
+
+ Returns an XmlNode representing the current result after
+ adding it as a child of the supplied parent node.
+
+ The parent node.
+ If true, descendant results are included
+
+
+
+
+ Check that setup and teardown methods marked by certain attributes
+ meet NUnit's requirements and mark the tests not runnable otherwise.
+
+ The attribute type to check for
+
+
+
+ Gets this test's child tests
+
+ The list of child tests
+
+
+
+ Gets a count of test cases represented by
+ or contained under this test.
+
+
+
+
+
+ The arguments to use in creating the fixture
+
+
+
+
+ Set to true to suppress sorting this suite's contents
+
+
+
+
+ Gets a bool indicating whether the current test
+ has any descendant tests.
+
+
+
+
+ Gets the name used for the top-level element in the
+ XML representation of this test
+
+
+
+
+ A PropertyBag represents a collection of name value pairs
+ that allows duplicate entries with the same key. Methods
+ are provided for adding a new pair as well as for setting
+ a key to a single value. All keys are strings but _values
+ may be of any type. Null _values are not permitted, since
+ a null entry represents the absence of the key.
+
+
+
+
+ A PropertyBag represents a collection of name/value pairs
+ that allows duplicate entries with the same key. Methods
+ are provided for adding a new pair as well as for setting
+ a key to a single value. All keys are strings but _values
+ may be of any type. Null _values are not permitted, since
+ a null entry represents the absence of the key.
+
+ The entries in a PropertyBag are of two kinds: those that
+ take a single value and those that take multiple _values.
+ However, the PropertyBag has no knowledge of which entries
+ fall into each category and the distinction is entirely
+ up to the code using the PropertyBag.
+
+ When working with multi-valued properties, client code
+ should use the Add method to add name/value pairs and
+ indexing to retrieve a list of all _values for a given
+ key. For example:
+
+ bag.Add("Tag", "one");
+ bag.Add("Tag", "two");
+ Assert.That(bag["Tag"],
+ Is.EqualTo(new string[] { "one", "two" }));
+
+ When working with single-valued propeties, client code
+ should use the Set method to set the value and Get to
+ retrieve the value. The GetSetting methods may also be
+ used to retrieve the value in a type-safe manner while
+ also providing default. For example:
+
+ bag.Set("Priority", "low");
+ bag.Set("Priority", "high"); // replaces value
+ Assert.That(bag.Get("Priority"),
+ Is.EqualTo("high"));
+ Assert.That(bag.GetSetting("Priority", "low"),
+ Is.EqualTo("high"));
+
+
+
+
+ Adds a key/value pair to the property bag
+
+ The key
+ The value
+
+
+
+ Sets the value for a key, removing any other
+ _values that are already in the property set.
+
+
+
+
+
+
+ Gets a single value for a key, using the first
+ one if multiple _values are present and returning
+ null if the value is not found.
+
+
+
+
+ Gets a flag indicating whether the specified key has
+ any entries in the property set.
+
+ The key to be checked
+ True if their are _values present, otherwise false
+
+
+
+ Gets or sets the list of _values for a particular key
+
+ The key for which the _values are to be retrieved or set
+
+
+
+ Gets a collection containing all the keys in the property set
+
+
+
+
+ Adds a key/value pair to the property set
+
+ The key
+ The value
+
+
+
+ Sets the value for a key, removing any other
+ _values that are already in the property set.
+
+
+
+
+
+
+ Gets a single value for a key, using the first
+ one if multiple _values are present and returning
+ null if the value is not found.
+
+
+
+
+
+
+ Gets a flag indicating whether the specified key has
+ any entries in the property set.
+
+ The key to be checked
+
+ True if their are _values present, otherwise false
+
+
+
+
+ Returns an XmlNode representating the current PropertyBag.
+
+ Not used
+ An XmlNode representing the PropertyBag
+
+
+
+ Returns an XmlNode representing the PropertyBag after
+ adding it as a child of the supplied parent node.
+
+ The parent node.
+ Not used
+
+
+
+
+ Gets a collection containing all the keys in the property set
+
+
+
+
+
+ Gets or sets the list of _values for a particular key
+
+
+
+
+ Thrown when an assertion failed. Here to preserve the inner
+ exception and hence its stack trace.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The error message that explains
+ the reason for the exception
+
+
+
+ Initializes a new instance of the class.
+
+ The error message that explains
+ the reason for the exception
+ The exception that caused the
+ current exception
+
+
+
+ Serialization Constructor
+
+
+
+
+ FullName filter selects tests based on their FullName
+
+
+
+
+ ValueMatchFilter selects tests based on some value, which
+ is expected to be contained in the test.
+
+
+
+
+ Construct a ValueMatchFilter for a single value.
+
+ The value to be included.
+
+
+
+ Match the input provided by the derived class
+
+ The value to be matchedT
+ True for a match, false otherwise.
+
+
+
+ Adds an XML node
+
+ Parent node
+ True if recursive
+ The added XML node
+
+
+
+ Returns the value matched by the filter - used for testing
+
+
+
+
+ Indicates whether the value is a regular expression
+
+
+
+
+ Gets the element name
+
+ Element name
+
+
+
+ Construct a FullNameFilter for a single name
+
+ The name the filter will recognize.
+
+
+
+ Match a test against a single value.
+
+
+
+
+ Gets the element name
+
+ Element name
+
+
+
+ NotFilter negates the operation of another filter
+
+
+
+
+ Construct a not filter on another filter
+
+ The filter to be negated
+
+
+
+ Determine if a particular test passes the filter criteria. The default
+ implementation checks the test itself, its parents and any descendants.
+
+ Derived classes may override this method or any of the Match methods
+ to change the behavior of the filter.
+
+ The test to which the filter is applied
+ True if the test passes the filter, otherwise false
+
+
+
+ Check whether the filter matches a test
+
+ The test to be matched
+ True if it matches, otherwise false
+
+
+
+ Determine if a test matches the filter expicitly. That is, it must
+ be a direct match of the test itself or one of it's children.
+
+ The test to which the filter is applied
+ True if the test matches the filter explicityly, otherwise false
+
+
+
+ Adds an XML node
+
+ Parent node
+ True if recursive
+ The added XML node
+
+
+
+ Gets the base filter
+
+
+
+
+ SequentialStrategy creates test cases by using all of the
+ parameter data sources in parallel, substituting null
+ when any of them run out of data.
+
+
+
+
+ CombiningStrategy is the abstract base for classes that
+ know how to combine values provided for individual test
+ parameters to create a set of test cases.
+
+
+
+
+ Gets the test cases generated by the CombiningStrategy.
+
+ The test cases.
+
+
+
+ Gets the test cases generated by the CombiningStrategy.
+
+ The test cases.
+
+
+
+ NUnitTestFixtureBuilder is able to build a fixture given
+ a class marked with a TestFixtureAttribute or an unmarked
+ class containing test methods. In the first case, it is
+ called by the attribute and in the second directly by
+ NUnitSuiteBuilder.
+
+
+
+
+ Build a TestFixture from type provided. A non-null TestSuite
+ must always be returned, since the method is generally called
+ because the user has marked the target class as a fixture.
+ If something prevents the fixture from being used, it should
+ be returned nonetheless, labelled as non-runnable.
+
+ An ITypeInfo for the fixture to be used.
+ A TestSuite object or one derived from TestSuite.
+
+
+
+ Overload of BuildFrom called by tests that have arguments.
+ Builds a fixture using the provided type and information
+ in the ITestFixtureData object.
+
+ The TypeInfo for which to construct a fixture.
+ An object implementing ITestFixtureData or null.
+
+
+
+
+ Method to add test cases to the newly constructed fixture.
+
+ The fixture to which cases should be added
+
+
+
+ Method to create a test case from a MethodInfo and add
+ it to the fixture being built. It first checks to see if
+ any global TestCaseBuilder addin wants to build the
+ test case. If not, it uses the internal builder
+ collection maintained by this fixture builder.
+
+ The default implementation has no test case builders.
+ Derived classes should add builders to the collection
+ in their constructor.
+
+ The method for which a test is to be created
+ The test suite being built.
+ A newly constructed Test
+
+
+
+ UniqueItemsConstraint tests whether all the items in a
+ collection are unique.
+
+
+
+
+ CollectionItemsEqualConstraint is the abstract base class for all
+ collection constraints that apply some notion of item equality
+ as a part of their operation.
+
+
+
+
+ CollectionConstraint is the abstract base class for
+ constraints that operate on collections.
+
+
+
+
+ Construct an empty CollectionConstraint
+
+
+
+
+ Construct a CollectionConstraint
+
+
+
+
+
+ Determines whether the specified enumerable is empty.
+
+ The enumerable.
+
+ true if the specified enumerable is empty; otherwise, false.
+
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for success, false for failure
+
+
+
+ Protected method to be implemented by derived classes
+
+
+
+
+
+
+ Construct an empty CollectionConstraint
+
+
+
+
+ Construct a CollectionConstraint
+
+
+
+
+
+ Flag the constraint to use the supplied IComparer object.
+
+ The IComparer object to use.
+ Self.
+
+
+
+ Flag the constraint to use the supplied IComparer object.
+
+ The IComparer object to use.
+ Self.
+
+
+
+ Flag the constraint to use the supplied Comparison object.
+
+ The IComparer object to use.
+ Self.
+
+
+
+ Flag the constraint to use the supplied IEqualityComparer object.
+
+ The IComparer object to use.
+ Self.
+
+
+
+ Flag the constraint to use the supplied IEqualityComparer object.
+
+ The IComparer object to use.
+ Self.
+
+
+
+ Compares two collection members for equality
+
+
+
+
+ Return a new CollectionTally for use in making tests
+
+ The collection to be included in the tally
+
+
+
+ Flag the constraint to ignore case and return self.
+
+
+
+
+ Check that all items are unique.
+
+
+
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ SamePathOrUnderConstraint tests that one path is under another
+
+
+
+
+ PathConstraint serves as the abstract base of constraints
+ that operate on paths and provides several helper methods.
+
+
+
+
+ Construct a PathConstraint for a give expected path
+
+ The expected path
+
+
+
+ Returns the string representation of this constraint
+
+
+
+
+ Canonicalize the provided path
+
+
+ The path in standardized form
+
+
+
+ Test whether one path in canonical form is a subpath of another path
+
+ The first path - supposed to be the parent path
+ The second path - supposed to be the child path
+
+
+
+
+ Modifies the current instance to be case-sensitive
+ and returns it.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The expected path
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for success, false for failure
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ NoItemConstraint applies another constraint to each
+ item in a collection, failing if any of them succeeds.
+
+
+
+
+ Construct a SomeItemsConstraint on top of an existing constraint
+
+
+
+
+
+ Apply the item constraint to each item in the collection,
+ failing if any item fails.
+
+
+
+
+
+
+ The display name of this Constraint for use by ToString().
+ The default value is the name of the constraint with
+ trailing "Constraint" removed. Derived classes may set
+ this to another name in their constructors.
+
+
+
+
+ EndsWithConstraint can test whether a string ends
+ with an expected substring.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The expected string
+
+
+
+ Test whether the constraint is matched by the actual value.
+ This is a template method, which calls the IsMatch method
+ of the derived class.
+
+
+
+
+
+
+ ValuesAttribute is used to provide literal arguments for
+ an individual parameter of a test.
+
+
+
+
+ The abstract base class for all data-providing attributes
+ defined by NUnit. Used to select all data sources for a
+ method, class or parameter.
+
+
+
+
+ Default constructor
+
+
+
+
+ The IParameterDataSource interface is implemented by types
+ that can provide data for a test method parameter.
+
+
+
+
+ Gets an enumeration of data items for use as arguments
+ for a test method parameter.
+
+ The parameter for which data is needed
+ An enumeration containing individual data items
+
+
+
+ The collection of data to be returned. Must
+ be set by any derived attribute classes.
+ We use an object[] so that the individual
+ elements may have their type changed in GetData
+ if necessary
+
+
+
+
+ Constructs for use with an Enum parameter. Will pass every enum
+ value in to the test.
+
+
+
+
+ Construct with one argument
+
+
+
+
+
+ Construct with two arguments
+
+
+
+
+
+
+ Construct with three arguments
+
+
+
+
+
+
+
+ Construct with an array of arguments
+
+
+
+
+
+ Get the collection of _values to be used as arguments
+
+
+
+
+ Marks a test to use a pairwise join of any argument
+ data provided. Arguments will be combined in such a
+ way that all possible pairs of arguments are used.
+
+
+
+
+ Marks a test to use a particular CombiningStrategy to join
+ any parameter data provided. Since this is the default, the
+ attribute is optional.
+
+
+
+
+ Construct a CombiningStrategyAttribute incorporating an
+ ICombiningStrategy and an IParamterDataProvider.
+
+ Combining strategy to be used in combining data
+ An IParameterDataProvider to supply data
+
+
+
+ Construct a CombiningStrategyAttribute incorporating an object
+ that implements ICombiningStrategy and an IParameterDataProvider.
+ This constructor is provided for CLS compliance.
+
+ Combining strategy to be used in combining data
+ An IParameterDataProvider to supply data
+
+
+
+ Construct one or more TestMethods from a given MethodInfo,
+ using available parameter data.
+
+ The MethodInfo for which tests are to be constructed.
+ The suite to which the tests will be added.
+ One or more TestMethods
+
+
+
+ Modify the test by adding the name of the combining strategy
+ to the properties.
+
+ The test to modify
+
+
+
+ Default constructor
+
+
+
+
+ CultureAttribute is used to mark a test fixture or an
+ individual method as applying to a particular Culture only.
+
+
+
+
+ Abstract base for Attributes that are used to include tests
+ in the test run based on environmental settings.
+
+
+
+
+ Constructor with no included items specified, for use
+ with named property syntax.
+
+
+
+
+ Constructor taking one or more included items
+
+ Comma-delimited list of included items
+
+
+
+ Name of the item that is needed in order for
+ a test to run. Multiple items may be given,
+ separated by a comma.
+
+
+
+
+ Name of the item to be excluded. Multiple items
+ may be given, separated by a comma.
+
+
+
+
+ The reason for including or excluding the test
+
+
+
+
+ Constructor with no cultures specified, for use
+ with named property syntax.
+
+
+
+
+ Constructor taking one or more cultures
+
+ Comma-deliminted list of cultures
+
+
+
+ Causes a test to be skipped if this CultureAttribute is not satisfied.
+
+ The test to modify
+
+
+
+ Tests to determine if the current culture is supported
+ based on the properties of this attribute.
+
+ True, if the current culture is supported
+
+
+
+ Test to determine if the a particular culture or comma-
+ delimited set of cultures is in use.
+
+ Name of the culture or comma-separated list of culture ids
+ True if the culture is in use on the system
+
+
+
+ Test to determine if one of a collection of cultures
+ is being used currently.
+
+
+
+
+
+
+ The current state of a work item
+
+
+
+
+ Ready to run or continue
+
+
+
+
+ Work Item is executing
+
+
+
+
+ Complete
+
+
+
+
+ A WorkItem may be an individual test case, a fixture or
+ a higher level grouping of tests. All WorkItems inherit
+ from the abstract WorkItem class, which uses the template
+ pattern to allow derived classes to perform work in
+ whatever way is needed.
+
+ A WorkItem is created with a particular TestExecutionContext
+ and is responsible for re-establishing that context in the
+ current thread before it begins or resumes execution.
+
+
+
+
+ Creates a work item.
+
+ The test for which this WorkItem is being created.
+ The filter to be used in selecting any child Tests.
+
+
+
+
+ Construct a WorkItem for a particular test.
+
+ The test that the WorkItem will run
+
+
+
+ Initialize the TestExecutionContext. This must be done
+ before executing the WorkItem.
+
+
+ Originally, the context was provided in the constructor
+ but delaying initialization of the context until the item
+ is about to be dispatched allows changes in the parent
+ context during OneTimeSetUp to be reflected in the child.
+
+ The TestExecutionContext to use
+
+
+
+ Execute the current work item, including any
+ child work items.
+
+
+
+
+ Cancel (abort or stop) a WorkItem
+
+ true if the WorkItem should be aborted, false if it should run to completion
+
+
+
+ Method that performs actually performs the work. It should
+ set the State to WorkItemState.Complete when done.
+
+
+
+
+ Method called by the derived class when all work is complete
+
+
+
+
+ Event triggered when the item is complete
+
+
+
+
+ Gets the current state of the WorkItem
+
+
+
+
+ The test being executed by the work item
+
+
+
+
+ The execution context
+
+
+
+
+ The unique id of the worker executing this item.
+
+
+
+
+ The test actions to be performed before and after this test
+
+
+
+
+ The test result
+
+
+
+
+ TODO: Documentation needed for class
+
+
+
+
+ TODO: Documentation needed for class
+
+
+
+
+ TestCommand is the abstract base class for all test commands
+ in the framework. A TestCommand represents a single stage in
+ the execution of a test, e.g.: SetUp/TearDown, checking for
+ Timeout, verifying the returned result from a method, etc.
+
+ TestCommands may decorate other test commands so that the
+ execution of a lower-level command is nested within that
+ of a higher level command. All nested commands are executed
+ synchronously, as a single unit. Scheduling test execution
+ on separate threads is handled at a higher level, using the
+ task dispatcher.
+
+
+
+
+ Construct a TestCommand for a test.
+
+ The test to be executed
+
+
+
+ Runs the test in a specified context, returning a TestResult.
+
+ The TestExecutionContext to be used for running the test.
+ A TestResult
+
+
+
+ Gets the test associated with this command.
+
+
+
+ TODO: Documentation needed for field
+
+
+ TODO: Documentation needed for method
+
+
+
+ TODO: Documentation needed for constructor
+
+
+
+
+
+ Initializes a new instance of the class.
+
+ The inner command.
+ The max time allowed in milliseconds
+
+
+
+ Runs the test, saving a TestResult in the supplied TestExecutionContext
+
+ The context in which the test should run.
+ A TestResult
+
+
+
+ The ITestListener interface is used internally to receive
+ notifications of significant events while a test is being
+ run. The events are propagated to clients by means of an
+ AsyncCallback. NUnit extensions may also monitor these events.
+
+
+
+
+ Called when a test has just started
+
+ The test that is starting
+
+
+
+ Called when a test has finished
+
+ The result of the test
+
+
+
+ Called when a test produces output for immediate display
+
+ A TestOutput object containing the text to display
+
+
+
+ The ITestAssemblyBuilder interface is implemented by a class
+ that is able to build a suite of tests given an assembly or
+ an assembly filename.
+
+
+
+
+ Build a suite of tests from a provided assembly
+
+ The assembly from which tests are to be built
+ A dictionary of options to use in building the suite
+ A TestSuite containing the tests found in the assembly
+
+
+
+ Build a suite of tests given the filename of an assembly
+
+ The filename of the assembly from which tests are to be built
+ A dictionary of options to use in building the suite
+ A TestSuite containing the tests found in the assembly
+
+
+
+ InternalTrace provides facilities for tracing the execution
+ of the NUnit framework. Tests and classes under test may make use
+ of Console writes, System.Diagnostics.Trace or various loggers and
+ NUnit itself traps and processes each of them. For that reason, a
+ separate internal trace is needed.
+
+ Note:
+ InternalTrace uses a global lock to allow multiple threads to write
+ trace messages. This can easily make it a bottleneck so it must be
+ used sparingly. Keep the trace Level as low as possible and only
+ insert InternalTrace writes where they are needed.
+ TODO: add some buffering and a separate writer thread as an option.
+ TODO: figure out a way to turn on trace in specific classes only.
+
+
+
+
+ Initialize the internal trace facility using the name of the log
+ to be written to and the trace level.
+
+ The log name
+ The trace level
+
+
+
+ Initialize the internal trace using a provided TextWriter and level
+
+ A TextWriter
+ The InternalTraceLevel
+
+
+
+ Get a named Logger
+
+
+
+
+
+ Get a logger named for a particular Type.
+
+
+
+
+ Gets a flag indicating whether the InternalTrace is initialized
+
+
+
+
+ The ITypeInfo interface is an abstraction of a .NET Type
+
+
+
+
+ Returns true if the Type wrapped is equal to the argument
+
+
+
+
+ Get the display name for this typeInfo.
+
+
+
+
+ Get the display name for an oject of this type, constructed with specific arguments
+
+
+
+
+ Returns a Type representing a generic type definition from which this Type can be constructed.
+
+
+
+
+ Returns a new ITypeInfo representing an instance of this generic Type using the supplied Type arguments
+
+
+
+
+ Returns a value indicating whether this type has a method with a specified public attribute
+
+
+
+
+ Returns an array of IMethodInfos for methods of this Type
+ that match the specified flags.
+
+
+
+
+ Gets the public constructor taking the specified argument Types
+
+
+
+
+ Returns a value indicating whether this Type has a public constructor taking the specified argument Types.
+
+
+
+
+ Construct an object of this Type, using the specified arguments.
+
+
+
+
+ Gets the underlying Type on which this ITypeInfo is based
+
+
+
+
+ Gets the base type of this type as an ITypeInfo
+
+
+
+
+ Gets the Name of the Type
+
+
+
+
+ Gets the FullName of the Type
+
+
+
+
+ Gets the assembly in which the type is declared
+
+
+
+
+ Gets the Namespace of the Type
+
+
+
+
+ Gets a value indicating whether the type is abstract.
+
+
+
+
+ Gets a value indicating whether the Type is a generic Type
+
+
+
+
+ Gets a value indicating whether the Type has generic parameters that have not been replaced by specific Types.
+
+
+
+
+ Gets a value indicating whether the Type is a generic Type definition
+
+
+
+
+ Gets a value indicating whether the type is sealed.
+
+
+
+
+ Gets a value indicating whether this type is a static class.
+
+
+
+
+ Applies the constraint to an actual value, returning a ConstraintResult.
+
+ The value to be tested
+ A ConstraintResult
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ Defines methods to manipulate thread-safe collections intended for producer/consumer usage.
+
+ Specifies the type of elements in the collection.
+
+ All implementations of this interface must enable all members of this interface
+ to be used concurrently from multiple threads.
+
+
+
+
+ Attempts to add an object to the .
+
+ The object to add to the .
+ true if the object was added successfully; otherwise, false.
+ The was invalid for this collection.
+
+
+
+ Attempts to remove and return an object from the .
+
+
+ When this method returns, if the object was removed and returned successfully, contains the removed object. If no object was available to be removed, the value is
+ unspecified.
+
+ true if an object was removed and returned successfully; otherwise, false.
+
+
+
+ Copies the elements contained in the to a new array.
+
+ A new array containing the elements copied from the .
+
+
+
+ Copies the elements of the to
+ an
+ , starting at a specified index.
+
+ The one-dimensional that is the destination of
+ the elements copied from the .
+ The array must have zero-based indexing.
+ The zero-based index in at which copying
+ begins.
+ is a null reference (Nothing in
+ Visual Basic).
+ is less than
+ zero.
+ is equal to or greater than the
+ length of the
+ -or- The number of elements in the source is greater than the
+ available space from to the end of the destination .
+
+
+
+
+ Provide the context information of the current test.
+ This is an adapter for the internal ExecutionContext
+ class, hiding the internals from the user test.
+
+
+
+
+
+
+
+
+
+ Construct a TestContext for an ExecutionContext
+
+ The ExecutionContext to adapt
+
+
+
+ Gets a TextWriter that will send output directly to Console.Error
+
+
+
+
+ Gets a TextWriter for use in displaying immediate progress messages
+
+
+
+
+ TestParameters object holds parameters for the test run, if any are specified
+
+
+
+ Write the string representation of a boolean value to the current result
+
+
+ Write a char to the current result
+
+
+ Write a char array to the current result
+
+
+ Write the string representation of a double to the current result
+
+
+ Write the string representation of an Int32 value to the current result
+
+
+ Write the string representation of an Int64 value to the current result
+
+
+ Write the string representation of a decimal value to the current result
+
+
+ Write the string representation of an object to the current result
+
+
+ Write the string representation of a Single value to the current result
+
+
+ Write a string to the current result
+
+
+ Write the string representation of a UInt32 value to the current result
+
+
+ Write the string representation of a UInt64 value to the current result
+
+
+ Write a formatted string to the current result
+
+
+ Write a formatted string to the current result
+
+
+ Write a formatted string to the current result
+
+
+ Write a formatted string to the current result
+
+
+ Write a line terminator to the current result
+
+
+ Write the string representation of a boolean value to the current result followed by a line terminator
+
+
+ Write a char to the current result followed by a line terminator
+
+
+ Write a char array to the current result followed by a line terminator
+
+
+ Write the string representation of a double to the current result followed by a line terminator
+
+
+ Write the string representation of an Int32 value to the current result followed by a line terminator
+
+
+ Write the string representation of an Int64 value to the current result followed by a line terminator
+
+
+ Write the string representation of a decimal value to the current result followed by a line terminator
+
+
+ Write the string representation of an object to the current result followed by a line terminator
+
+
+ Write the string representation of a Single value to the current result followed by a line terminator
+
+
+ Write a string to the current result followed by a line terminator
+
+
+ Write the string representation of a UInt32 value to the current result followed by a line terminator
+
+
+ Write the string representation of a UInt64 value to the current result followed by a line terminator
+
+
+ Write a formatted string to the current result followed by a line terminator
+
+
+ Write a formatted string to the current result followed by a line terminator
+
+
+ Write a formatted string to the current result followed by a line terminator
+
+
+ Write a formatted string to the current result followed by a line terminator
+
+
+
+ This method adds the a new ValueFormatterFactory to the
+ chain of responsibility used for fomatting values in messages.
+ The scope of the change is the current TestContext.
+
+ The factory delegate
+
+
+
+ This method provides a simplified way to add a ValueFormatter
+ delegate to the chain of responsibility, creating the factory
+ delegate internally. It is useful when the Type of the object
+ is the only criterion for selection of the formatter, since
+ it can be used without getting involved with a compould function.
+
+ The type supported by this formatter
+ The ValueFormatter delegate
+
+
+
+ Get the current test context. This is created
+ as needed. The user may save the context for
+ use within a test, but it should not be used
+ outside the test for which it is created.
+
+
+
+
+ Gets a TextWriter that will send output to the current test result.
+
+
+
+
+ Get a representation of the current test.
+
+
+
+
+ Gets a Representation of the TestResult for the current test.
+
+
+
+
+ Gets the unique name of the Worker that is executing this test.
+
+
+
+
+ Gets the directory containing the current test assembly.
+
+
+
+
+ Gets the directory to be used for outputting files created
+ by this test run.
+
+
+
+
+ Gets the random generator.
+
+
+ The random generator.
+
+
+
+
+ TestAdapter adapts a Test for consumption by
+ the user test code.
+
+
+
+
+ Construct a TestAdapter for a Test
+
+ The Test to be adapted
+
+
+
+ Gets the unique Id of a test
+
+
+
+
+ The name of the test, which may or may not be
+ the same as the method name.
+
+
+
+
+ The name of the method representing the test.
+
+
+
+
+ The FullName of the test
+
+
+
+
+ The ClassName of the test
+
+
+
+
+ The properties of the test.
+
+
+
+
+ ResultAdapter adapts a TestResult for consumption by
+ the user test code.
+
+
+
+
+ Construct a ResultAdapter for a TestResult
+
+ The TestResult to be adapted
+
+
+
+ Gets a ResultState representing the outcome of the test.
+
+
+
+
+ Gets the message associated with a test
+ failure or with not running the test
+
+
+
+
+ Gets any stacktrace associated with an
+ error or failure.
+
+
+
+
+ Gets the number of test cases that failed
+ when running the test and all its children.
+
+
+
+
+ Gets the number of test cases that passed
+ when running the test and all its children.
+
+
+
+
+ Gets the number of test cases that were skipped
+ when running the test and all its children.
+
+
+
+
+ Gets the number of test cases that were inconclusive
+ when running the test and all its children.
+
+
+
+
+ ExceptionHelper provides static methods for working with exceptions
+
+
+
+
+ Rethrows an exception, preserving its stack trace
+
+ The exception to rethrow
+
+
+
+ Builds up a message, using the Message field of the specified exception
+ as well as any InnerExceptions.
+
+ The exception.
+ A combined message string.
+
+
+
+ Builds up a message, using the Message field of the specified exception
+ as well as any InnerExceptions.
+
+ The exception.
+ A combined stack trace.
+
+
+
+ Gets the stack trace of the exception.
+
+ The exception.
+ A string representation of the stack trace.
+
+
+
+ CultureDetector is a helper class used by NUnit to determine
+ whether a test should be run based on the current culture.
+
+
+
+
+ Default constructor uses the current culture.
+
+
+
+
+ Construct a CultureDetector for a particular culture for testing.
+
+ The culture to be used
+
+
+
+ Test to determine if one of a collection of cultures
+ is being used currently.
+
+
+
+
+
+
+ Tests to determine if the current culture is supported
+ based on a culture attribute.
+
+ The attribute to examine
+
+
+
+
+ Test to determine if the a particular culture or comma-
+ delimited set of cultures is in use.
+
+ Name of the culture or comma-separated list of culture ids
+ True if the culture is in use on the system
+
+
+
+ Return the last failure reason. Results are not
+ defined if called before IsSupported( Attribute )
+ is called.
+
+
+
+
+ PairwiseStrategy creates test cases by combining the parameter
+ data so that all possible pairs of data items are used.
+
+
+
+ The number of test cases that cover all possible pairs of test function
+ parameters values is significantly less than the number of test cases
+ that cover all possible combination of test function parameters values.
+ And because different studies show that most of software failures are
+ caused by combination of no more than two parameters, pairwise testing
+ can be an effective ways to test the system when it's impossible to test
+ all combinations of parameters.
+
+
+ The PairwiseStrategy code is based on "jenny" tool by Bob Jenkins:
+ http://burtleburtle.net/bob/math/jenny.html
+
+
+
+
+
+ Gets the test cases generated by this strategy instance.
+
+ A set of test cases.
+
+
+
+ FleaRand is a pseudo-random number generator developed by Bob Jenkins:
+ http://burtleburtle.net/bob/rand/talksmall.html#flea
+
+
+
+
+ Initializes a new instance of the FleaRand class.
+
+ The seed.
+
+
+
+ FeatureInfo represents coverage of a single value of test function
+ parameter, represented as a pair of indices, Dimension and Feature. In
+ terms of unit testing, Dimension is the index of the test parameter and
+ Feature is the index of the supplied value in that parameter's list of
+ sources.
+
+
+
+
+ Initializes a new instance of FeatureInfo class.
+
+ Index of a dimension.
+ Index of a feature.
+
+
+
+ A FeatureTuple represents a combination of features, one per test
+ parameter, which should be covered by a test case. In the
+ PairwiseStrategy, we are only trying to cover pairs of features, so the
+ tuples actually may contain only single feature or pair of features, but
+ the algorithm itself works with triplets, quadruples and so on.
+
+
+
+
+ Initializes a new instance of FeatureTuple class for a single feature.
+
+ Single feature.
+
+
+
+ Initializes a new instance of FeatureTuple class for a pair of features.
+
+ First feature.
+ Second feature.
+
+
+
+ TestCase represents a single test case covering a list of features.
+
+
+
+
+ Initializes a new instance of TestCaseInfo class.
+
+ A number of features in the test case.
+
+
+
+ PairwiseTestCaseGenerator class implements an algorithm which generates
+ a set of test cases which covers all pairs of possible values of test
+ function.
+
+
+
+ The algorithm starts with creating a set of all feature tuples which we
+ will try to cover (see method). This set
+ includes every single feature and all possible pairs of features. We
+ store feature tuples in the 3-D collection (where axes are "dimension",
+ "feature", and "all combinations which includes this feature"), and for
+ every two feature (e.g. "A" and "B") we generate both ("A", "B") and
+ ("B", "A") pairs. This data structure extremely reduces the amount of
+ time needed to calculate coverage for a single test case (this
+ calculation is the most time-consuming part of the algorithm).
+
+
+ Then the algorithm picks one tuple from the uncovered tuple, creates a
+ test case that covers this tuple, and then removes this tuple and all
+ other tuples covered by this test case from the collection of uncovered
+ tuples.
+
+
+ Picking a tuple to cover
+
+
+ There are no any special rules defined for picking tuples to cover. We
+ just pick them one by one, in the order they were generated.
+
+
+ Test generation
+
+
+ Test generation starts from creating a completely random test case which
+ covers, nevertheless, previously selected tuple. Then the algorithm
+ tries to maximize number of tuples which this test covers.
+
+
+ Test generation and maximization process repeats seven times for every
+ selected tuple and then the algorithm picks the best test case ("seven"
+ is a magic number which provides good results in acceptable time).
+
+ Maximizing test coverage
+
+ To maximize tests coverage, the algorithm walks thru the list of mutable
+ dimensions (mutable dimension is a dimension that are not included in
+ the previously selected tuple). Then for every dimension, the algorithm
+ walks thru the list of features and checks if this feature provides
+ better coverage than randomly selected feature, and if yes keeps this
+ feature.
+
+
+ This process repeats while it shows progress. If the last iteration
+ doesn't improve coverage, the process ends.
+
+
+ In addition, for better results, before start every iteration, the
+ algorithm "scrambles" dimensions - so for every iteration dimension
+ probes in a different order.
+
+
+
+
+
+ Creates a set of test cases for specified dimensions.
+
+
+ An array which contains information about dimensions. Each element of
+ this array represents a number of features in the specific dimension.
+
+
+ A set of test cases.
+
+
+
+
+ Provides data from fields marked with the DatapointAttribute or the
+ DatapointsAttribute.
+
+
+
+
+ The IDataPointProvider interface is used by extensions
+ that provide data for a single test parameter.
+
+
+
+
+ Determine whether any data is available for a parameter.
+
+ An IParameterInfo representing one
+ argument to a parameterized test
+ True if any data is available, otherwise false.
+
+
+
+ Return an IEnumerable providing data for use with the
+ supplied parameter.
+
+ An IParameterInfo representing one
+ argument to a parameterized test
+ An IEnumerable providing the required data
+
+
+
+ Determine whether any data is available for a parameter.
+
+ A ParameterInfo representing one
+ argument to a parameterized test
+
+ True if any data is available, otherwise false.
+
+
+
+
+ Return an IEnumerable providing data for use with the
+ supplied parameter.
+
+ A ParameterInfo representing one
+ argument to a parameterized test
+
+ An IEnumerable providing the required data
+
+
+
+
+ CombinatorialStrategy creates test cases by using all possible
+ combinations of the parameter data.
+
+
+
+
+ Gets the test cases generated by the CombiningStrategy.
+
+ The test cases.
+
+
+
+ ThrowsNothingConstraint tests that a delegate does not
+ throw an exception.
+
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True if no exception is thrown, otherwise false
+
+
+
+ Applies the constraint to an ActualValueDelegate that returns
+ the value to be tested. The default implementation simply evaluates
+ the delegate but derived classes may override it to provide for
+ delayed processing.
+
+ An ActualValueDelegate
+ A ConstraintResult
+
+
+
+ Gets text describing a constraint
+
+
+
+
+ Operator that requires at least one of it's arguments to succeed
+
+
+
+
+ Abstract base class for all binary operators
+
+
+
+
+ The ConstraintOperator class is used internally by a
+ ConstraintBuilder to represent an operator that
+ modifies or combines constraints.
+
+ Constraint operators use left and right precedence
+ _values to determine whether the top operator on the
+ stack should be reduced before pushing a new operator.
+
+
+
+
+ The precedence value used when the operator
+ is about to be pushed to the stack.
+
+
+
+
+ The precedence value used when the operator
+ is on the top of the stack.
+
+
+
+
+ Reduce produces a constraint from the operator and
+ any arguments. It takes the arguments from the constraint
+ stack and pushes the resulting constraint on it.
+
+
+
+
+
+ The syntax element preceding this operator
+
+
+
+
+ The syntax element following this operator
+
+
+
+
+ The precedence value used when the operator
+ is about to be pushed to the stack.
+
+
+
+
+ The precedence value used when the operator
+ is on the top of the stack.
+
+
+
+
+ Reduce produces a constraint from the operator and
+ any arguments. It takes the arguments from the constraint
+ stack and pushes the resulting constraint on it.
+
+
+
+
+
+ Abstract method that produces a constraint by applying
+ the operator to its left and right constraint arguments.
+
+
+
+
+ Gets the left precedence of the operator
+
+
+
+
+ Gets the right precedence of the operator
+
+
+
+
+ Construct an OrOperator
+
+
+
+
+ Apply the operator to produce an OrConstraint
+
+
+
+
+ The Numerics class contains common operations on numeric _values.
+
+
+
+
+ Checks the type of the object, returning true if
+ the object is a numeric type.
+
+ The object to check
+ true if the object is a numeric type
+
+
+
+ Checks the type of the object, returning true if
+ the object is a floating point numeric type.
+
+ The object to check
+ true if the object is a floating point numeric type
+
+
+
+ Checks the type of the object, returning true if
+ the object is a fixed point numeric type.
+
+ The object to check
+ true if the object is a fixed point numeric type
+
+
+
+ Test two numeric _values for equality, performing the usual numeric
+ conversions and using a provided or default tolerance. If the tolerance
+ provided is Empty, this method may set it to a default tolerance.
+
+ The expected value
+ The actual value
+ A reference to the tolerance in effect
+ True if the _values are equal
+
+
+
+ Compare two numeric _values, performing the usual numeric conversions.
+
+ The expected value
+ The actual value
+ The relationship of the _values to each other
+
+
+
+ FalseConstraint tests that the actual value is false
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for success, false for failure
+
+
+
+ TestFixtureAttribute is used to mark a class that represents a TestFixture.
+
+
+
+
+ The ITestCaseData interface is implemented by a class
+ that is able to return the data required to create an
+ instance of a parameterized test fixture.
+
+
+
+
+ The ITestData interface is implemented by a class that
+ represents a single instance of a parameterized test.
+
+
+
+
+ Gets the name to be used for the test
+
+
+
+
+ Gets the RunState for this test case.
+
+
+
+
+ Gets the argument list to be provided to the test
+
+
+
+
+ Gets the property dictionary for the test case
+
+
+
+
+ Get the TypeArgs if separately set
+
+
+
+
+ Default constructor
+
+
+
+
+ Construct with a object[] representing a set of arguments.
+ In .NET 2.0, the arguments may later be separated into
+ type arguments and constructor arguments.
+
+
+
+
+
+ Build a fixture from type provided. Normally called for a Type
+ on which the attribute has been placed.
+
+ The type info of the fixture to be used.
+ A an IEnumerable holding one TestFixture object.
+
+
+
+ Gets or sets the name of the test.
+
+ The name of the test.
+
+
+
+ Gets or sets the RunState of this test fixture.
+
+
+
+
+ The arguments originally provided to the attribute
+
+
+
+
+ Properties pertaining to this fixture
+
+
+
+
+ Get or set the type arguments. If not set
+ explicitly, any leading arguments that are
+ Types are taken as type arguments.
+
+
+
+
+ Descriptive text for this fixture
+
+
+
+
+ The author of this fixture
+
+
+
+
+ The type that this fixture is testing
+
+
+
+
+ Gets or sets the ignore reason. May set RunState as a side effect.
+
+ The ignore reason.
+
+
+
+ Gets or sets the reason for not running the fixture.
+
+ The reason.
+
+
+
+ Gets or sets the ignore reason. When set to a non-null
+ non-empty value, the test is marked as ignored.
+
+ The ignore reason.
+
+
+
+ Gets or sets a value indicating whether this is explicit.
+
+
+ true if explicit; otherwise, false.
+
+
+
+
+ Gets and sets the category for this fixture.
+ May be a comma-separated list of categories.
+
+
+
+
+ TestCaseAttribute is used to mark parameterized test cases
+ and provide them with their arguments.
+
+
+
+
+ The ITestCaseData interface is implemented by a class
+ that is able to return complete testcases for use by
+ a parameterized test method.
+
+
+
+
+ Gets the expected result of the test case
+
+
+
+
+ Returns true if an expected result has been set
+
+
+
+
+ IImplyFixture is an empty marker interface used by attributes like
+ TestAttribute that cause the class where they are used to be treated
+ as a TestFixture even without a TestFixtureAttribute.
+
+ Marker interfaces are not usually considered a good practice, but
+ we use it here to avoid cluttering the attribute hierarchy with
+ classes that don't contain any extra implementation.
+
+
+
+
+ Construct a TestCaseAttribute with a list of arguments.
+ This constructor is not CLS-Compliant
+
+
+
+
+
+ Construct a TestCaseAttribute with a single argument
+
+
+
+
+
+ Construct a TestCaseAttribute with a two arguments
+
+
+
+
+
+
+ Construct a TestCaseAttribute with a three arguments
+
+
+
+
+
+
+
+ Performs several special conversions allowed by NUnit in order to
+ permit arguments with types that cannot be used in the constructor
+ of an Attribute such as TestCaseAttribute or to simplify their use.
+
+ The arguments to be converted
+ The ParameterInfo array for the method
+
+
+
+ Construct one or more TestMethods from a given MethodInfo,
+ using available parameter data.
+
+ The MethodInfo for which tests are to be constructed.
+ The suite to which the tests will be added.
+ One or more TestMethods
+
+
+
+ Gets or sets the name of the test.
+
+ The name of the test.
+
+
+
+ Gets or sets the RunState of this test case.
+
+
+
+
+ Gets the list of arguments to a test case
+
+
+
+
+ Gets the properties of the test case
+
+
+
+
+ Gets or sets the expected result.
+
+ The result.
+
+
+
+ Returns true if the expected result has been set
+
+
+
+
+ Gets or sets the description.
+
+ The description.
+
+
+
+ The author of this test
+
+
+
+
+ The type that this test is testing
+
+
+
+
+ Gets or sets the reason for ignoring the test
+
+
+
+
+ Gets or sets a value indicating whether this is explicit.
+
+
+ true if explicit; otherwise, false.
+
+
+
+
+ Gets or sets the reason for not running the test.
+
+ The reason.
+
+
+
+ Gets or sets the ignore reason. When set to a non-null
+ non-empty value, the test is marked as ignored.
+
+ The ignore reason.
+
+
+
+ Comma-delimited list of platforms to run the test for
+
+
+
+
+ Comma-delimited list of platforms to not run the test for
+
+
+
+
+ Gets and sets the category for this test case.
+ May be a comma-separated list of categories.
+
+
+
+
+ GenericMethodHelper is able to deduce the Type arguments for
+ a generic method from the actual arguments provided.
+
+
+
+
+ Construct a GenericMethodHelper for a method
+
+ MethodInfo for the method to examine
+
+
+
+ Return the type argments for the method, deducing them
+ from the arguments actually provided.
+
+ The arguments to the method
+ An array of type arguments.
+
+
+
+ TestActionCommand runs the BeforeTest actions for a test,
+ then runs the test and finally runs the AfterTestActions.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The inner command.
+
+
+
+ Runs the test, saving a TestResult in the supplied TestExecutionContext.
+
+ The context in which the test should run.
+ A TestResult
+
+
+
+ Provides internal logging to the NUnit framework
+
+
+
+
+ Interface for logging within the engine
+
+
+
+
+ Logs the specified message at the error level.
+
+ The message.
+
+
+
+ Logs the specified message at the error level.
+
+ The message.
+ The arguments.
+
+
+
+ Logs the specified message at the warning level.
+
+ The message.
+
+
+
+ Logs the specified message at the warning level.
+
+ The message.
+ The arguments.
+
+
+
+ Logs the specified message at the info level.
+
+ The message.
+
+
+
+ Logs the specified message at the info level.
+
+ The message.
+ The arguments.
+
+
+
+ Logs the specified message at the debug level.
+
+ The message.
+
+
+
+ Logs the specified message at the debug level.
+
+ The message.
+ The arguments.
+
+
+
+ Initializes a new instance of the class.
+
+ The name.
+ The log level.
+ The writer where logs are sent.
+
+
+
+ Logs the message at error level.
+
+ The message.
+
+
+
+ Logs the message at error level.
+
+ The message.
+ The message arguments.
+
+
+
+ Logs the message at warm level.
+
+ The message.
+
+
+
+ Logs the message at warning level.
+
+ The message.
+ The message arguments.
+
+
+
+ Logs the message at info level.
+
+ The message.
+
+
+
+ Logs the message at info level.
+
+ The message.
+ The message arguments.
+
+
+
+ Logs the message at debug level.
+
+ The message.
+
+
+
+ Logs the message at debug level.
+
+ The message.
+ The message arguments.
+
+
+
+ ClassName filter selects tests based on the class FullName
+
+
+
+
+ Construct a FullNameFilter for a single name
+
+ The name the filter will recognize.
+
+
+
+ Match a test against a single value.
+
+
+
+
+ Gets the element name
+
+ Element name
+
+
+
+ PropertyFilter is able to select or exclude tests
+ based on their properties.
+
+
+
+
+
+ Construct a PropertyFilter using a property name and expected value
+
+ A property name
+ The expected value of the property
+
+
+
+ Check whether the filter matches a test
+
+ The test to be matched
+
+
+
+
+ Adds an XML node
+
+ Parent node
+ True if recursive
+ The added XML node
+
+
+
+ Gets the element name
+
+ Element name
+
+
+
+ Env is a static class that provides some of the features of
+ System.Environment that are not available under all runtimes
+
+
+
+
+ The newline sequence in the current environment.
+
+
+
+
+ Path to the 'My Documents' folder
+
+
+
+
+ Directory used for file output if not specified on commandline.
+
+
+
+
+ The Assert class contains a collection of static methods that
+ implement the most common assertions used in NUnit.
+
+
+ The Assert class contains a collection of static methods that
+ implement the most common assertions used in NUnit.
+
+
+
+
+ Asserts that a condition is true. If the condition is false the method throws
+ an .
+
+ The evaluated condition
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a condition is true. If the condition is false the method throws
+ an .
+
+ The evaluated condition
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a condition is true. If the condition is false the method throws
+ an .
+
+ The evaluated condition
+
+
+
+ Asserts that a condition is true. If the condition is false the method throws
+ an .
+
+ The evaluated condition
+
+
+
+ Asserts that a condition is true. If the condition is false the method throws
+ an .
+
+ The evaluated condition
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a condition is true. If the condition is false the method throws
+ an .
+
+ The evaluated condition
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a condition is true. If the condition is false the method throws
+ an .
+
+ The evaluated condition
+
+
+
+ Asserts that a condition is true. If the condition is false the method throws
+ an .
+
+ The evaluated condition
+
+
+
+ Asserts that a condition is false. If the condition is true the method throws
+ an .
+
+ The evaluated condition
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a condition is false. If the condition is true the method throws
+ an .
+
+ The evaluated condition
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a condition is false. If the condition is true the method throws
+ an .
+
+ The evaluated condition
+
+
+
+ Asserts that a condition is false. If the condition is true the method throws
+ an .
+
+ The evaluated condition
+
+
+
+ Asserts that a condition is false. If the condition is true the method throws
+ an .
+
+ The evaluated condition
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a condition is false. If the condition is true the method throws
+ an .
+
+ The evaluated condition
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a condition is false. If the condition is true the method throws
+ an .
+
+ The evaluated condition
+
+
+
+ Asserts that a condition is false. If the condition is true the method throws
+ an .
+
+ The evaluated condition
+
+
+
+ Verifies that the object that is passed in is not equal to null
+ If the object is null
then an
+ is thrown.
+
+ The object that is to be tested
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the object that is passed in is not equal to null
+ If the object is null
then an
+ is thrown.
+
+ The object that is to be tested
+
+
+
+ Verifies that the object that is passed in is not equal to null
+ If the object is null
then an
+ is thrown.
+
+ The object that is to be tested
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the object that is passed in is not equal to null
+ If the object is null
then an
+ is thrown.
+
+ The object that is to be tested
+
+
+
+ Verifies that the object that is passed in is equal to null
+ If the object is not null
then an
+ is thrown.
+
+ The object that is to be tested
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the object that is passed in is equal to null
+ If the object is not null
then an
+ is thrown.
+
+ The object that is to be tested
+
+
+
+ Verifies that the object that is passed in is equal to null
+ If the object is not null
then an
+ is thrown.
+
+ The object that is to be tested
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the object that is passed in is equal to null
+ If the object is not null
then an
+ is thrown.
+
+ The object that is to be tested
+
+
+
+ Verifies that the double that is passed in is an NaN
value.
+ If the object is not NaN
then an
+ is thrown.
+
+ The value that is to be tested
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the double that is passed in is an NaN
value.
+ If the object is not NaN
then an
+ is thrown.
+
+ The value that is to be tested
+
+
+
+ Verifies that the double that is passed in is an NaN
value.
+ If the object is not NaN
then an
+ is thrown.
+
+ The value that is to be tested
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the double that is passed in is an NaN
value.
+ If the object is not NaN
then an
+ is thrown.
+
+ The value that is to be tested
+
+
+
+ Assert that a string is empty - that is equal to string.Empty
+
+ The string to be tested
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Assert that a string is empty - that is equal to string.Empty
+
+ The string to be tested
+
+
+
+ Assert that an array, list or other collection is empty
+
+ An array, list or other collection implementing ICollection
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Assert that an array, list or other collection is empty
+
+ An array, list or other collection implementing ICollection
+
+
+
+ Assert that a string is not empty - that is not equal to string.Empty
+
+ The string to be tested
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Assert that a string is not empty - that is not equal to string.Empty
+
+ The string to be tested
+
+
+
+ Assert that an array, list or other collection is not empty
+
+ An array, list or other collection implementing ICollection
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Assert that an array, list or other collection is not empty
+
+ An array, list or other collection implementing ICollection
+
+
+
+ Asserts that an int is zero.
+
+ The number to be examined
+
+
+
+ Asserts that an int is zero.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that an unsigned int is zero.
+
+ The number to be examined
+
+
+
+ Asserts that an unsigned int is zero.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a Long is zero.
+
+ The number to be examined
+
+
+
+ Asserts that a Long is zero.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that an unsigned Long is zero.
+
+ The number to be examined
+
+
+
+ Asserts that an unsigned Long is zero.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a decimal is zero.
+
+ The number to be examined
+
+
+
+ Asserts that a decimal is zero.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a double is zero.
+
+ The number to be examined
+
+
+
+ Asserts that a double is zero.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a float is zero.
+
+ The number to be examined
+
+
+
+ Asserts that a float is zero.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that an int is not zero.
+
+ The number to be examined
+
+
+
+ Asserts that an int is not zero.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that an unsigned int is not zero.
+
+ The number to be examined
+
+
+
+ Asserts that an unsigned int is not zero.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a Long is not zero.
+
+ The number to be examined
+
+
+
+ Asserts that a Long is not zero.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that an unsigned Long is not zero.
+
+ The number to be examined
+
+
+
+ Asserts that an unsigned Long is not zero.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a decimal is zero.
+
+ The number to be examined
+
+
+
+ Asserts that a decimal is zero.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a double is zero.
+
+ The number to be examined
+
+
+
+ Asserts that a double is zero.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a float is zero.
+
+ The number to be examined
+
+
+
+ Asserts that a float is zero.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that an int is negative.
+
+ The number to be examined
+
+
+
+ Asserts that an int is negative.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that an unsigned int is negative.
+
+ The number to be examined
+
+
+
+ Asserts that an unsigned int is negative.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a Long is negative.
+
+ The number to be examined
+
+
+
+ Asserts that a Long is negative.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that an unsigned Long is negative.
+
+ The number to be examined
+
+
+
+ Asserts that an unsigned Long is negative.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a decimal is negative.
+
+ The number to be examined
+
+
+
+ Asserts that a decimal is negative.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a double is negative.
+
+ The number to be examined
+
+
+
+ Asserts that a double is negative.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a float is negative.
+
+ The number to be examined
+
+
+
+ Asserts that a float is negative.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that an int is negative.
+
+ The number to be examined
+
+
+
+ Asserts that an int is negative.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that an unsigned int is negative.
+
+ The number to be examined
+
+
+
+ Asserts that an unsigned int is negative.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a Long is negative.
+
+ The number to be examined
+
+
+
+ Asserts that a Long is negative.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that an unsigned Long is negative.
+
+ The number to be examined
+
+
+
+ Asserts that an unsigned Long is negative.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a decimal is negative.
+
+ The number to be examined
+
+
+
+ Asserts that a decimal is negative.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a double is negative.
+
+ The number to be examined
+
+
+
+ Asserts that a double is negative.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that a float is negative.
+
+ The number to be examined
+
+
+
+ Asserts that a float is negative.
+
+ The number to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that an object may be assigned a value of a given Type.
+
+ The expected Type.
+ The object under examination
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that an object may be assigned a value of a given Type.
+
+ The expected Type.
+ The object under examination
+
+
+
+ Asserts that an object may be assigned a value of a given Type.
+
+ The expected Type.
+ The object under examination
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that an object may be assigned a value of a given Type.
+
+ The expected Type.
+ The object under examination
+
+
+
+ Asserts that an object may not be assigned a value of a given Type.
+
+ The expected Type.
+ The object under examination
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that an object may not be assigned a value of a given Type.
+
+ The expected Type.
+ The object under examination
+
+
+
+ Asserts that an object may not be assigned a value of a given Type.
+
+ The expected Type.
+ The object under examination
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that an object may not be assigned a value of a given Type.
+
+ The expected Type.
+ The object under examination
+
+
+
+ Asserts that an object is an instance of a given type.
+
+ The expected Type
+ The object being examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that an object is an instance of a given type.
+
+ The expected Type
+ The object being examined
+
+
+
+ Asserts that an object is an instance of a given type.
+
+ The expected Type
+ The object being examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that an object is an instance of a given type.
+
+ The expected Type
+ The object being examined
+
+
+
+ Asserts that an object is not an instance of a given type.
+
+ The expected Type
+ The object being examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that an object is not an instance of a given type.
+
+ The expected Type
+ The object being examined
+
+
+
+ Asserts that an object is not an instance of a given type.
+
+ The expected Type
+ The object being examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that an object is not an instance of a given type.
+
+ The expected Type
+ The object being examined
+
+
+
+ Verifies that a delegate throws a particular exception when called.
+
+ A constraint to be satisfied by the exception
+ A TestSnippet delegate
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Verifies that a delegate throws a particular exception when called.
+
+ A constraint to be satisfied by the exception
+ A TestSnippet delegate
+
+
+
+ Verifies that a delegate throws a particular exception when called.
+
+ The exception Type expected
+ A TestDelegate
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Verifies that a delegate throws a particular exception when called.
+
+ The exception Type expected
+ A TestDelegate
+
+
+
+ Verifies that a delegate throws a particular exception when called.
+
+ Type of the expected exception
+ A TestDelegate
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Verifies that a delegate throws a particular exception when called.
+
+ Type of the expected exception
+ A TestDelegate
+
+
+
+ Verifies that a delegate throws an exception when called
+ and returns it.
+
+ A TestDelegate
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Verifies that a delegate throws an exception when called
+ and returns it.
+
+ A TestDelegate
+
+
+
+ Verifies that a delegate throws an exception of a certain Type
+ or one derived from it when called and returns it.
+
+ The expected Exception Type
+ A TestDelegate
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Verifies that a delegate throws an exception of a certain Type
+ or one derived from it when called and returns it.
+
+ The expected Exception Type
+ A TestDelegate
+
+
+
+ Verifies that a delegate throws an exception of a certain Type
+ or one derived from it when called and returns it.
+
+ A TestDelegate
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Verifies that a delegate throws an exception of a certain Type
+ or one derived from it when called and returns it.
+
+ A TestDelegate
+
+
+
+ Verifies that a delegate does not throw an exception
+
+ A TestDelegate
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Verifies that a delegate does not throw an exception.
+
+ A TestDelegate
+
+
+
+ Asserts that a condition is true. If the condition is false the method throws
+ an .
+
+ The evaluated condition
+ The message to display if the condition is false
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that a condition is true. If the condition is false the method throws
+ an .
+
+ The evaluated condition
+
+
+
+ Asserts that a condition is true. If the condition is false the method throws
+ an .
+
+ The evaluated condition
+ A function to build the message included with the Exception
+
+
+
+ Asserts that a condition is true. If the condition is false the method throws
+ an .
+
+ A lambda that returns a Boolean
+ The message to display if the condition is false
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that a condition is true. If the condition is false the method throws
+ an .
+
+ A lambda that returns a Boolean
+
+
+
+ Asserts that a condition is true. If the condition is false the method throws
+ an .
+
+ A lambda that returns a Boolean
+ A function to build the message included with the Exception
+
+
+
+ Apply a constraint to an actual value, succeeding if the constraint
+ is satisfied and throwing an assertion exception on failure.
+
+ The Type being compared.
+ An ActualValueDelegate returning the value to be tested
+ A Constraint expression to be applied
+
+
+
+ Apply a constraint to an actual value, succeeding if the constraint
+ is satisfied and throwing an assertion exception on failure.
+
+ The Type being compared.
+ An ActualValueDelegate returning the value to be tested
+ A Constraint expression to be applied
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Apply a constraint to an actual value, succeeding if the constraint
+ is satisfied and throwing an assertion exception on failure.
+
+ The Type being compared.
+ An ActualValueDelegate returning the value to be tested
+ A Constraint expression to be applied
+ A function to build the message included with the Exception
+
+
+
+ Asserts that the code represented by a delegate throws an exception
+ that satisfies the constraint provided.
+
+ A TestDelegate to be executed
+ A ThrowsConstraint used in the test
+
+
+
+ Asserts that the code represented by a delegate throws an exception
+ that satisfies the constraint provided.
+
+ A TestDelegate to be executed
+ A ThrowsConstraint used in the test
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that the code represented by a delegate throws an exception
+ that satisfies the constraint provided.
+
+ A TestDelegate to be executed
+ A ThrowsConstraint used in the test
+ A function to build the message included with the Exception
+
+
+
+ Apply a constraint to an actual value, succeeding if the constraint
+ is satisfied and throwing an assertion exception on failure.
+
+ The Type being compared.
+ The actual value to test
+ A Constraint to be applied
+
+
+
+ Apply a constraint to an actual value, succeeding if the constraint
+ is satisfied and throwing an assertion exception on failure.
+
+ The Type being compared.
+ The actual value to test
+ A Constraint expression to be applied
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Apply a constraint to an actual value, succeeding if the constraint
+ is satisfied and throwing an assertion exception on failure.
+
+ The Type being compared.
+ The actual value to test
+ A Constraint expression to be applied
+ A function to build the message included with the Exception
+
+
+
+ Apply a constraint to an actual value, succeeding if the constraint
+ is satisfied and throwing an assertion exception on failure.
+ Used as a synonym for That in rare cases where a private setter
+ causes a Visual Basic compilation error.
+
+ The actual value to test
+ A Constraint to be applied
+
+
+
+ Apply a constraint to an actual value, succeeding if the constraint
+ is satisfied and throwing an assertion exception on failure.
+ Used as a synonym for That in rare cases where a private setter
+ causes a Visual Basic compilation error.
+
+
+ This method is provided for use by VB developers needing to test
+ the value of properties with private setters.
+
+ The actual value to test
+ A Constraint expression to be applied
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ We don't actually want any instances of this object, but some people
+ like to inherit from it to add other static methods. Hence, the
+ protected constructor disallows any instances of this object.
+
+
+
+
+ The Equals method throws an InvalidOperationException. This is done
+ to make sure there is no mistake by calling this function.
+
+
+
+
+
+
+ override the default ReferenceEquals to throw an InvalidOperationException. This
+ implementation makes sure there is no mistake in calling this function
+ as part of Assert.
+
+
+
+
+
+
+ Throws a with the message and arguments
+ that are passed in. This allows a test to be cut short, with a result
+ of success returned to NUnit.
+
+ The message to initialize the with.
+ Arguments to be used in formatting the message
+
+
+
+ Throws a with the message and arguments
+ that are passed in. This allows a test to be cut short, with a result
+ of success returned to NUnit.
+
+ The message to initialize the with.
+
+
+
+ Throws a with the message and arguments
+ that are passed in. This allows a test to be cut short, with a result
+ of success returned to NUnit.
+
+
+
+
+ Throws an with the message and arguments
+ that are passed in. This is used by the other Assert functions.
+
+ The message to initialize the with.
+ Arguments to be used in formatting the message
+
+
+
+ Throws an with the message that is
+ passed in. This is used by the other Assert functions.
+
+ The message to initialize the with.
+
+
+
+ Throws an .
+ This is used by the other Assert functions.
+
+
+
+
+ Throws an with the message and arguments
+ that are passed in. This causes the test to be reported as ignored.
+
+ The message to initialize the with.
+ Arguments to be used in formatting the message
+
+
+
+ Throws an with the message that is
+ passed in. This causes the test to be reported as ignored.
+
+ The message to initialize the with.
+
+
+
+ Throws an .
+ This causes the test to be reported as ignored.
+
+
+
+
+ Throws an with the message and arguments
+ that are passed in. This causes the test to be reported as inconclusive.
+
+ The message to initialize the with.
+ Arguments to be used in formatting the message
+
+
+
+ Throws an with the message that is
+ passed in. This causes the test to be reported as inconclusive.
+
+ The message to initialize the with.
+
+
+
+ Throws an .
+ This causes the test to be reported as Inconclusive.
+
+
+
+
+ Asserts that an object is contained in a list.
+
+ The expected object
+ The list to be examined
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that an object is contained in a list.
+
+ The expected object
+ The list to be examined
+
+
+
+ Verifies that the first int is greater than the second
+ int. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first int is greater than the second
+ int. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+
+
+
+ Verifies that the first value is greater than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is greater than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+
+
+
+ Verifies that the first value is greater than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is greater than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+
+
+
+ Verifies that the first value is greater than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is greater than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+
+
+
+ Verifies that the first value is greater than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is greater than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+
+
+
+ Verifies that the first value is greater than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is greater than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+
+
+
+ Verifies that the first value is greater than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is greater than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+
+
+
+ Verifies that the first value is greater than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is greater than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+
+
+
+ Verifies that the first value is less than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is less than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+
+
+
+ Verifies that the first value is less than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is less than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+
+
+
+ Verifies that the first value is less than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is less than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+
+
+
+ Verifies that the first value is less than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is less than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+
+
+
+ Verifies that the first value is less than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is less than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+
+
+
+ Verifies that the first value is less than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is less than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+
+
+
+ Verifies that the first value is less than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is less than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+
+
+
+ Verifies that the first value is less than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is less than the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+
+
+
+ Verifies that the first value is greater than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is greater than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+
+
+
+ Verifies that the first value is greater than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is greater than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+
+
+
+ Verifies that the first value is greater than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is greater than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+
+
+
+ Verifies that the first value is greater than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is greater than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+
+
+
+ Verifies that the first value is greater than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is greater than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+
+
+
+ Verifies that the first value is greater than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is greater than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+
+
+
+ Verifies that the first value is greater than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is greater than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+
+
+
+ Verifies that the first value is greater than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is greater than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be greater
+ The second value, expected to be less
+
+
+
+ Verifies that the first value is less than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is less than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+
+
+
+ Verifies that the first value is less than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is less than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+
+
+
+ Verifies that the first value is less than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is less than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+
+
+
+ Verifies that the first value is less than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is less than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+
+
+
+ Verifies that the first value is less than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is less than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+
+
+
+ Verifies that the first value is less than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is less than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+
+
+
+ Verifies that the first value is less than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is less than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+
+
+
+ Verifies that the first value is less than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that the first value is less than or equal to the second
+ value. If it is not, then an
+ is thrown.
+
+ The first value, expected to be less
+ The second value, expected to be greater
+
+
+
+ Verifies that two doubles are equal considering a delta. If the
+ expected value is infinity then the delta value is ignored. If
+ they are not equal then an is
+ thrown.
+
+ The expected value
+ The actual value
+ The maximum acceptable difference between the
+ the expected and the actual
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that two doubles are equal considering a delta. If the
+ expected value is infinity then the delta value is ignored. If
+ they are not equal then an is
+ thrown.
+
+ The expected value
+ The actual value
+ The maximum acceptable difference between the
+ the expected and the actual
+
+
+
+ Verifies that two doubles are equal considering a delta. If the
+ expected value is infinity then the delta value is ignored. If
+ they are not equal then an is
+ thrown.
+
+ The expected value
+ The actual value
+ The maximum acceptable difference between the
+ the expected and the actual
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that two doubles are equal considering a delta. If the
+ expected value is infinity then the delta value is ignored. If
+ they are not equal then an is
+ thrown.
+
+ The expected value
+ The actual value
+ The maximum acceptable difference between the
+ the expected and the actual
+
+
+
+ Verifies that two objects are equal. Two objects are considered
+ equal if both are null, or if both have the same value. NUnit
+ has special semantics for some object types.
+ If they are not equal an is thrown.
+
+ The value that is expected
+ The actual value
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that two objects are equal. Two objects are considered
+ equal if both are null, or if both have the same value. NUnit
+ has special semantics for some object types.
+ If they are not equal an is thrown.
+
+ The value that is expected
+ The actual value
+
+
+
+ Verifies that two objects are not equal. Two objects are considered
+ equal if both are null, or if both have the same value. NUnit
+ has special semantics for some object types.
+ If they are equal an is thrown.
+
+ The value that is expected
+ The actual value
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Verifies that two objects are not equal. Two objects are considered
+ equal if both are null, or if both have the same value. NUnit
+ has special semantics for some object types.
+ If they are equal an is thrown.
+
+ The value that is expected
+ The actual value
+
+
+
+ Asserts that two objects refer to the same object. If they
+ are not the same an is thrown.
+
+ The expected object
+ The actual object
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that two objects refer to the same object. If they
+ are not the same an is thrown.
+
+ The expected object
+ The actual object
+
+
+
+ Asserts that two objects do not refer to the same object. If they
+ are the same an is thrown.
+
+ The expected object
+ The actual object
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Asserts that two objects do not refer to the same object. If they
+ are the same an is thrown.
+
+ The expected object
+ The actual object
+
+
+
+ Helper for Assert.AreEqual(double expected, double actual, ...)
+ allowing code generation to work consistently.
+
+ The expected value
+ The actual value
+ The maximum acceptable difference between the
+ the expected and the actual
+ The message to display in case of failure
+ Array of objects to be used in formatting the message
+
+
+
+ Represents a constraint that succeeds if all the
+ members of a collection match a base constraint.
+
+
+
+
+ Abstract base for operators that indicate how to
+ apply a constraint to items in a collection.
+
+
+
+
+ PrefixOperator takes a single constraint and modifies
+ it's action in some way.
+
+
+
+
+ Reduce produces a constraint from the operator and
+ any arguments. It takes the arguments from the constraint
+ stack and pushes the resulting constraint on it.
+
+
+
+
+
+ Returns the constraint created by applying this
+ prefix to another constraint.
+
+
+
+
+
+
+ Constructs a CollectionOperator
+
+
+
+
+ Returns a constraint that will apply the argument
+ to the members of a collection, succeeding if
+ they all succeed.
+
+
+
+
+ FileExistsConstraint is used to determine if a file exists
+
+
+
+
+ FileOrDirectoryExistsConstraint is used to determine if a file or directory exists
+
+
+
+
+ Initializes a new instance of the class that
+ will check files and directories.
+
+
+
+
+ Initializes a new instance of the class that
+ will only check files if ignoreDirectories is true.
+
+ if set to true [ignore directories].
+
+
+
+ Applies the constraint to an actual value, returning a ConstraintResult.
+
+ The value to be tested
+ A ConstraintResult
+
+
+
+ If true, the constraint will only check if files exist, not directories
+
+
+
+
+ If true, the constraint will only check if directories exist, not files
+
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ TestAssemblyDirectoryResolveAttribute is used to mark a test assembly as needing a
+ special assembly resolution hook that will explicitly search the test assembly's
+ directory for dependent assemblies. This works around a conflict between mixed-mode
+ assembly initialization and tests running in their own AppDomain in some cases.
+
+
+
+
+ Helper methods for inspecting a type by reflection.
+
+ Many of these methods take ICustomAttributeProvider as an
+ argument to avoid duplication, even though certain attributes can
+ only appear on specific types of members, like MethodInfo or Type.
+
+ In the case where a type is being examined for the presence of
+ an attribute, interface or named member, the Reflect methods
+ operate with the full name of the member being sought. This
+ removes the necessity of the caller having a reference to the
+ assembly that defines the item being sought and allows the
+ NUnit core to inspect assemblies that reference an older
+ version of the NUnit framework.
+
+
+
+
+ Examine a fixture type and return an array of methods having a
+ particular attribute. The array is order with base methods first.
+
+ The type to examine
+ The attribute Type to look for
+ Specifies whether to search the fixture type inheritance chain
+ The array of methods found
+
+
+
+ Examine a fixture type and return true if it has a method with
+ a particular attribute.
+
+ The type to examine
+ The attribute Type to look for
+ True if found, otherwise false
+
+
+
+ Invoke the default constructor on a Type
+
+ The Type to be constructed
+ An instance of the Type
+
+
+
+ Invoke a constructor on a Type with arguments
+
+ The Type to be constructed
+ Arguments to the constructor
+ An instance of the Type
+
+
+
+ Returns an array of types from an array of objects.
+ Used because the compact framework doesn't support
+ Type.GetTypeArray()
+
+ An array of objects
+ An array of Types
+
+
+
+ Invoke a parameterless method returning void on an object.
+
+ A MethodInfo for the method to be invoked
+ The object on which to invoke the method
+
+
+
+ Invoke a method, converting any TargetInvocationException to an NUnitException.
+
+ A MethodInfo for the method to be invoked
+ The object on which to invoke the method
+ The argument list for the method
+ The return value from the invoked method
+
+
+
+
+
+
+
+
+ Constructor delegate, makes it possible to use a factory to create objects
+
+
+
+
+ InvalidTestFixtureException is thrown when an appropriate test
+ fixture constructor using the provided arguments cannot be found.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The message.
+
+
+
+ Initializes a new instance of the class.
+
+ The message.
+ The inner.
+
+
+
+ Serialization Constructor
+
+
+
+
+ Class to build ether a parameterized or a normal NUnitTestMethod.
+ There are four cases that the builder must deal with:
+ 1. The method needs no params and none are provided
+ 2. The method needs params and they are provided
+ 3. The method needs no params but they are provided in error
+ 4. The method needs params but they are not provided
+ This could have been done using two different builders, but it
+ turned out to be simpler to have just one. The BuildFrom method
+ takes a different branch depending on whether any parameters are
+ provided, but all four cases are dealt with in lower-level methods
+
+
+
+
+ The ITestCaseBuilder interface is exposed by a class that knows how to
+ build a test case from certain methods.
+
+
+ This interface is not the same as the ITestCaseBuilder interface in NUnit 2.x.
+ We have reused the name because the two products don't interoperate at all.
+
+
+
+
+ Examine the method and determine if it is suitable for
+ this builder to use in building a TestCase to be
+ included in the suite being populated.
+
+ Note that returning false will cause the method to be ignored
+ in loading the tests. If it is desired to load the method
+ but label it as non-runnable, ignored, etc., then this
+ method must return true.
+
+ The test method to examine
+ The suite being populated
+ True is the builder can use this method
+
+
+
+ Build a TestCase from the provided MethodInfo for
+ inclusion in the suite being constructed.
+
+ The method to be used as a test case
+ The test suite being populated, or null
+ A TestCase or null
+
+
+
+ Determines if the method can be used to build an NUnit test
+ test method of some kind. The method must normally be marked
+ with an identifying attribute for this to be true.
+
+ Note that this method does not check that the signature
+ of the method for validity. If we did that here, any
+ test methods with invalid signatures would be passed
+ over in silence in the test run. Since we want such
+ methods to be reported, the check for validity is made
+ in BuildFrom rather than here.
+
+ An IMethodInfo for the method being used as a test method
+ True if the builder can create a test case from this method
+
+
+
+ Build a Test from the provided MethodInfo. Depending on
+ whether the method takes arguments and on the availability
+ of test case data, this method may return a single test
+ or a group of tests contained in a ParameterizedMethodSuite.
+
+ The method for which a test is to be built
+ A Test representing one or more method invocations
+
+
+
+ Determines if the method can be used to build an NUnit test
+ test method of some kind. The method must normally be marked
+ with an identifying attribute for this to be true.
+
+ Note that this method does not check that the signature
+ of the method for validity. If we did that here, any
+ test methods with invalid signatures would be passed
+ over in silence in the test run. Since we want such
+ methods to be reported, the check for validity is made
+ in BuildFrom rather than here.
+
+ An IMethodInfo for the method being used as a test method
+ The test suite being built, to which the new test would be added
+ True if the builder can create a test case from this method
+
+
+
+ Build a Test from the provided MethodInfo. Depending on
+ whether the method takes arguments and on the availability
+ of test case data, this method may return a single test
+ or a group of tests contained in a ParameterizedMethodSuite.
+
+ The method for which a test is to be built
+ The test fixture being populated, or null
+ A Test representing one or more method invocations
+
+
+
+ Builds a ParameterizedMethodSuite containing individual test cases.
+
+ The method for which a test is to be built.
+ The list of test cases to include.
+ A ParameterizedMethodSuite populated with test cases
+
+
+
+ Build a simple, non-parameterized TestMethod for this method.
+
+ The MethodInfo for which a test is to be built
+ The test suite for which the method is being built
+ A TestMethod.
+
+
+
+ Abstract base class for operators that are able to reduce to a
+ constraint whether or not another syntactic element follows.
+
+
+
+
+ NUnitEqualityComparer encapsulates NUnit's handling of
+ equality tests between objects.
+
+
+
+
+ If true, all string comparisons will ignore case
+
+
+
+
+ If true, arrays will be treated as collections, allowing
+ those of different dimensions to be compared
+
+
+
+
+ Comparison objects used in comparisons for some constraints.
+
+
+
+
+ List of points at which a failure occurred.
+
+
+
+
+ Compares two objects for equality within a tolerance.
+
+
+
+
+ Helper method to compare two arrays
+
+
+
+
+ Method to compare two DirectoryInfo objects
+
+ first directory to compare
+ second directory to compare
+ true if equivalent, false if not
+
+
+
+ Returns the default NUnitEqualityComparer
+
+
+
+
+ Gets and sets a flag indicating whether case should
+ be ignored in determining equality.
+
+
+
+
+ Gets and sets a flag indicating that arrays should be
+ compared as collections, without regard to their shape.
+
+
+
+
+ Gets the list of external comparers to be used to
+ test for equality. They are applied to members of
+ collections, in place of NUnit's own logic.
+
+
+
+
+ Gets the list of failure points for the last Match performed.
+ The list consists of objects to be interpreted by the caller.
+ This generally means that the caller may only make use of
+ objects it has placed on the list at a particular depthy.
+
+
+
+
+ Flags the comparer to include
+ property in comparison of two values.
+
+
+ Using this modifier does not allow to use the
+ modifier.
+
+
+
+
+ FailurePoint class represents one point of failure
+ in an equality test.
+
+
+
+
+ The location of the failure
+
+
+
+
+ The expected value
+
+
+
+
+ The actual value
+
+
+
+
+ Indicates whether the expected value is valid
+
+
+
+
+ Indicates whether the actual value is valid
+
+
+
+
+ NullConstraint tests that the actual value is null
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Applies the constraint to an actual value, returning a ConstraintResult.
+
+ The value to be tested
+ A ConstraintResult
+
+
+
+ CollectionSubsetConstraint is used to determine whether
+ one collection is a subset of another
+
+
+
+
+ Construct a CollectionSubsetConstraint
+
+ The collection that the actual value is expected to be a subset of
+
+
+
+ Test whether the actual collection is a subset of
+ the expected collection provided.
+
+
+
+
+
+
+ Flag the constraint to use the supplied predicate function
+
+ The comparison function to use.
+ Self.
+
+
+
+ The display name of this Constraint for use by ToString().
+ The default value is the name of the constraint with
+ trailing "Constraint" removed. Derived classes may set
+ this to another name in their constructors.
+
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ AndConstraint succeeds only if both members succeed.
+
+
+
+
+ BinaryConstraint is the abstract base of all constraints
+ that combine two other constraints in some fashion.
+
+
+
+
+ The first constraint being combined
+
+
+
+
+ The second constraint being combined
+
+
+
+
+ Construct a BinaryConstraint from two other constraints
+
+ The first constraint
+ The second constraint
+
+
+
+ Create an AndConstraint from two other constraints
+
+ The first constraint
+ The second constraint
+
+
+
+ Apply both member constraints to an actual value, succeeding
+ succeeding only if both of them succeed.
+
+ The actual value
+ True if the constraints both succeeded
+
+
+
+ Gets text describing a constraint
+
+
+
+
+ Contain the result of matching a against an actual value.
+
+
+
+
+ Constructs a for a particular .
+
+ The Constraint to which this result applies.
+ The actual value to which the Constraint was applied.
+
+
+
+ Constructs a for a particular .
+
+ The Constraint to which this result applies.
+ The actual value to which the Constraint was applied.
+ The status of the new ConstraintResult.
+
+
+
+ Constructs a for a particular .
+
+ The Constraint to which this result applies.
+ The actual value to which the Constraint was applied.
+ If true, applies a status of Success to the result, otherwise Failure.
+
+
+
+ Write the failure message to the MessageWriter provided
+ as an argument. The default implementation simply passes
+ the result and the actual value to the writer, which
+ then displays the constraint description and the value.
+
+ Constraints that need to provide additional details,
+ such as where the error occured can override this.
+
+ The MessageWriter on which to display the message
+
+
+
+ Write the actual value for a failing constraint test to a
+ MessageWriter. The default implementation simply writes
+ the raw value of actual, leaving it to the writer to
+ perform any formatting.
+
+ The writer on which the actual value is displayed
+
+
+
+ The actual value that was passed to the method.
+
+
+
+
+ Gets and sets the ResultStatus for this result.
+
+
+
+
+ True if actual value meets the Constraint criteria otherwise false.
+
+
+
+
+ Display friendly name of the constraint.
+
+
+
+
+ Description of the constraint may be affected by the state the constraint had
+ when was performed against the actual value.
+
+
+
+
+ Write the actual value for a failing constraint test to a
+ MessageWriter. The default implementation simply writes
+ the raw value of actual, leaving it to the writer to
+ perform any formatting.
+
+ The writer on which the actual value is displayed
+
+
+
+ Attribute used to identify a method that is called after
+ all the tests in a fixture have run. The method is
+ guaranteed to be called, even if an exception is thrown.
+
+
+
+
+ Attribute used to identify a method that is called once
+ after all the child tests have run. The method is
+ guaranteed to be called, even if an exception is thrown.
+
+
+
+
+ PlatformAttribute is used to mark a test fixture or an
+ individual method as applying to a particular platform only.
+
+
+
+
+ Constructor with no platforms specified, for use
+ with named property syntax.
+
+
+
+
+ Constructor taking one or more platforms
+
+ Comma-delimited list of platforms
+
+
+
+ Causes a test to be skipped if this PlatformAttribute is not satisfied.
+
+ The test to modify
+
+
+
+ Attribute used to mark a test that is to be ignored.
+ Ignored tests result in a warning message when the
+ tests are run.
+
+
+
+
+ Constructs the attribute giving a reason for ignoring the test
+ GetActionsFromAttributeProvider
+ The reason for ignoring the test
+
+
+
+ Modifies a test by marking it as Ignored.
+
+ The test to modify
+
+
+
+
+
+
+
+
+ The date in the future to stop ignoring the test as a string in UTC time.
+ For example for a date and time, "2014-12-25 08:10:00Z" or for just a date,
+ "2014-12-25". If just a date is given, the Ignore will expire at midnight UTC.
+
+
+ Once the ignore until date has passed, the test will be marked
+ as runnable. Tests with an ignore until date will have an IgnoreUntilDate
+ property set which will appear in the test results.
+
+ The string does not contain a valid string representation of a date and time.
+
+
+
+ The IApplyToContext interface is implemented by attributes
+ that want to make changes to the execution context before
+ a test is run.
+
+
+
+
+ Apply changes to the execution context
+
+ The execution context
+
+
+
+ A SimpleWorkItem represents a single test case and is
+ marked as completed immediately upon execution. This
+ class is also used for skipped or ignored test suites.
+
+
+
+
+ Construct a simple work item for a test.
+
+ The test to be executed
+ The filter used to select this test
+
+
+
+ Method that performs actually performs the work.
+
+
+
+
+ ContextSettingsCommand applies specified changes to the
+ TestExecutionContext prior to running a test. No special
+ action is needed after the test runs, since the prior
+ context will be restored automatically.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The RunState enum indicates whether a test can be executed.
+
+
+
+
+ The test is not runnable.
+
+
+
+
+ The test is runnable.
+
+
+
+
+ The test can only be run explicitly
+
+
+
+
+ The test has been skipped. This value may
+ appear on a Test when certain attributes
+ are used to skip the test.
+
+
+
+
+ The test has been ignored. May appear on
+ a Test, when the IgnoreAttribute is used.
+
+
+
+
+ Helper class with properties and methods that supply
+ a number of constraints used in Asserts.
+
+
+
+
+ Returns a new CollectionContainsConstraint checking for the
+ presence of a particular object in the collection.
+
+
+
+
+ Returns a new ContainsConstraint. This constraint
+ will, in turn, make use of the appropriate second-level
+ constraint, depending on the type of the actual argument.
+ This overload is only used if the item sought is a string,
+ since any other type implies that we are looking for a
+ collection member.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value starts with the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value ends with the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value matches the regular expression supplied as an argument.
+
+
+
+
+ Returns a ConstraintExpression that negates any
+ following constraint.
+
+
+
+
+ Returns a constraint that succeeds if the value
+ is a file or directory and it exists.
+
+
+
+
+ AssemblyHelper provides static methods for working
+ with assemblies.
+
+
+
+
+ Gets the path from which an assembly was loaded.
+ For builds where this is not possible, returns
+ the name of the assembly.
+
+ The assembly.
+ The path.
+
+
+
+ Gets the path to the directory from which an assembly was loaded.
+
+ The assembly.
+ The path.
+
+
+
+ Gets the AssemblyName of an assembly.
+
+ The assembly
+ An AssemblyName
+
+
+
+ Loads an assembly given a string, which may be the
+ path to the assembly or the AssemblyName
+
+
+
+
+
+
+ Gets the assembly path from code base.
+
+ Public for testing purposes
+ The code base.
+
+
+
+
+ FrameworkController provides a facade for use in loading, browsing
+ and running tests without requiring a reference to the NUnit
+ framework. All calls are encapsulated in constructors for
+ this class and its nested classes, which only require the
+ types of the Common Type System as arguments.
+
+ The controller supports four actions: Load, Explore, Count and Run.
+ They are intended to be called by a driver, which should allow for
+ proper sequencing of calls. Load must be called before any of the
+ other actions. The driver may support other actions, such as
+ reload on run, by combining these calls.
+
+
+
+
+ A MarshalByRefObject that lives forever
+
+
+
+
+ Obtains a lifetime service object to control the lifetime policy for this instance.
+
+
+
+
+ Construct a FrameworkController using the default builder and runner.
+
+ The AssemblyName or path to the test assembly
+ A prefix used for all test ids created under this controller.
+ A Dictionary of settings to use in loading and running the tests
+
+
+
+ Construct a FrameworkController using the default builder and runner.
+
+ The test assembly
+ A prefix used for all test ids created under this controller.
+ A Dictionary of settings to use in loading and running the tests
+
+
+
+ Construct a FrameworkController, specifying the types to be used
+ for the runner and builder. This constructor is provided for
+ purposes of development.
+
+ The full AssemblyName or the path to the test assembly
+ A prefix used for all test ids created under this controller.
+ A Dictionary of settings to use in loading and running the tests
+ The Type of the test runner
+ The Type of the test builder
+
+
+
+ Construct a FrameworkController, specifying the types to be used
+ for the runner and builder. This constructor is provided for
+ purposes of development.
+
+ The test assembly
+ A prefix used for all test ids created under this controller.
+ A Dictionary of settings to use in loading and running the tests
+ The Type of the test runner
+ The Type of the test builder
+
+
+
+ Loads the tests in the assembly
+
+
+
+
+
+ Returns info about the tests in an assembly
+
+ A string containing the XML representation of the filter to use
+ The XML result of exploring the tests
+
+
+
+ Runs the tests in an assembly
+
+ A string containing the XML representation of the filter to use
+ The XML result of the test run
+
+
+
+ Runs the tests in an assembly syncronously reporting back the test results through the callback
+ or through the return value
+
+ The callback that receives the test results
+ A string containing the XML representation of the filter to use
+ The XML result of the test run
+
+
+
+ Runs the tests in an assembly asyncronously reporting back the test results through the callback
+
+ The callback that receives the test results
+ A string containing the XML representation of the filter to use
+
+
+
+ Stops the test run
+
+ True to force the stop, false for a cooperative stop
+
+
+
+ Counts the number of test cases in the loaded TestSuite
+
+ A string containing the XML representation of the filter to use
+ The number of tests
+
+
+
+ Inserts environment element
+
+ Target node
+ The new node
+
+
+
+ Inserts settings element
+
+ Target node
+ Settings dictionary
+ The new node
+
+
+
+ Gets the ITestAssemblyBuilder used by this controller instance.
+
+ The builder.
+
+
+
+ Gets the ITestAssemblyRunner used by this controller instance.
+
+ The runner.
+
+
+
+ Gets the AssemblyName or the path for which this FrameworkController was created
+
+
+
+
+ Gets the Assembly for which this
+
+
+
+
+ Gets a dictionary of settings for the FrameworkController
+
+
+
+
+ A shim of the .NET interface for platforms that do not support it.
+ Used to indicate that a control can be the target of a callback event on the server.
+
+
+
+
+ Processes a callback event that targets a control.
+
+
+
+
+
+ Returns the results of a callback event that targets a control.
+
+
+
+
+
+ FrameworkControllerAction is the base class for all actions
+ performed against a FrameworkController.
+
+
+
+
+ LoadTestsAction loads a test into the FrameworkController
+
+
+
+
+ LoadTestsAction loads the tests in an assembly.
+
+ The controller.
+ The callback handler.
+
+
+
+ ExploreTestsAction returns info about the tests in an assembly
+
+
+
+
+ Initializes a new instance of the class.
+
+ The controller for which this action is being performed.
+ Filter used to control which tests are included (NYI)
+ The callback handler.
+
+
+
+ CountTestsAction counts the number of test cases in the loaded TestSuite
+ held by the FrameworkController.
+
+
+
+
+ Construct a CountsTestAction and perform the count of test cases.
+
+ A FrameworkController holding the TestSuite whose cases are to be counted
+ A string containing the XML representation of the filter to use
+ A callback handler used to report results
+
+
+
+ RunTestsAction runs the loaded TestSuite held by the FrameworkController.
+
+
+
+
+ Construct a RunTestsAction and run all tests in the loaded TestSuite.
+
+ A FrameworkController holding the TestSuite to run
+ A string containing the XML representation of the filter to use
+ A callback handler used to report results
+
+
+
+ RunAsyncAction initiates an asynchronous test run, returning immediately
+
+
+
+
+ Construct a RunAsyncAction and run all tests in the loaded TestSuite.
+
+ A FrameworkController holding the TestSuite to run
+ A string containing the XML representation of the filter to use
+ A callback handler used to report results
+
+
+
+ StopRunAction stops an ongoing run.
+
+
+
+
+ Construct a StopRunAction and stop any ongoing run. If no
+ run is in process, no error is raised.
+
+ The FrameworkController for which a run is to be stopped.
+ True the stop should be forced, false for a cooperative stop.
+ >A callback handler used to report results
+ A forced stop will cause threads and processes to be killed as needed.
+
+
+
+ ExceptionTypeConstraint is a special version of ExactTypeConstraint
+ used to provided detailed info about the exception thrown in
+ an error message.
+
+
+
+
+ ExactTypeConstraint is used to test that an object
+ is of the exact type provided in the constructor
+
+
+
+
+ Construct an ExactTypeConstraint for a given Type
+
+ The expected Type.
+
+
+
+ Apply the constraint to an actual value, returning true if it succeeds
+
+ The actual argument
+ True if the constraint succeeds, otherwise false.
+
+
+
+ The display name of this Constraint for use by ToString().
+ The default value is the name of the constraint with
+ trailing "Constraint" removed. Derived classes may set
+ this to another name in their constructors.
+
+
+
+
+ Constructs an ExceptionTypeConstraint
+
+
+
+
+ Applies the constraint to an actual value, returning a ConstraintResult.
+
+ The value to be tested
+ A ConstraintResult
+
+
+
+ TestProgressReporter translates ITestListener events into
+ the async callbacks that are used to inform the client
+ software about the progress of a test run.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The callback handler to be used for reporting progress.
+
+
+
+ Called when a test has just started
+
+ The test that is starting
+
+
+
+ Called when a test has finished. Sends a result summary to the callback.
+ to
+
+ The result of the test
+
+
+
+ Called when a test produces output for immediate display
+
+ A TestOutput object containing the text to display
+
+
+
+ Returns the parent test item for the targer test item if it exists
+
+
+ parent test item
+
+
+
+ Makes a string safe for use as an attribute, replacing
+ characters characters that can't be used with their
+ corresponding xml representations.
+
+ The string to be used
+ A new string with the _values replaced
+
+
+
+ Operator used to test for the presence of a named Property
+ on an object and optionally apply further tests to the
+ value of that property.
+
+
+
+
+ Constructs a PropOperator for a particular named property
+
+
+
+
+ Reduce produces a constraint from the operator and
+ any arguments. It takes the arguments from the constraint
+ stack and pushes the resulting constraint on it.
+
+
+
+
+
+ Gets the name of the property to which the operator applies
+
+
+
+
+ NaNConstraint tests that the actual value is a double or float NaN
+
+
+
+
+ Test that the actual value is an NaN
+
+
+
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ CollectionContainsConstraint is used to test whether a collection
+ contains an expected object as a member.
+
+
+
+
+ Construct a CollectionContainsConstraint
+
+
+
+
+
+ Test whether the expected item is contained in the collection
+
+
+
+
+
+
+ Flag the constraint to use the supplied predicate function
+
+ The comparison function to use.
+ Self.
+
+
+
+ The display name of this Constraint for use by ToString().
+ The default value is the name of the constraint with
+ trailing "Constraint" removed. Derived classes may set
+ this to another name in their constructors.
+
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ Gets the expected object
+
+
+
+
+ Attribute used to mark a class that contains one-time SetUp
+ and/or TearDown methods that apply to all the tests in a
+ namespace or an assembly.
+
+
+
+
+ Attribute used to mark a class that contains one-time SetUp
+ and/or TearDown methods that apply to all the tests in a
+ namespace or an assembly.
+
+
+
+
+ Attribute used to mark a class that contains one-time SetUp
+ and/or TearDown methods that apply to all the tests in a
+ namespace or an assembly.
+
+
+
+
+ RepeatAttribute may be applied to test case in order
+ to run it multiple times.
+
+
+
+
+ Construct a RepeatAttribute
+
+ The number of times to run the test
+
+
+
+ Wrap a command and return the result.
+
+ The command to be wrapped
+ The wrapped command
+
+
+
+ The test command for the RepeatAttribute
+
+
+
+
+ Initializes a new instance of the class.
+
+ The inner command.
+ The number of repetitions
+
+
+
+ Runs the test, saving a TestResult in the supplied TestExecutionContext.
+
+ The context in which the test should run.
+ A TestResult
+
+
+
+ A simplified implementation of .NET 4 CountdownEvent
+ for use in earlier versions of .NET. Only the methods
+ used by NUnit are implemented.
+
+
+
+
+ Construct a CountdownEvent
+
+ The initial count
+
+
+
+ Decrement the count by one
+
+
+
+
+ Block the thread until the count reaches zero
+
+
+
+
+ Gets the initial count established for the CountdownEvent
+
+
+
+
+ Gets the current count remaining for the CountdownEvent
+
+
+
+
+ TheoryResultCommand adjusts the result of a Theory so that
+ it fails if all the results were inconclusive.
+
+
+
+
+ Constructs a TheoryResultCommand
+
+ The command to be wrapped by this one
+
+
+
+ Overridden to call the inner command and adjust the result
+ in case all chlid results were inconclusive.
+
+
+
+
+
+
+ NUnitTestCaseBuilder is a utility class used by attributes
+ that build test cases.
+
+
+
+
+ Constructs an
+
+
+
+
+ Builds a single NUnitTestMethod, either as a child of the fixture
+ or as one of a set of test cases under a ParameterizedTestMethodSuite.
+
+ The MethodInfo from which to construct the TestMethod
+ The suite or fixture to which the new test will be added
+ The ParameterSet to be used, or null
+
+
+
+
+ Helper method that checks the signature of a TestMethod and
+ any supplied parameters to determine if the test is valid.
+
+ Currently, NUnitTestMethods are required to be public,
+ non-abstract methods, either static or instance,
+ returning void. They may take arguments but the _values must
+ be provided or the TestMethod is not considered runnable.
+
+ Methods not meeting these criteria will be marked as
+ non-runnable and the method will return false in that case.
+
+ The TestMethod to be checked. If it
+ is found to be non-runnable, it will be modified.
+ Parameters to be used for this test, or null
+ True if the method signature is valid, false if not
+
+ The return value is no longer used internally, but is retained
+ for testing purposes.
+
+
+
+
+ The TestStatus enum indicates the result of running a test
+
+
+
+
+ The test was inconclusive
+
+
+
+
+ The test has skipped
+
+
+
+
+ The test succeeded
+
+
+
+
+ The test failed
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TestNameGenerator is able to create test names according to
+ a coded pattern.
+
+
+
+
+ Default pattern used to generate names
+
+
+
+
+ Construct a TestNameGenerator
+
+
+
+
+ Construct a TestNameGenerator
+
+ The pattern used by this generator.
+
+
+
+ Get the display name for a TestMethod and it's arguments
+
+ A TestMethod
+ The display name
+
+
+
+ Get the display name for a TestMethod and it's arguments
+
+ A TestMethod
+ Arguments to be used
+ The display name
+
+
+
+ The EqualConstraintResult class is tailored for formatting
+ and displaying the result of an EqualConstraint.
+
+
+
+
+ Construct an EqualConstraintResult
+
+
+
+
+ Write a failure message. Overridden to provide custom
+ failure messages for EqualConstraint.
+
+ The MessageWriter to write to
+
+
+
+ Display the failure information for two collections that did not match.
+
+ The MessageWriter on which to display
+ The expected collection.
+ The actual collection
+ The depth of this failure in a set of nested collections
+
+
+
+ Displays a single line showing the types and sizes of the expected
+ and actual collections or arrays. If both are identical, the value is
+ only shown once.
+
+ The MessageWriter on which to display
+ The expected collection or array
+ The actual collection or array
+ The indentation level for the message line
+
+
+
+ Displays a single line showing the point in the expected and actual
+ arrays at which the comparison failed. If the arrays have different
+ structures or dimensions, both _values are shown.
+
+ The MessageWriter on which to display
+ The expected array
+ The actual array
+ Index of the failure point in the underlying collections
+ The indentation level for the message line
+
+
+
+ Display the failure information for two IEnumerables that did not match.
+
+ The MessageWriter on which to display
+ The expected enumeration.
+ The actual enumeration
+ The depth of this failure in a set of nested collections
+
+
+
+ Provides NUnit specific extensions to aid in Reflection
+ across multiple frameworks
+
+
+ This version of the class supplies GetTypeInfo() on platforms
+ that don't support it.
+
+
+
+
+ GetTypeInfo gives access to most of the Type information we take for granted
+ on .NET Core and Windows Runtime. Rather than #ifdef different code for different
+ platforms, it is easiest to just code all platforms as if they worked this way,
+ thus the simple passthrough.
+
+
+
+
+
+
+ Extensions for Assembly that are not available in pre-4.5 .NET releases
+
+
+
+
+ An easy way to get a single custom attribute from an assembly
+
+ The attribute Type
+ The assembly
+ An attribute of Type T
+
+
+
+ Type extensions that apply to all target frameworks
+
+
+
+
+ Determines if the given array is castable/matches the array.
+
+
+
+
+
+
+
+ Determines if one type can be implicitly converted from another
+
+
+
+
+
+
+
+ This class is used as a flag when we get a parameter list for a method/constructor, but
+ we do not know one of the types because null was passed in.
+
+
+
+
+ The TestCaseData class represents a set of arguments
+ and other parameter info to be used for a parameterized
+ test case. It is derived from TestCaseParameters and adds a
+ fluent syntax for use in initializing the test case.
+
+
+
+
+ The TestCaseParameters class encapsulates method arguments and
+ other selected parameters needed for constructing
+ a parameterized test case.
+
+
+
+
+ TestParameters is the abstract base class for all classes
+ that know how to provide data for constructing a test.
+
+
+
+
+ Default Constructor creates an empty parameter set
+
+
+
+
+ Construct a parameter set with a list of arguments
+
+
+
+
+
+ Construct a non-runnable ParameterSet, specifying
+ the provider exception that made it invalid.
+
+
+
+
+ Construct a ParameterSet from an object implementing ITestData
+
+
+
+
+
+ Applies ParameterSet _values to the test itself.
+
+ A test.
+
+
+
+ The RunState for this set of parameters.
+
+
+
+
+ The arguments to be used in running the test,
+ which must match the method signature.
+
+
+
+
+ A name to be used for this test case in lieu
+ of the standard generated name containing
+ the argument list.
+
+
+
+
+ Gets the property dictionary for this test
+
+
+
+
+ The original arguments provided by the user,
+ used for display purposes.
+
+
+
+
+ The expected result to be returned
+
+
+
+
+ Default Constructor creates an empty parameter set
+
+
+
+
+ Construct a non-runnable ParameterSet, specifying
+ the provider exception that made it invalid.
+
+
+
+
+ Construct a parameter set with a list of arguments
+
+
+
+
+
+ Construct a ParameterSet from an object implementing ITestCaseData
+
+
+
+
+
+ The expected result of the test, which
+ must match the method return type.
+
+
+
+
+ Gets a value indicating whether an expected result was specified.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The arguments.
+
+
+
+ Initializes a new instance of the class.
+
+ The argument.
+
+
+
+ Initializes a new instance of the class.
+
+ The first argument.
+ The second argument.
+
+
+
+ Initializes a new instance of the class.
+
+ The first argument.
+ The second argument.
+ The third argument.
+
+
+
+ Sets the expected result for the test
+
+ The expected result
+ A modified TestCaseData
+
+
+
+ Sets the name of the test case
+
+ The modified TestCaseData instance
+
+
+
+ Sets the description for the test case
+ being constructed.
+
+ The description.
+ The modified TestCaseData instance.
+
+
+
+ Applies a category to the test
+
+
+
+
+
+
+ Applies a named property to the test
+
+
+
+
+
+
+
+ Applies a named property to the test
+
+
+
+
+
+
+
+ Applies a named property to the test
+
+
+
+
+
+
+
+ Marks the test case as explicit.
+
+
+
+
+ Marks the test case as explicit, specifying the reason.
+
+
+
+
+ Ignores this TestCase, specifying the reason.
+
+ The reason.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Gets or sets the current test
+
+
+
+
+ The time the current test started execution
+
+
+
+
+ The time the current test started in Ticks
+
+
+
+
+ Gets or sets the current test result
+
+
+
+
+ Gets a TextWriter that will send output to the current test result.
+
+
+
+
+ The current test object - that is the user fixture
+ object on which tests are being executed.
+
+
+
+
+ Get or set the working directory
+
+
+
+
+ Get or set indicator that run should stop on the first error
+
+
+
+
+ Gets an enum indicating whether a stop has been requested.
+
+
+
+
+ The current WorkItemDispatcher. Made public for
+ use by nunitlite.tests
+
+
+
+
+ The ParallelScope to be used by tests running in this context.
+ For builds with out the parallel feature, it has no effect.
+
+
+
+
+ The unique name of the worker that spawned the context.
+ For builds with out the parallel feature, it is null.
+
+
+
+
+ Gets the RandomGenerator specific to this Test
+
+
+
+
+ Gets or sets the test case timeout value
+
+
+
+
+ Gets a list of ITestActions set by upstream tests
+
+
+
+
+ Saves or restores the CurrentCulture
+
+
+
+
+ Saves or restores the CurrentUICulture
+
+
+
+
+ The current head of the ValueFormatter chain, copied from MsgUtils.ValueFormatter
+
+
+
+
+ If true, all tests must run on the same thread. No new thread may be spawned.
+
+
+
+
+ Helper class used to save and restore certain static or
+ singleton settings in the environment that affect tests
+ or which might be changed by the user tests.
+
+ An internal class is used to hold settings and a stack
+ of these objects is pushed and popped as Save and Restore
+ are called.
+
+
+
+
+ Link to a prior saved context
+
+
+
+
+ Indicates that a stop has been requested
+
+
+
+
+ The event listener currently receiving notifications
+
+
+
+
+ The number of assertions for the current test
+
+
+
+
+ The current culture
+
+
+
+
+ The current UI culture
+
+
+
+
+ The current test result
+
+
+
+
+ The current Principal.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class.
+
+ An existing instance of TestExecutionContext.
+
+
+
+ Get the current context or return null if none is found.
+
+
+
+
+
+ Clear the current context. This is provided to
+ prevent "leakage" of the CallContext containing
+ the current context back to any runners.
+
+
+
+
+ Record any changes in the environment made by
+ the test code in the execution context so it
+ will be passed on to lower level tests.
+
+
+
+
+ Set up the execution environment to match a context.
+ Note that we may be running on the same thread where the
+ context was initially created or on a different thread.
+
+
+
+
+ Increments the assert count by one.
+
+
+
+
+ Increments the assert count by a specified amount.
+
+
+
+
+ Adds a new ValueFormatterFactory to the chain of formatters
+
+ The new factory
+
+
+
+ Obtain lifetime service object
+
+
+
+
+
+ Gets and sets the current context.
+
+
+
+
+ Gets or sets the current test
+
+
+
+
+ The time the current test started execution
+
+
+
+
+ The time the current test started in Ticks
+
+
+
+
+ Gets or sets the current test result
+
+
+
+
+ Gets a TextWriter that will send output to the current test result.
+
+
+
+
+ The current test object - that is the user fixture
+ object on which tests are being executed.
+
+
+
+
+ Get or set the working directory
+
+
+
+
+ Get or set indicator that run should stop on the first error
+
+
+
+
+ Gets an enum indicating whether a stop has been requested.
+
+
+
+
+ The current test event listener
+
+
+
+
+ The current WorkItemDispatcher. Made public for
+ use by nunitlite.tests
+
+
+
+
+ The ParallelScope to be used by tests running in this context.
+ For builds with out the parallel feature, it has no effect.
+
+
+
+
+ The unique name of the worker that spawned the context.
+ For builds with out the parallel feature, it is null.
+
+
+
+
+ Gets the RandomGenerator specific to this Test
+
+
+
+
+ Gets the assert count.
+
+ The assert count.
+
+
+
+ Gets or sets the test case timeout value
+
+
+
+
+ Gets a list of ITestActions set by upstream tests
+
+
+
+
+ Saves or restores the CurrentCulture
+
+
+
+
+ Saves or restores the CurrentUICulture
+
+
+
+
+ Gets or sets the current for the Thread.
+
+
+
+
+ The current head of the ValueFormatter chain, copied from MsgUtils.ValueFormatter
+
+
+
+
+ If true, all tests must run on the same thread. No new thread may be spawned.
+
+
+
+
+ Thrown when a test executes inconclusively.
+
+
+
+
+ Abstract base for Exceptions that terminate a test and provide a ResultState.
+
+
+
+ The error message that explains
+ the reason for the exception
+
+
+ The error message that explains
+ the reason for the exception
+ The exception that caused the
+ current exception
+
+
+
+ Serialization Constructor
+
+
+
+
+ Gets the ResultState provided by this exception
+
+
+
+ The error message that explains
+ the reason for the exception
+
+
+ The error message that explains
+ the reason for the exception
+ The exception that caused the
+ current exception
+
+
+
+ Serialization Constructor
+
+
+
+
+ Gets the ResultState provided by this exception
+
+
+
+
+ Helper class with properties and methods that supply
+ a number of constraints used in Asserts.
+
+
+
+
+ Returns a new CollectionContainsConstraint checking for the
+ presence of a particular object in the collection.
+
+
+
+
+ Returns a new DictionaryContainsKeyConstraint checking for the
+ presence of a particular key in the dictionary.
+
+
+
+
+ Returns a new DictionaryContainsValueConstraint checking for the
+ presence of a particular value in the dictionary.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value contains the substring supplied as an argument.
+
+
+
+
+ EqualConstraint is able to compare an actual value with the
+ expected value provided in its constructor. Two objects are
+ considered equal if both are null, or if both have the same
+ value. NUnit has special semantics for some object types.
+
+
+
+
+ NUnitEqualityComparer used to test equality.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The expected value.
+
+
+
+ Flag the constraint to use a tolerance when determining equality.
+
+ Tolerance value to be used
+ Self.
+
+
+
+ Flag the constraint to use the supplied IComparer object.
+
+ The IComparer object to use.
+ Self.
+
+
+
+ Flag the constraint to use the supplied IComparer object.
+
+ The IComparer object to use.
+ Self.
+
+
+
+ Flag the constraint to use the supplied Comparison object.
+
+ The IComparer object to use.
+ Self.
+
+
+
+ Flag the constraint to use the supplied IEqualityComparer object.
+
+ The IComparer object to use.
+ Self.
+
+
+
+ Flag the constraint to use the supplied IEqualityComparer object.
+
+ The IComparer object to use.
+ Self.
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for success, false for failure
+
+
+
+ Gets the tolerance for this comparison.
+
+
+ The tolerance.
+
+
+
+
+ Gets a value indicating whether to compare case insensitive.
+
+
+ true if comparing case insensitive; otherwise, false.
+
+
+
+
+ Gets a value indicating whether or not to clip strings.
+
+
+ true if set to clip strings otherwise, false.
+
+
+
+
+ Gets the failure points.
+
+
+ The failure points.
+
+
+
+
+ Flag the constraint to ignore case and return self.
+
+
+
+
+ Flag the constraint to suppress string clipping
+ and return self.
+
+
+
+
+ Flag the constraint to compare arrays as collections
+ and return self.
+
+
+
+
+ Flags the constraint to include
+ property in comparison of two values.
+
+
+ Using this modifier does not allow to use the
+ constraint modifier.
+
+
+
+
+ Switches the .Within() modifier to interpret its tolerance as
+ a distance in representable _values (see remarks).
+
+ Self.
+
+ Ulp stands for "unit in the last place" and describes the minimum
+ amount a given value can change. For any integers, an ulp is 1 whole
+ digit. For floating point _values, the accuracy of which is better
+ for smaller numbers and worse for larger numbers, an ulp depends
+ on the size of the number. Using ulps for comparison of floating
+ point results instead of fixed tolerances is safer because it will
+ automatically compensate for the added inaccuracy of larger numbers.
+
+
+
+
+ Switches the .Within() modifier to interpret its tolerance as
+ a percentage that the actual _values is allowed to deviate from
+ the expected value.
+
+ Self
+
+
+
+ Causes the tolerance to be interpreted as a TimeSpan in days.
+
+ Self
+
+
+
+ Causes the tolerance to be interpreted as a TimeSpan in hours.
+
+ Self
+
+
+
+ Causes the tolerance to be interpreted as a TimeSpan in minutes.
+
+ Self
+
+
+
+ Causes the tolerance to be interpreted as a TimeSpan in seconds.
+
+ Self
+
+
+
+ Causes the tolerance to be interpreted as a TimeSpan in milliseconds.
+
+ Self
+
+
+
+ Causes the tolerance to be interpreted as a TimeSpan in clock ticks.
+
+ Self
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ Applies a delay to the match so that a match can be evaluated in the future.
+
+
+
+
+ Creates a new DelayedConstraint
+
+ The inner constraint to decorate
+ The time interval after which the match is performed
+ If the value of is less than 0
+
+
+
+ Creates a new DelayedConstraint
+
+ The inner constraint to decorate
+ The time interval after which the match is performed, in milliseconds
+ The time interval used for polling, in milliseconds
+ If the value of is less than 0
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for if the base constraint fails, false if it succeeds
+
+
+
+ Test whether the constraint is satisfied by a delegate
+
+ The delegate whose value is to be tested
+ A ConstraintResult
+
+
+
+ Test whether the constraint is satisfied by a given reference.
+ Overridden to wait for the specified delay period before
+ calling the base constraint with the dereferenced value.
+
+ A reference to the value to be tested
+ True for success, false for failure
+
+
+
+ Returns the string representation of the constraint.
+
+
+
+
+ Adjusts a Timestamp by a given TimeSpan
+
+
+
+
+
+
+
+ Returns the difference between two Timestamps as a TimeSpan
+
+
+
+
+
+
+
+ Gets text describing a constraint
+
+
+
+
+ CollectionOrderedConstraint is used to test whether a collection is ordered.
+
+
+
+
+ Construct a CollectionOrderedConstraint
+
+
+
+
+ Modifies the constraint to use an and returns self.
+
+
+
+
+ Modifies the constraint to use an and returns self.
+
+
+
+
+ Modifies the constraint to use a and returns self.
+
+
+
+
+ Modifies the constraint to test ordering by the value of
+ a specified property and returns self.
+
+
+
+
+ Test whether the collection is ordered
+
+
+
+
+
+
+ Returns the string representation of the constraint.
+
+
+
+
+
+ The display name of this Constraint for use by ToString().
+ The default value is the name of the constraint with
+ trailing "Constraint" removed. Derived classes may set
+ this to another name in their constructors.
+
+
+
+
+ If used performs a default ascending comparison
+
+
+
+
+ If used performs a reverse comparison
+
+
+
+
+ Then signals a break between two ordering steps
+
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ An OrderingStep represents one stage of the sort
+
+
+
+
+ Attribute used to provide descriptive text about a
+ test case or fixture.
+
+
+
+
+ Construct a description Attribute
+
+ The text of the description
+
+
+
+ InvalidTestFixtureException is thrown when an appropriate test
+ fixture constructor using the provided arguments cannot be found.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The message.
+
+
+
+ Initializes a new instance of the class.
+
+ The message.
+ The inner.
+
+
+
+ Serialization Constructor
+
+
+
+
+ A CompositeWorkItem represents a test suite and
+ encapsulates the execution of the suite as well
+ as all its child tests.
+
+
+
+
+ A count of how many tests in the work item have a value for the Order Property
+
+
+
+
+ Construct a CompositeWorkItem for executing a test suite
+ using a filter to select child tests.
+
+ The TestSuite to be executed
+ A filter used to select child tests
+
+
+
+ Method that actually performs the work. Overridden
+ in CompositeWorkItem to do setup, run all child
+ items and then do teardown.
+
+
+
+
+ Sorts tests under this suite.
+
+
+
+
+ Cancel (abort or stop) a CompositeWorkItem and all of its children
+
+ true if the CompositeWorkItem and all of its children should be aborted, false if it should allow all currently running tests to complete
+
+
+
+ List of Child WorkItems
+
+
+
+
+ Compares two objects and returns a value indicating whether one is less than, equal to, or greater than the other.
+
+
+ A signed integer that indicates the relative values of and , as shown in the following table.Value Meaning Less than zero is less than .Zero equals .Greater than zero is greater than .
+
+ The first object to compare.The second object to compare.
+
+
+
+ The ISimpleTestBuilder interface is exposed by a class that knows how to
+ build a single TestMethod from a suitable MethodInfo Types. In general,
+ it is exposed by an attribute, but may be implemented in a helper class
+ used by the attribute in some cases.
+
+
+
+
+ Build a TestMethod from the provided MethodInfo.
+
+ The method to be used as a test
+ The TestSuite to which the method will be added
+ A TestMethod object
+
+
+
+ The TypeWrapper class wraps a Type so it may be used in
+ a platform-independent manner.
+
+
+
+
+ Construct a TypeWrapper for a specified Type.
+
+
+
+
+ Returns true if the Type wrapped is T
+
+
+
+
+ Get the display name for this type
+
+
+
+
+ Get the display name for an object of this type, constructed with the specified args.
+
+
+
+
+ Returns a new ITypeInfo representing an instance of this generic Type using the supplied Type arguments
+
+
+
+
+ Returns a Type representing a generic type definition from which this Type can be constructed.
+
+
+
+
+ Returns an array of custom attributes of the specified type applied to this type
+
+
+
+
+ Returns a value indicating whether the type has an attribute of the specified type.
+
+
+
+
+
+
+
+ Returns a flag indicating whether this type has a method with an attribute of the specified type.
+
+
+
+
+
+
+ Returns an array of IMethodInfos for methods of this Type
+ that match the specified flags.
+
+
+
+
+ Gets the public constructor taking the specified argument Types
+
+
+
+
+ Returns a value indicating whether this Type has a public constructor taking the specified argument Types.
+
+
+
+
+ Construct an object of this Type, using the specified arguments.
+
+
+
+
+ Override ToString() so that error messages in NUnit's own tests make sense
+
+
+
+
+ Gets the underlying Type on which this TypeWrapper is based.
+
+
+
+
+ Gets the base type of this type as an ITypeInfo
+
+
+
+
+ Gets the Name of the Type
+
+
+
+
+ Gets the FullName of the Type
+
+
+
+
+ Gets the assembly in which the type is declared
+
+
+
+
+ Gets the namespace of the Type
+
+
+
+
+ Gets a value indicating whether the type is abstract.
+
+
+
+
+ Gets a value indicating whether the Type is a generic Type
+
+
+
+
+ Gets a value indicating whether the Type has generic parameters that have not been replaced by specific Types.
+
+
+
+
+ Gets a value indicating whether the Type is a generic Type definition
+
+
+
+
+ Gets a value indicating whether the type is sealed.
+
+
+
+
+ Gets a value indicating whether this type represents a static class.
+
+
+
+
+ DictionaryContainsValueConstraint is used to test whether a dictionary
+ contains an expected object as a value.
+
+
+
+
+ Construct a DictionaryContainsValueConstraint
+
+
+
+
+
+ Test whether the expected value is contained in the dictionary
+
+
+
+
+ The display name of this Constraint for use by ToString().
+ The default value is the name of the constraint with
+ trailing "Constraint" removed. Derived classes may set
+ this to another name in their constructors.
+
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ TestCaseSourceAttribute indicates the source to be used to
+ provide test fixture instances for a test class.
+
+
+
+
+ Error message string is public so the tests can use it
+
+
+
+
+ Construct with the name of the method, property or field that will provide data
+
+ The name of a static method, property or field that will provide data.
+
+
+
+ Construct with a Type and name
+
+ The Type that will provide data
+ The name of a static method, property or field that will provide data.
+
+
+
+ Construct with a Type
+
+ The type that will provide data
+
+
+
+ Construct one or more TestFixtures from a given Type,
+ using available parameter data.
+
+ The TypeInfo for which fixures are to be constructed.
+ One or more TestFixtures as TestSuite
+
+
+
+ Returns a set of ITestFixtureData items for use as arguments
+ to a parameterized test fixture.
+
+ The type for which data is needed.
+
+
+
+
+ The name of a the method, property or fiend to be used as a source
+
+
+
+
+ A Type to be used as a source
+
+
+
+
+ Gets or sets the category associated with every fixture created from
+ this attribute. May be a single category or a comma-separated list.
+
+
+
+
+ Attribute used to identify a method that is called once
+ to perform setup before any child tests are run.
+
+
+
+
+ Provides the Author of a test or test fixture.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The name of the author.
+
+
+
+ Initializes a new instance of the class.
+
+ The name of the author.
+ The email address of the author.
+
+
+
+ The different targets a test action attribute can be applied to
+
+
+
+
+ Default target, which is determined by where the action attribute is attached
+
+
+
+
+ Target a individual test case
+
+
+
+
+ Target a suite of test cases
+
+
+
+
+ TestListener provides an implementation of ITestListener that
+ does nothing. It is used only through its NULL property.
+
+
+
+
+ Called when a test has just started
+
+ The test that is starting
+
+
+
+ Called when a test case has finished
+
+ The result of the test
+
+
+
+ Called when a test produces output for immediate display
+
+ A TestOutput object containing the text to display
+
+
+
+ Construct a new TestListener - private so it may not be used.
+
+
+
+
+ Get a listener that does nothing
+
+
+
+
+ PlatformHelper class is used by the PlatformAttribute class to
+ determine whether a platform is supported.
+
+
+
+
+ Comma-delimited list of all supported OS platform constants
+
+
+
+
+ Comma-delimited list of all supported Runtime platform constants
+
+
+
+
+ Default constructor uses the operating system and
+ common language runtime of the system.
+
+
+
+
+ Construct a PlatformHelper for a particular operating
+ system and common language runtime. Used in testing.
+
+ OperatingSystem to be used
+ RuntimeFramework to be used
+
+
+
+ Test to determine if one of a collection of platforms
+ is being used currently.
+
+
+
+
+
+
+ Tests to determine if the current platform is supported
+ based on a platform attribute.
+
+ The attribute to examine
+
+
+
+
+ Tests to determine if the current platform is supported
+ based on a platform attribute.
+
+ The attribute to examine
+
+
+
+
+ Test to determine if the a particular platform or comma-
+ delimited set of platforms is in use.
+
+ Name of the platform or comma-separated list of platform ids
+ True if the platform is in use on the system
+
+
+
+ Return the last failure reason. Results are not
+ defined if called before IsSupported( Attribute )
+ is called.
+
+
+
+
+ DefaultTestAssemblyBuilder loads a single assembly and builds a TestSuite
+ containing test fixtures present in the assembly.
+
+
+
+
+ The default suite builder used by the test assembly builder.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Build a suite of tests from a provided assembly
+
+ The assembly from which tests are to be built
+ A dictionary of options to use in building the suite
+
+ A TestSuite containing the tests found in the assembly
+
+
+
+
+ Build a suite of tests given the filename of an assembly
+
+ The filename of the assembly from which tests are to be built
+ A dictionary of options to use in building the suite
+
+ A TestSuite containing the tests found in the assembly
+
+
+
+
+ Helper class with properties and methods that supply
+ a number of constraints used in Asserts.
+
+
+
+
+ Returns a ConstraintExpression, which will apply
+ the following constraint to all members of a collection,
+ succeeding only if a specified number of them succeed.
+
+
+
+
+ Returns a new PropertyConstraintExpression, which will either
+ test for the existence of the named property on the object
+ being tested or apply any following constraint to that property.
+
+
+
+
+ Returns a new AttributeConstraint checking for the
+ presence of a particular attribute on an object.
+
+
+
+
+ Returns a new AttributeConstraint checking for the
+ presence of a particular attribute on an object.
+
+
+
+
+ Returns a new CollectionContainsConstraint checking for the
+ presence of a particular object in the collection.
+
+
+
+
+ Returns a ConstraintExpression that negates any
+ following constraint.
+
+
+
+
+ Returns a ConstraintExpression, which will apply
+ the following constraint to all members of a collection,
+ succeeding if all of them succeed.
+
+
+
+
+ Returns a ConstraintExpression, which will apply
+ the following constraint to all members of a collection,
+ succeeding if at least one of them succeeds.
+
+
+
+
+ Returns a ConstraintExpression, which will apply
+ the following constraint to all members of a collection,
+ succeeding if all of them fail.
+
+
+
+
+ Returns a new ConstraintExpression, which will apply the following
+ constraint to the Length property of the object being tested.
+
+
+
+
+ Returns a new ConstraintExpression, which will apply the following
+ constraint to the Count property of the object being tested.
+
+
+
+
+ Returns a new ConstraintExpression, which will apply the following
+ constraint to the Message property of the object being tested.
+
+
+
+
+ Returns a new ConstraintExpression, which will apply the following
+ constraint to the InnerException property of the object being tested.
+
+
+
+
+ EmptyConstraint tests a whether a string or collection is empty,
+ postponing the decision about which test is applied until the
+ type of the actual argument is known.
+
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for success, false for failure
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ ComparisonAdapter class centralizes all comparisons of
+ _values in NUnit, adapting to the use of any provided
+ ,
+ or .
+
+
+
+
+ Returns a ComparisonAdapter that wraps an
+
+
+
+
+ Returns a ComparisonAdapter that wraps an
+
+
+
+
+ Returns a ComparisonAdapter that wraps a
+
+
+
+
+ Compares two objects
+
+
+
+
+ Gets the default ComparisonAdapter, which wraps an
+ NUnitComparer object.
+
+
+
+
+ Construct a ComparisonAdapter for an
+
+
+
+
+ Compares two objects
+
+
+
+
+
+
+
+ Construct a default ComparisonAdapter
+
+
+
+
+ ComparerAdapter extends and
+ allows use of an or
+ to actually perform the comparison.
+
+
+
+
+ Construct a ComparisonAdapter for an
+
+
+
+
+ Compare a Type T to an object
+
+
+
+
+ Construct a ComparisonAdapter for a
+
+
+
+
+ Compare a Type T to an object
+
+
+
+
+ AssignableFromConstraint is used to test that an object
+ can be assigned from a given Type.
+
+
+
+
+ Construct an AssignableFromConstraint for the type provided
+
+
+
+
+
+ Apply the constraint to an actual value, returning true if it succeeds
+
+ The actual argument
+ True if the constraint succeeds, otherwise false.
+
+
+
+ Marks a test to use a Sequential join of any argument
+ data provided. Arguments will be combined into test cases,
+ taking the next value of each argument until all are used.
+
+
+
+
+ Default constructor
+
+
+
+
+ RangeAttribute is used to supply a range of _values to an
+ individual parameter of a parameterized test.
+
+
+
+
+ Construct a range of ints using default step of 1
+
+
+
+
+
+
+ Construct a range of ints specifying the step size
+
+
+
+
+
+
+
+ Construct a range of unsigned ints using default step of 1
+
+
+
+
+
+
+ Construct a range of unsigned ints specifying the step size
+
+
+
+
+
+
+
+ Construct a range of longs using a default step of 1
+
+
+
+
+
+
+ Construct a range of longs
+
+
+
+
+
+
+
+ Construct a range of unsigned longs using default step of 1
+
+
+
+
+
+
+ Construct a range of unsigned longs specifying the step size
+
+
+
+
+
+
+
+ Construct a range of doubles
+
+
+
+
+
+
+
+ Construct a range of floats
+
+
+
+
+
+
+
+ Used to mark a field, property or method providing a set of datapoints to
+ be used in executing any theories within the same fixture that require an
+ argument of the Type provided. The data source may provide an array of
+ the required Type or an .
+ Synonymous with DatapointsAttribute.
+
+
+
+
+ StackFilter class is used to remove internal NUnit
+ entries from a stack trace so that the resulting
+ trace provides better information about the test.
+
+
+
+
+ Filters a raw stack trace and returns the result.
+
+ The original stack trace
+ A filtered stack trace
+
+
+
+ A utility class to create TestCommands
+
+
+
+
+ Gets the command to be executed before any of
+ the child tests are run.
+
+ A TestCommand
+
+
+
+ Gets the command to be executed after all of the
+ child tests are run.
+
+ A TestCommand
+
+
+
+ Creates a test command for use in running this test.
+
+
+
+
+
+ Creates a command for skipping a test. The result returned will
+ depend on the test RunState.
+
+
+
+
+ Builds the set up tear down list.
+
+ Type of the fixture.
+ Type of the set up attribute.
+ Type of the tear down attribute.
+ A list of SetUpTearDownItems
+
+
+
+ The ParameterWrapper class wraps a ParameterInfo so that it may
+ be used in a platform-independent manner.
+
+
+
+
+ The IParameterInfo interface is an abstraction of a .NET parameter.
+
+
+
+
+ Gets a value indicating whether the parameter is optional
+
+
+
+
+ Gets an IMethodInfo representing the method for which this is a parameter
+
+
+
+
+ Gets the underlying .NET ParameterInfo
+
+
+
+
+ Gets the Type of the parameter
+
+
+
+
+ Construct a ParameterWrapper for a given method and parameter
+
+
+
+
+
+
+ Returns an array of custom attributes of the specified type applied to this method
+
+
+
+
+ Gets a value indicating whether one or more attributes of the specified type are defined on the parameter.
+
+
+
+
+ Gets a value indicating whether the parameter is optional
+
+
+
+
+ Gets an IMethodInfo representing the method for which this is a parameter.
+
+
+
+
+ Gets the underlying ParameterInfo
+
+
+
+
+ Gets the Type of the parameter
+
+
+
+
+ A trace listener that writes to a separate file per domain
+ and process using it.
+
+
+
+
+ Construct an InternalTraceWriter that writes to a file.
+
+ Path to the file to use
+
+
+
+ Construct an InternalTraceWriter that writes to a
+ TextWriter provided by the caller.
+
+
+
+
+
+ Writes a character to the text string or stream.
+
+ The character to write to the text stream.
+
+
+
+ Writes a string to the text string or stream.
+
+ The string to write.
+
+
+
+ Writes a string followed by a line terminator to the text string or stream.
+
+ The string to write. If is null, only the line terminator is written.
+
+
+
+ Releases the unmanaged resources used by the and optionally releases the managed resources.
+
+ true to release both managed and unmanaged resources; false to release only unmanaged resources.
+
+
+
+ Clears all buffers for the current writer and causes any buffered data to be written to the underlying device.
+
+
+
+
+ Returns the character encoding in which the output is written.
+
+ The character encoding in which the output is written.
+
+
+
+ FullName filter selects tests based on their FullName
+
+
+
+
+ Construct a MethodNameFilter for a single name
+
+ The name the filter will recognize.
+
+
+
+ Match a test against a single value.
+
+
+
+
+ Gets the element name
+
+ Element name
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Provides a platform-independent methods for getting attributes
+ for use by AttributeConstraint and AttributeExistsConstraint.
+
+
+
+
+ Gets the custom attributes from the given object.
+
+ Portable libraries do not have an ICustomAttributeProvider, so we need to cast to each of
+ it's direct subtypes and try to get attributes off those instead.
+ The actual.
+ Type of the attribute.
+ if set to true [inherit].
+ A list of the given attribute on the given object.
+
+
+
+ The SpecialValue enum is used to represent TestCase arguments
+ that cannot be used as arguments to an Attribute.
+
+
+
+
+ Null represents a null value, which cannot be used as an
+ argument to an attriute under .NET 1.x
+
+
+
+
+ TypeHelper provides static methods that operate on Types.
+
+
+
+
+ A special value, which is used to indicate that BestCommonType() method
+ was unable to find a common type for the specified arguments.
+
+
+
+
+ Gets the display name for a Type as used by NUnit.
+
+ The Type for which a display name is needed.
+ The display name for the Type
+
+
+
+ Gets the display name for a Type as used by NUnit.
+
+ The Type for which a display name is needed.
+ The arglist provided.
+ The display name for the Type
+
+
+
+ Returns the best fit for a common type to be used in
+ matching actual arguments to a methods Type parameters.
+
+ The first type.
+ The second type.
+ Either type1 or type2, depending on which is more general.
+
+
+
+ Determines whether the specified type is numeric.
+
+ The type to be examined.
+
+ true if the specified type is numeric; otherwise, false.
+
+
+
+
+ Convert an argument list to the required parameter types.
+ Currently, only widening numeric conversions are performed.
+
+ An array of args to be converted
+ A ParameterInfo[] whose types will be used as targets
+
+
+
+ Determines whether this instance can deduce type args for a generic type from the supplied arguments.
+
+ The type to be examined.
+ The arglist.
+ The type args to be used.
+
+ true if this the provided args give sufficient information to determine the type args to be used; otherwise, false.
+
+
+
+
+ Gets the _values for an enumeration, using Enum.GetTypes
+ where available, otherwise through reflection.
+
+
+
+
+
+
+ Gets the ids of the _values for an enumeration,
+ using Enum.GetNames where available, otherwise
+ through reflection.
+
+
+
+
+
+
+ ThreadUtility provides a set of static methods convenient
+ for working with threads.
+
+
+
+
+ Do our best to Kill a thread
+
+ The thread to kill
+
+
+
+ Do our best to kill a thread, passing state info
+
+ The thread to kill
+ Info for the ThreadAbortException handler
+
+
+
+ TestFixture is a surrogate for a user test fixture class,
+ containing one or more tests.
+
+
+
+
+ Any ITest that implements this interface is at a level that the implementing
+ class should be disposed at the end of the test run
+
+
+
+
+ Initializes a new instance of the class.
+
+ Type of the fixture.
+
+
+
+ Predicate constraint wraps a Predicate in a constraint,
+ returning success if the predicate is true.
+
+
+
+
+ Construct a PredicateConstraint from a predicate
+
+
+
+
+ Determines whether the predicate succeeds when applied
+ to the actual value.
+
+
+
+
+ Gets text describing a constraint
+
+
+
+
+ NotConstraint negates the effect of some other constraint
+
+
+
+
+ Initializes a new instance of the class.
+
+ The base constraint to be negated.
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for if the base constraint fails, false if it succeeds
+
+
+
+ Custom value formatter function
+
+ The value
+
+
+
+
+ Custom value formatter factory function
+
+ The next formatter function
+ ValueFormatter
+ If the given formatter is unable to handle a certain format, it must call the next formatter in the chain
+
+
+
+ Static methods used in creating messages
+
+
+
+
+ Static string used when strings are clipped
+
+
+
+
+ Formatting strings used for expected and actual _values
+
+
+
+
+ Add a formatter to the chain of responsibility.
+
+
+
+
+
+ Formats text to represent a generalized value.
+
+ The value
+ The formatted text
+
+
+
+ Formats text for a collection value,
+ starting at a particular point, to a max length
+
+ The collection containing elements to write.
+ The starting point of the elements to write
+ The maximum number of elements to write
+
+
+
+ Returns the representation of a type as used in NUnitLite.
+ This is the same as Type.ToString() except for arrays,
+ which are displayed with their declared sizes.
+
+
+
+
+
+
+ Converts any control characters in a string
+ to their escaped representation.
+
+ The string to be converted
+ The converted string
+
+
+
+ Converts any null characters in a string
+ to their escaped representation.
+
+ The string to be converted
+ The converted string
+
+
+
+ Return the a string representation for a set of indices into an array
+
+ Array of indices for which a string is needed
+
+
+
+ Get an array of indices representing the point in a collection or
+ array corresponding to a single int index into the collection.
+
+ The collection to which the indices apply
+ Index in the collection
+ Array of indices
+
+
+
+ Clip a string to a given length, starting at a particular offset, returning the clipped
+ string with ellipses representing the removed parts
+
+ The string to be clipped
+ The maximum permitted length of the result string
+ The point at which to start clipping
+ The clipped string
+
+
+
+ Clip the expected and actual strings in a coordinated fashion,
+ so that they may be displayed together.
+
+
+
+
+
+
+
+
+ Shows the position two strings start to differ. Comparison
+ starts at the start index.
+
+ The expected string
+ The actual string
+ The index in the strings at which comparison should start
+ Boolean indicating whether case should be ignored
+ -1 if no mismatch found, or the index where mismatch found
+
+
+
+ Current head of chain of value formatters. Public for testing.
+
+
+
+
+ Adding this attribute to a method within a
+ class makes the method callable from the NUnit test runner. There is a property
+ called Description which is optional which you can provide a more detailed test
+ description. This class cannot be inherited.
+
+
+
+ [TestFixture]
+ public class Fixture
+ {
+ [Test]
+ public void MethodToTest()
+ {}
+
+ [Test(Description = "more detailed description")]
+ public void TestDescriptionMethod()
+ {}
+ }
+
+
+
+
+
+ Construct the attribute, specifying a combining strategy and source of parameter data.
+
+
+
+
+ Enumeration indicating whether the tests are
+ running normally or being cancelled.
+
+
+
+
+ Running normally with no stop requested
+
+
+
+
+ A graceful stop has been requested
+
+
+
+
+ A forced stop has been requested
+
+
+
+
+ The TestCaseParameters class encapsulates method arguments and
+ other selected parameters needed for constructing
+ a parameterized test case.
+
+
+
+
+ Default Constructor creates an empty parameter set
+
+
+
+
+ Construct a non-runnable ParameterSet, specifying
+ the provider exception that made it invalid.
+
+
+
+
+ Construct a parameter set with a list of arguments
+
+
+
+
+
+ Construct a ParameterSet from an object implementing ITestCaseData
+
+
+
+
+
+ Type arguments used to create a generic fixture instance
+
+
+
+
+ Provides methods to support legacy string comparison methods.
+
+
+
+
+ Compares two strings for equality, ignoring case if requested.
+
+ The first string.
+ The second string..
+ if set to true, the case of the letters in the strings is ignored.
+ Zero if the strings are equivalent, a negative number if strA is sorted first, a positive number if
+ strB is sorted first
+
+
+
+ Compares two strings for equality, ignoring case if requested.
+
+ The first string.
+ The second string..
+ if set to true, the case of the letters in the strings is ignored.
+ True if the strings are equivalent, false if not.
+
+
+
+ OneTimeSetUpCommand runs any one-time setup methods for a suite,
+ constructing the user test object if necessary.
+
+
+
+
+ Constructs a OneTimeSetUpCommand for a suite
+
+ The suite to which the command applies
+ A SetUpTearDownList for use by the command
+ A List of TestActionItems to be run after Setup
+
+
+
+ Overridden to run the one-time setup for a suite.
+
+ The TestExecutionContext to be used.
+ A TestResult
+
+
+
+ The TestOutput class holds a unit of output from
+ a test to a specific output stream
+
+
+
+
+ Construct with text, ouput destination type and
+ the name of the test that produced the output.
+
+ Text to be output
+ Name of the stream or channel to which the text should be written
+ FullName of test that produced the output
+
+
+
+ Return string representation of the object for debugging
+
+
+
+
+
+ Convert the TestOutput object to an XML string
+
+
+
+
+ Get the text
+
+
+
+
+ Get the output type
+
+
+
+
+ Get the name of the test that created the output
+
+
+
+
+ The IMethodInfo class is used to encapsulate information
+ about a method in a platform-independent manner.
+
+
+
+
+ Gets the parameters of the method.
+
+
+
+
+
+ Returns the Type arguments of a generic method or the Type parameters of a generic method definition.
+
+
+
+
+ Replaces the type parameters of the method with the array of types provided and returns a new IMethodInfo.
+
+ The type arguments to be used
+ A new IMethodInfo with the type arguments replaced
+
+
+
+ Invokes the method, converting any TargetInvocationException to an NUnitException.
+
+ The object on which to invoke the method
+ The argument list for the method
+ The return value from the invoked method
+
+
+
+ Gets the Type from which this method was reflected.
+
+
+
+
+ Gets the MethodInfo for this method.
+
+
+
+
+ Gets the name of the method.
+
+
+
+
+ Gets a value indicating whether the method is abstract.
+
+
+
+
+ Gets a value indicating whether the method is public.
+
+
+
+
+ Gets a value indicating whether the method contains unassigned generic type parameters.
+
+
+
+
+ Gets a value indicating whether the method is a generic method.
+
+
+
+
+ Gets a value indicating whether the MethodInfo represents the definition of a generic method.
+
+
+
+
+ Gets the return Type of the method.
+
+
+
+
+ ThrowsExceptionConstraint tests that an exception has
+ been thrown, without any further tests.
+
+
+
+
+ Executes the code and returns success if an exception is thrown.
+
+ A delegate representing the code to be tested
+ True if an exception is thrown, otherwise false
+
+
+
+ Returns the ActualValueDelegate itself as the value to be tested.
+
+ A delegate representing the code to be tested
+ The delegate itself
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ LevelOfParallelismAttribute is used to set the number of worker threads
+ that may be allocated by the framework for running tests.
+
+
+
+
+ Construct a LevelOfParallelismAttribute.
+
+ The number of worker threads to be created by the framework.
+
+
+
+ RepeatAttribute may be applied to test case in order
+ to run it multiple times.
+
+
+
+
+ Construct a RepeatAttribute
+
+ The number of times to run the test
+
+
+
+ Wrap a command and return the result.
+
+ The command to be wrapped
+ The wrapped command
+
+
+
+ The test command for the RetryAttribute
+
+
+
+
+ Initializes a new instance of the class.
+
+ The inner command.
+ The number of repetitions
+
+
+
+ Runs the test, saving a TestResult in the supplied TestExecutionContext.
+
+ The context in which the test should run.
+ A TestResult
+
+
+
+ Represents the result of running a single test case.
+
+
+
+
+ Construct a TestCaseResult based on a TestMethod
+
+ A TestMethod to which the result applies.
+
+
+
+ Gets the number of test cases that failed
+ when running the test and all its children.
+
+
+
+
+ Gets the number of test cases that passed
+ when running the test and all its children.
+
+
+
+
+ Gets the number of test cases that were skipped
+ when running the test and all its children.
+
+
+
+
+ Gets the number of test cases that were inconclusive
+ when running the test and all its children.
+
+
+
+
+ Indicates whether this result has any child results.
+
+
+
+
+ Gets the collection of child results.
+
+
+
+
+ TestParameters class holds any named parameters supplied to the test run
+
+
+
+
+ Gets a flag indicating whether a parameter with the specified name exists.N
+
+ Name of the parameter
+ True if it exists, otherwise false
+
+
+
+ Get method is a simple alternative to the indexer
+
+ Name of the paramter
+ Value of the parameter or null if not present
+
+
+
+ Get the value of a parameter or a default string
+
+ Name of the parameter
+ Default value of the parameter
+ Value of the parameter or default value if not present
+
+
+
+ Get the value of a parameter or return a default
+
+ The return Type
+ Name of the parameter
+ Default value of the parameter
+ Value of the parameter or default value if not present
+
+
+
+ Adds a parameter to the list
+
+ Name of the parameter
+ Value of the parameter
+
+
+
+ Gets the number of test parameters
+
+
+
+
+ Gets a collection of the test parameter names
+
+
+
+
+ Indexer provides access to the internal dictionary
+
+ Name of the parameter
+ Value of the parameter or null if not present
+
+
+
+ ParameterDataSourceProvider supplies individual argument _values for
+ single parameters using attributes implementing IParameterDataSource.
+
+
+
+
+ Determine whether any data is available for a parameter.
+
+ A ParameterInfo representing one
+ argument to a parameterized test
+
+ True if any data is available, otherwise false.
+
+
+
+
+ Return an IEnumerable providing data for use with the
+ supplied parameter.
+
+ An IParameterInfo representing one
+ argument to a parameterized test
+
+ An IEnumerable providing the required data
+
+
+
+
+ Thrown when an assertion failed.
+
+
+
+
+
+
+ The error message that explains
+ the reason for the exception
+ The exception that caused the
+ current exception
+
+
+
+ Serialization Constructor
+
+
+
+
+ Gets the ResultState provided by this exception
+
+
+
+
+ OrConstraint succeeds if either member succeeds
+
+
+
+
+ Create an OrConstraint from two other constraints
+
+ The first constraint
+ The second constraint
+
+
+
+ Apply the member constraints to an actual value, succeeding
+ succeeding as soon as one of them succeeds.
+
+ The actual value
+ True if either constraint succeeded
+
+
+
+ Gets text describing a constraint
+
+
+
+
+ Operator that tests for the presence of a particular attribute
+ on a type and optionally applies further tests to the attribute.
+
+
+
+
+ Construct an AttributeOperator for a particular Type
+
+ The Type of attribute tested
+
+
+
+ Reduce produces a constraint from the operator and
+ any arguments. It takes the arguments from the constraint
+ stack and pushes the resulting constraint on it.
+
+
+
+
+ MessageWriter is the abstract base for classes that write
+ constraint descriptions and messages in some form. The
+ class has separate methods for writing various components
+ of a message, allowing implementations to tailor the
+ presentation as needed.
+
+
+
+
+ Construct a MessageWriter given a culture
+
+
+
+
+ Method to write single line message with optional args, usually
+ written to precede the general failure message.
+
+ The message to be written
+ Any arguments used in formatting the message
+
+
+
+ Method to write single line message with optional args, usually
+ written to precede the general failure message, at a givel
+ indentation level.
+
+ The indentation level of the message
+ The message to be written
+ Any arguments used in formatting the message
+
+
+
+ Display Expected and Actual lines for a constraint. This
+ is called by MessageWriter's default implementation of
+ WriteMessageTo and provides the generic two-line display.
+
+ The failing constraint result
+
+
+
+ Display Expected and Actual lines for given _values. This
+ method may be called by constraints that need more control over
+ the display of actual and expected _values than is provided
+ by the default implementation.
+
+ The expected value
+ The actual value causing the failure
+
+
+
+ Display Expected and Actual lines for given _values, including
+ a tolerance value on the Expected line.
+
+ The expected value
+ The actual value causing the failure
+ The tolerance within which the test was made
+
+
+
+ Display the expected and actual string _values on separate lines.
+ If the mismatch parameter is >=0, an additional line is displayed
+ line containing a caret that points to the mismatch point.
+
+ The expected string value
+ The actual string value
+ The point at which the strings don't match or -1
+ If true, case is ignored in locating the point where the strings differ
+ If true, the strings should be clipped to fit the line
+
+
+
+ Writes the text for an actual value.
+
+ The actual value.
+
+
+
+ Writes the text for a generalized value.
+
+ The value.
+
+
+
+ Writes the text for a collection value,
+ starting at a particular point, to a max length
+
+ The collection containing elements to write.
+ The starting point of the elements to write
+ The maximum number of elements to write
+
+
+
+ Abstract method to get the max line length
+
+
+
+
+ Tests whether a value is less than the value supplied to its constructor
+
+
+
+
+ Abstract base class for constraints that compare _values to
+ determine if one is greater than, equal to or less than
+ the other.
+
+
+
+
+ The value against which a comparison is to be made
+
+
+
+
+ If true, less than returns success
+
+
+
+
+ if true, equal returns success
+
+
+
+
+ if true, greater than returns success
+
+
+
+
+ ComparisonAdapter to be used in making the comparison
+
+
+
+
+ Initializes a new instance of the class.
+
+ The value against which to make a comparison.
+ if set to true less succeeds.
+ if set to true equal succeeds.
+ if set to true greater succeeds.
+ String used in describing the constraint.
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for success, false for failure
+
+
+
+ Modifies the constraint to use an and returns self
+
+ The comparer used for comparison tests
+ A constraint modified to use the given comparer
+
+
+
+ Modifies the constraint to use an and returns self
+
+ The comparer used for comparison tests
+ A constraint modified to use the given comparer
+
+
+
+ Modifies the constraint to use a and returns self
+
+ The comparer used for comparison tests
+ A constraint modified to use the given comparer
+
+
+
+ Initializes a new instance of the class.
+
+ The expected value.
+
+
+
+ EmptyStringConstraint tests whether a string is empty.
+
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for success, false for failure
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ EmptyDirectoryConstraint is used to test that a directory is empty
+
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for success, false for failure
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ ConstraintBuilder maintains the stacks that are used in
+ processing a ConstraintExpression. An OperatorStack
+ is used to hold operators that are waiting for their
+ operands to be reorganized. a ConstraintStack holds
+ input constraints as well as the results of each
+ operator applied.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Appends the specified operator to the expression by first
+ reducing the operator stack and then pushing the new
+ operator on the stack.
+
+ The operator to push.
+
+
+
+ Appends the specified constraint to the expression by pushing
+ it on the constraint stack.
+
+ The constraint to push.
+
+
+
+ Sets the top operator right context.
+
+ The right context.
+
+
+
+ Reduces the operator stack until the topmost item
+ precedence is greater than or equal to the target precedence.
+
+ The target precedence.
+
+
+
+ Resolves this instance, returning a Constraint. If the Builder
+ is not currently in a resolvable state, an exception is thrown.
+
+ The resolved constraint
+
+
+
+ Gets a value indicating whether this instance is resolvable.
+
+
+ true if this instance is resolvable; otherwise, false.
+
+
+
+
+ OperatorStack is a type-safe stack for holding ConstraintOperators
+
+
+
+
+ Initializes a new instance of the class.
+
+ The ConstraintBuilder using this stack.
+
+
+
+ Pushes the specified operator onto the stack.
+
+ The operator to put onto the stack.
+
+
+
+ Pops the topmost operator from the stack.
+
+ The topmost operator on the stack
+
+
+
+ Gets a value indicating whether this is empty.
+
+ true if empty; otherwise, false.
+
+
+
+ Gets the topmost operator without modifying the stack.
+
+
+
+
+ ConstraintStack is a type-safe stack for holding Constraints
+
+
+
+
+ Initializes a new instance of the class.
+
+ The ConstraintBuilder using this stack.
+
+
+
+ Pushes the specified constraint. As a side effect,
+ the constraint's Builder field is set to the
+ ConstraintBuilder owning this stack.
+
+ The constraint to put onto the stack
+
+
+
+ Pops this topmost constraint from the stack.
+ As a side effect, the constraint's Builder
+ field is set to null.
+
+ The topmost contraint on the stack
+
+
+
+ Gets a value indicating whether this is empty.
+
+ true if empty; otherwise, false.
+
+
+
+ CollectionEquivalentConstraint is used to determine whether two
+ collections are equivalent.
+
+
+
+
+ Construct a CollectionEquivalentConstraint
+
+
+
+
+
+ Test whether two collections are equivalent
+
+
+
+
+
+
+ Flag the constraint to use the supplied predicate function
+
+ The comparison function to use.
+ Self.
+
+
+
+ The display name of this Constraint for use by ToString().
+ The default value is the name of the constraint with
+ trailing "Constraint" removed. Derived classes may set
+ this to another name in their constructors.
+
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ AttributeExistsConstraint tests for the presence of a
+ specified attribute on a Type.
+
+
+
+
+ Constructs an AttributeExistsConstraint for a specific attribute Type
+
+
+
+
+
+ Tests whether the object provides the expected attribute.
+
+ A Type, MethodInfo, or other ICustomAttributeProvider
+ True if the expected attribute is present, otherwise false
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ Marks a test that must run on a separate thread.
+
+
+
+
+ Construct a RequiresThreadAttribute
+
+
+
+
+ Construct a RequiresThreadAttribute, specifying the apartment
+
+
+
+
+ ExplicitAttribute marks a test or test fixture so that it will
+ only be run if explicitly executed from the gui or command line
+ or if it is included by use of a filter. The test will not be
+ run simply because an enclosing suite is run.
+
+
+
+
+ Default constructor
+
+
+
+
+ Constructor with a reason
+
+ The reason test is marked explicit
+
+
+
+ Modifies a test by marking it as explicit.
+
+ The test to modify
+
+
+
+ OneTimeTearDownCommand performs any teardown actions
+ specified for a suite and calls Dispose on the user
+ test object, if any.
+
+
+
+
+ Construct a OneTimeTearDownCommand
+
+ The test suite to which the command applies
+ A SetUpTearDownList for use by the command
+ A List of TestActionItems to be run before teardown.
+
+
+
+ Overridden to run the teardown methods specified on the test.
+
+ The TestExecutionContext to be used.
+ A TestResult
+
+
+
+ Class that can build a tree of automatic namespace
+ suites from a group of fixtures.
+
+
+
+
+ NamespaceDictionary of all test suites we have created to represent
+ namespaces. Used to locate namespace parent suites for fixtures.
+
+
+
+
+ The root of the test suite being created by this builder.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The root suite.
+
+
+
+ Adds the specified fixtures to the tree.
+
+ The fixtures to be added.
+
+
+
+ Adds the specified fixture to the tree.
+
+ The fixture to be added.
+
+
+
+ Gets the root entry in the tree created by the NamespaceTreeBuilder.
+
+ The root suite.
+
+
+
+ Built-in SuiteBuilder for all types of test classes.
+
+
+
+
+ The ISuiteBuilder interface is exposed by a class that knows how to
+ build a suite from one or more Types.
+
+
+
+
+ Examine the type and determine if it is suitable for
+ this builder to use in building a TestSuite.
+
+ Note that returning false will cause the type to be ignored
+ in loading the tests. If it is desired to load the suite
+ but label it as non-runnable, ignored, etc., then this
+ method must return true.
+
+ The type of the fixture to be used
+ True if the type can be used to build a TestSuite
+
+
+
+ Build a TestSuite from type provided.
+
+ The type of the fixture to be used
+ A TestSuite
+
+
+
+ Checks to see if the provided Type is a fixture.
+ To be considered a fixture, it must be a non-abstract
+ class with one or more attributes implementing the
+ IFixtureBuilder interface or one or more methods
+ marked as tests.
+
+ The fixture type to check
+ True if the fixture can be built, false if not
+
+
+
+ Build a TestSuite from TypeInfo provided.
+
+ The fixture type to build
+ A TestSuite built from that type
+
+
+
+ We look for attributes implementing IFixtureBuilder at one level
+ of inheritance at a time. Attributes on base classes are not used
+ unless there are no fixture builder attributes at all on the derived
+ class. This is by design.
+
+ The type being examined for attributes
+ A list of the attributes found.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Provide actions to execute before and after tests.
+
+
+
+
+ When implemented by an attribute, this interface implemented to provide actions to execute before and after tests.
+
+
+
+
+ Executed before each test is run
+
+ The test that is going to be run.
+
+
+
+ Executed after each test is run
+
+ The test that has just been run.
+
+
+
+ Provides the target for the action attribute
+
+ The target for the action attribute
+
+
+
+ Executed before each test is run
+
+ The test that is going to be run.
+
+
+
+ Executed after each test is run
+
+ The test that has just been run.
+
+
+
+ Provides the target for the action attribute
+
+
+
+
+ Marks a test that must run in a particular threading apartment state, causing it
+ to run in a separate thread if necessary.
+
+
+
+
+ Construct an ApartmentAttribute
+
+ The apartment state that this test must be run under. You must pass in a valid apartment state.
+
+
+
+ The Iz class is a synonym for Is intended for use in VB,
+ which regards Is as a keyword.
+
+
+
+
+ Helper class with properties and methods that supply
+ a number of constraints used in Asserts.
+
+
+
+
+ Returns a constraint that tests two items for equality
+
+
+
+
+ Returns a constraint that tests that two references are the same object
+
+
+
+
+ Returns a constraint that tests whether the
+ actual value is greater than the supplied argument
+
+
+
+
+ Returns a constraint that tests whether the
+ actual value is greater than or equal to the supplied argument
+
+
+
+
+ Returns a constraint that tests whether the
+ actual value is greater than or equal to the supplied argument
+
+
+
+
+ Returns a constraint that tests whether the
+ actual value is less than the supplied argument
+
+
+
+
+ Returns a constraint that tests whether the
+ actual value is less than or equal to the supplied argument
+
+
+
+
+ Returns a constraint that tests whether the
+ actual value is less than or equal to the supplied argument
+
+
+
+
+ Returns a constraint that tests whether the actual
+ value is of the exact type supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual
+ value is of the exact type supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is of the type supplied as an argument or a derived type.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is of the type supplied as an argument or a derived type.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is assignable from the type supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is assignable from the type supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is assignable to the type supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is assignable to the type supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is a collection containing the same elements as the
+ collection supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is a subset of the collection supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is a superset of the collection supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value contains the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value starts with the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value ends with the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value matches the regular expression supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the path provided
+ is the same as an expected path after canonicalization.
+
+
+
+
+ Returns a constraint that tests whether the path provided
+ is a subpath of the expected path after canonicalization.
+
+
+
+
+ Returns a constraint that tests whether the path provided
+ is the same path or under an expected path after canonicalization.
+
+
+
+
+ Returns a constraint that tests whether the actual value falls
+ inclusively within a specified range.
+
+ from must be less than or equal to true
+ Inclusive beginning of the range. Must be less than or equal to to.
+ Inclusive end of the range. Must be greater than or equal to from.
+
+
+
+
+ Returns a ConstraintExpression that negates any
+ following constraint.
+
+
+
+
+ Returns a ConstraintExpression, which will apply
+ the following constraint to all members of a collection,
+ succeeding if all of them succeed.
+
+
+
+
+ Returns a constraint that tests for null
+
+
+
+
+ Returns a constraint that tests for True
+
+
+
+
+ Returns a constraint that tests for False
+
+
+
+
+ Returns a constraint that tests for a positive value
+
+
+
+
+ Returns a constraint that tests for a negative value
+
+
+
+
+ Returns a constraint that tests for equality with zero
+
+
+
+
+ Returns a constraint that tests for NaN
+
+
+
+
+ Returns a constraint that tests for empty
+
+
+
+
+ Returns a constraint that tests whether a collection
+ contains all unique items.
+
+
+
+
+ Returns a constraint that tests whether an object graph is serializable in binary format.
+
+
+
+
+ Returns a constraint that tests whether an object graph is serializable in xml format.
+
+
+
+
+ Returns a constraint that tests whether a collection is ordered
+
+
+
+
+ Objects implementing this interface are used to wrap
+ the TestMethodCommand itself. They apply after SetUp
+ has been run and before TearDown.
+
+
+
+
+ The CommandStage enumeration represents the defined stages
+ of execution for a series of TestCommands. The int _values
+ of the enum are used to apply decorators in the proper
+ order. Lower _values are applied first and are therefore
+ "closer" to the actual test execution.
+
+
+ No CommandStage is defined for actual invocation of the test or
+ for creation of the context. Execution may be imagined as
+ proceeding from the bottom of the list upwards, with cleanup
+ after the test running in the opposite order.
+
+
+
+
+ Use an application-defined default value.
+
+
+
+
+ Make adjustments needed before and after running
+ the raw test - that is, after any SetUp has run
+ and before TearDown.
+
+
+
+
+ Run SetUp and TearDown for the test. This stage is used
+ internally by NUnit and should not normally appear
+ in user-defined decorators.
+
+
+
+
+ Make adjustments needed before and after running
+ the entire test - including SetUp and TearDown.
+
+
+
+
+ ThrowsConstraint is used to test the exception thrown by
+ a delegate by applying a constraint to it.
+
+
+
+
+ Initializes a new instance of the class,
+ using a constraint to be applied to the exception.
+
+ A constraint to apply to the caught exception.
+
+
+
+ Executes the code of the delegate and captures any exception.
+ If a non-null base constraint was provided, it applies that
+ constraint to the exception.
+
+ A delegate representing the code to be tested
+ True if an exception is thrown and the constraint succeeds, otherwise false
+
+
+
+ Converts an ActualValueDelegate to a TestDelegate
+ before calling the primary overload.
+
+
+
+
+
+
+ Get the actual exception thrown - used by Assert.Throws.
+
+
+
+
+ Gets text describing a constraint
+
+
+
+
+ Write the actual value for a failing constraint test to a
+ MessageWriter. This override only handles the special message
+ used when an exception is expected but none is thrown.
+
+ The writer on which the actual value is displayed
+
+
+
+ Summary description for SamePathConstraint.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The expected path
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for success, false for failure
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ Operator that requires both it's arguments to succeed
+
+
+
+
+ Construct an AndOperator
+
+
+
+
+ Apply the operator to produce an AndConstraint
+
+
+
+
+ Provides static methods to express the assumptions
+ that must be met for a test to give a meaningful
+ result. If an assumption is not met, the test
+ should produce an inconclusive result.
+
+
+
+
+ The Equals method throws an InvalidOperationException. This is done
+ to make sure there is no mistake by calling this function.
+
+ The left object.
+ The right object.
+ Not applicable
+
+
+
+ override the default ReferenceEquals to throw an InvalidOperationException. This
+ implementation makes sure there is no mistake in calling this function
+ as part of Assert.
+
+ The left object.
+ The right object.
+
+
+
+ Apply a constraint to an actual value, succeeding if the constraint
+ is satisfied and throwing an InconclusiveException on failure.
+
+ The Type being compared.
+ An ActualValueDelegate returning the value to be tested
+ A Constraint expression to be applied
+
+
+
+ Apply a constraint to an actual value, succeeding if the constraint
+ is satisfied and throwing an InconclusiveException on failure.
+
+ The Type being compared.
+ An ActualValueDelegate returning the value to be tested
+ A Constraint expression to be applied
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Apply a constraint to an actual value, succeeding if the constraint
+ is satisfied and throwing an InconclusiveException on failure.
+
+ The Type being compared.
+ An ActualValueDelegate returning the value to be tested
+ A Constraint expression to be applied
+ A function to build the message included with the Exception
+
+
+
+ Asserts that a condition is true. If the condition is false the method throws
+ an .
+
+ The evaluated condition
+ The message to display if the condition is false
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that a condition is true. If the condition is false the
+ method throws an .
+
+ The evaluated condition
+
+
+
+ Asserts that a condition is true. If the condition is false the method throws
+ an .
+
+ The evaluated condition
+ A function to build the message included with the Exception
+
+
+
+ Asserts that a condition is true. If the condition is false the method throws
+ an .
+
+ A lambda that returns a Boolean
+ The message to display if the condition is false
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that a condition is true. If the condition is false the method throws
+ an .
+
+ A lambda that returns a Boolean
+
+
+
+ Asserts that a condition is true. If the condition is false the method throws
+ an .
+
+ A lambda that returns a Boolean
+ A function to build the message included with the Exception
+
+
+
+ Asserts that the code represented by a delegate throws an exception
+ that satisfies the constraint provided.
+
+ A TestDelegate to be executed
+ A ThrowsConstraint used in the test
+
+
+
+ Apply a constraint to an actual value, succeeding if the constraint
+ is satisfied and throwing an InconclusiveException on failure.
+
+ The Type being compared.
+ The actual value to test
+ A Constraint to be applied
+
+
+
+ Apply a constraint to an actual value, succeeding if the constraint
+ is satisfied and throwing an InconclusiveException on failure.
+
+ The Type being compared.
+ The actual value to test
+ A Constraint expression to be applied
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Apply a constraint to an actual value, succeeding if the constraint
+ is satisfied and throwing an InconclusiveException on failure.
+
+ The Type being compared.
+ The actual value to test
+ A Constraint to be applied
+ A function to build the message included with the Exception
+
+
+
+ TODO: Documentation needed for class
+
+
+
+
+ Initializes a new instance of the class.
+
+ The test being skipped.
+
+
+
+ Overridden to simply set the CurrentResult to the
+ appropriate Skipped state.
+
+ The execution context for the test
+ A TestResult
+
+
+
+ The TextCapture class intercepts console output and writes it
+ to the current execution context, if one is present on the thread.
+ If no execution context is found, the output is written to a
+ default destination, normally the original destination of the
+ intercepted output.
+
+
+
+
+ Construct a TextCapture object
+
+ The default destination for non-intercepted output
+
+
+
+ Writes a single character
+
+ The char to write
+
+
+
+ Writes a string
+
+ The string to write
+
+
+
+ Writes a string followed by a line terminator
+
+ The string to write
+
+
+
+ Gets the Encoding in use by this TextWriter
+
+
+
+
+ SimpleWorkItemDispatcher handles execution of WorkItems by
+ directly executing them. It is provided so that a dispatcher
+ is always available in the context, thereby simplifying the
+ code needed to run child tests.
+
+
+
+
+ An IWorkItemDispatcher handles execution of work items.
+
+
+
+
+ Dispatch a single work item for execution. The first
+ work item dispatched is saved as the top-level
+ work item and used when stopping the run.
+
+ The item to dispatch
+
+
+
+ Cancel the ongoing run completely.
+ If no run is in process, the call has no effect.
+
+ true if the IWorkItemDispatcher should abort all currently running WorkItems, false if it should allow all currently running WorkItems to complete
+
+
+
+ Dispatch a single work item for execution. The first
+ work item dispatched is saved as the top-level
+ work item and a thread is created on which to
+ run it. Subsequent calls come from the top level
+ item or its descendants on the proper thread.
+
+ The item to dispatch
+
+
+
+ Cancel (abort or stop) the ongoing run.
+ If no run is in process, the call has no effect.
+
+ true if the run should be aborted, false if it should allow its currently running test to complete
+
+
+
+ Asserts on Directories
+
+
+
+
+ The Equals method throws an InvalidOperationException. This is done
+ to make sure there is no mistake by calling this function.
+
+
+
+
+
+
+ override the default ReferenceEquals to throw an InvalidOperationException. This
+ implementation makes sure there is no mistake in calling this function
+ as part of Assert.
+
+
+
+
+
+
+ Verifies that two directories are equal. Two directories are considered
+ equal if both are null, or if both point to the same directory.
+ If they are not equal an is thrown.
+
+ A directory containing the value that is expected
+ A directory containing the actual value
+ The message to display if the directories are not equal
+ Arguments to be used in formatting the message
+
+
+
+ Verifies that two directories are equal. Two directories are considered
+ equal if both are null, or if both point to the same directory.
+ If they are not equal an is thrown.
+
+ A directory containing the value that is expected
+ A directory containing the actual value
+
+
+
+ Asserts that two directories are not equal. If they are equal
+ an is thrown.
+
+ A directory containing the value that is expected
+ A directory containing the actual value
+ The message to display if directories are not equal
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that two directories are not equal. If they are equal
+ an is thrown.
+
+ A directory containing the value that is expected
+ A directory containing the actual value
+
+
+
+ Asserts that the directory exists. If it does not exist
+ an is thrown.
+
+ A directory containing the actual value
+ The message to display if directories are not equal
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that the directory exists. If it does not exist
+ an is thrown.
+
+ A directory containing the actual value
+
+
+
+ Asserts that the directory exists. If it does not exist
+ an is thrown.
+
+ The path to a directory containing the actual value
+ The message to display if directories are not equal
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that the directory exists. If it does not exist
+ an is thrown.
+
+ The path to a directory containing the actual value
+
+
+
+ Asserts that the directory does not exist. If it does exist
+ an is thrown.
+
+ A directory containing the actual value
+ The message to display if directories are not equal
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that the directory does not exist. If it does exist
+ an is thrown.
+
+ A directory containing the actual value
+
+
+
+ Asserts that the directory does not exist. If it does exist
+ an is thrown.
+
+ The path to a directory containing the actual value
+ The message to display if directories are not equal
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that the directory does not exist. If it does exist
+ an is thrown.
+
+ The path to a directory containing the actual value
+
+
+
+ TestName filter selects tests based on their Name
+
+
+
+
+ Construct a TestNameFilter for a single name
+
+ The name the filter will recognize.
+
+
+
+ Match a test against a single value.
+
+
+
+
+ Gets the element name
+
+ Element name
+
+
+
+ The ParameterDataProvider class implements IParameterDataProvider
+ and hosts one or more individual providers.
+
+
+
+
+ Construct with a collection of individual providers
+
+
+
+
+ Determine whether any data is available for a parameter.
+
+ An IParameterInfo representing one
+ argument to a parameterized test
+ True if any data is available, otherwise false.
+
+
+
+ Return an IEnumerable providing data for use with the
+ supplied parameter.
+
+ An IParameterInfo representing one
+ argument to a parameterized test
+ An IEnumerable providing the required data
+
+
+
+ ExactCountConstraint applies another constraint to each
+ item in a collection, succeeding only if a specified
+ number of items succeed.
+
+
+
+
+ Construct an ExactCountConstraint on top of an existing constraint
+
+
+
+
+
+
+ Apply the item constraint to each item in the collection,
+ succeeding only if the expected number of items pass.
+
+
+
+
+
+
+ Thrown when an assertion failed.
+
+
+
+ The error message that explains
+ the reason for the exception
+
+
+ The error message that explains
+ the reason for the exception
+ The exception that caused the
+ current exception
+
+
+
+ Serialization Constructor
+
+
+
+
+ Gets the ResultState provided by this exception
+
+
+
+
+ XmlSerializableConstraint tests whether
+ an object is serializable in xml format.
+
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for success, false for failure
+
+
+
+ Returns the string representation of this constraint
+
+
+
+
+ Gets text describing a constraint
+
+
+
+ Helper routines for working with floating point numbers
+
+
+ The floating point comparison code is based on this excellent article:
+ http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm
+
+
+ "ULP" means Unit in the Last Place and in the context of this library refers to
+ the distance between two adjacent floating point numbers. IEEE floating point
+ numbers can only represent a finite subset of natural numbers, with greater
+ accuracy for smaller numbers and lower accuracy for very large numbers.
+
+
+ If a comparison is allowed "2 ulps" of deviation, that means the _values are
+ allowed to deviate by up to 2 adjacent floating point _values, which might be
+ as low as 0.0000001 for small numbers or as high as 10.0 for large numbers.
+
+
+
+
+ Compares two floating point _values for equality
+ First floating point value to be compared
+ Second floating point value t be compared
+
+ Maximum number of representable floating point _values that are allowed to
+ be between the left and the right floating point _values
+
+ True if both numbers are equal or close to being equal
+
+
+ Floating point _values can only represent a finite subset of natural numbers.
+ For example, the _values 2.00000000 and 2.00000024 can be stored in a float,
+ but nothing inbetween them.
+
+
+ This comparison will count how many possible floating point _values are between
+ the left and the right number. If the number of possible _values between both
+ numbers is less than or equal to maxUlps, then the numbers are considered as
+ being equal.
+
+
+ Implementation partially follows the code outlined here:
+ http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/
+
+
+
+
+ Compares two double precision floating point _values for equality
+ First double precision floating point value to be compared
+ Second double precision floating point value t be compared
+
+ Maximum number of representable double precision floating point _values that are
+ allowed to be between the left and the right double precision floating point _values
+
+ True if both numbers are equal or close to being equal
+
+
+ Double precision floating point _values can only represent a limited series of
+ natural numbers. For example, the _values 2.0000000000000000 and 2.0000000000000004
+ can be stored in a double, but nothing inbetween them.
+
+
+ This comparison will count how many possible double precision floating point
+ _values are between the left and the right number. If the number of possible
+ _values between both numbers is less than or equal to maxUlps, then the numbers
+ are considered as being equal.
+
+
+ Implementation partially follows the code outlined here:
+ http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/
+
+
+
+
+
+ Reinterprets the memory contents of a floating point value as an integer value
+
+
+ Floating point value whose memory contents to reinterpret
+
+
+ The memory contents of the floating point value interpreted as an integer
+
+
+
+
+ Reinterprets the memory contents of a double precision floating point
+ value as an integer value
+
+
+ Double precision floating point value whose memory contents to reinterpret
+
+
+ The memory contents of the double precision floating point value
+ interpreted as an integer
+
+
+
+
+ Reinterprets the memory contents of an integer as a floating point value
+
+ Integer value whose memory contents to reinterpret
+
+ The memory contents of the integer value interpreted as a floating point value
+
+
+
+
+ Reinterprets the memory contents of an integer value as a double precision
+ floating point value
+
+ Integer whose memory contents to reinterpret
+
+ The memory contents of the integer interpreted as a double precision
+ floating point value
+
+
+
+ Union of a floating point variable and an integer
+
+
+ The union's value as a floating point variable
+
+
+ The union's value as an integer
+
+
+ The union's value as an unsigned integer
+
+
+ Union of a double precision floating point variable and a long
+
+
+ The union's value as a double precision floating point variable
+
+
+ The union's value as a long
+
+
+ The union's value as an unsigned long
+
+
+
+ EqualityAdapter class handles all equality comparisons
+ that use an ,
+ or a .
+
+
+
+
+ Compares two objects, returning true if they are equal
+
+
+
+
+ Returns true if the two objects can be compared by this adapter.
+ The base adapter cannot handle IEnumerables except for strings.
+
+
+
+
+ Returns an that wraps an .
+
+
+
+
+ Returns an that wraps an .
+
+
+
+
+ Returns an EqualityAdapter that uses a predicate function for items comparison.
+
+
+
+
+
+
+
+
+ Returns an that wraps an .
+
+
+
+
+ Returns an that wraps an .
+
+
+
+
+ Returns an that wraps a .
+
+
+
+
+ that wraps an .
+
+
+
+
+ Returns true if the two objects can be compared by this adapter.
+ The base adapter cannot handle IEnumerables except for strings.
+
+
+
+
+ Compares two objects, returning true if they are equal
+
+
+
+
+ Returns true if the two objects can be compared by this adapter.
+ Generic adapter requires objects of the specified type.
+
+
+
+
+ that wraps an .
+
+
+
+
+ EmptyCollectionConstraint tests whether a collection is empty.
+
+
+
+
+ Check that the collection is empty
+
+
+
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ Helper class with properties and methods that supply
+ a number of constraints used in Asserts.
+
+
+
+
+ Returns a ConstraintExpression, which will apply
+ the following constraint to all members of a collection,
+ succeeding only if a specified number of them succeed.
+
+
+
+
+ Returns a new PropertyConstraintExpression, which will either
+ test for the existence of the named property on the object
+ being tested or apply any following constraint to that property.
+
+
+
+
+ Returns a new AttributeConstraint checking for the
+ presence of a particular attribute on an object.
+
+
+
+
+ Returns a new AttributeConstraint checking for the
+ presence of a particular attribute on an object.
+
+
+
+
+ Returns a constraint that tests two items for equality
+
+
+
+
+ Returns a constraint that tests that two references are the same object
+
+
+
+
+ Returns a constraint that tests whether the
+ actual value is greater than the supplied argument
+
+
+
+
+ Returns a constraint that tests whether the
+ actual value is greater than or equal to the supplied argument
+
+
+
+
+ Returns a constraint that tests whether the
+ actual value is greater than or equal to the supplied argument
+
+
+
+
+ Returns a constraint that tests whether the
+ actual value is less than the supplied argument
+
+
+
+
+ Returns a constraint that tests whether the
+ actual value is less than or equal to the supplied argument
+
+
+
+
+ Returns a constraint that tests whether the
+ actual value is less than or equal to the supplied argument
+
+
+
+
+ Returns a constraint that tests whether the actual
+ value is of the exact type supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual
+ value is of the exact type supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is of the type supplied as an argument or a derived type.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is of the type supplied as an argument or a derived type.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is assignable from the type supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is assignable from the type supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is assignable from the type supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is assignable from the type supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is a collection containing the same elements as the
+ collection supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is a subset of the collection supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is a superset of the collection supplied as an argument.
+
+
+
+
+ Returns a new CollectionContainsConstraint checking for the
+ presence of a particular object in the collection.
+
+
+
+
+ Returns a new CollectionContainsConstraint checking for the
+ presence of a particular object in the collection.
+
+
+
+
+ Returns a new ContainsConstraint. This constraint
+ will, in turn, make use of the appropriate second-level
+ constraint, depending on the type of the actual argument.
+ This overload is only used if the item sought is a string,
+ since any other type implies that we are looking for a
+ collection member.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value contains the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value contains the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that fails if the actual
+ value contains the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value starts with the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value starts with the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value starts with the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that fails if the actual
+ value starts with the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value ends with the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value ends with the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value ends with the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that fails if the actual
+ value ends with the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value matches the regular expression supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value matches the regular expression supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value matches the regular expression supplied as an argument.
+
+
+
+
+ Returns a constraint that fails if the actual
+ value matches the pattern supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the path provided
+ is the same as an expected path after canonicalization.
+
+
+
+
+ Returns a constraint that tests whether the path provided
+ is a subpath of the expected path after canonicalization.
+
+
+
+
+ Returns a constraint that tests whether the path provided
+ is the same path or under an expected path after canonicalization.
+
+
+
+
+ Returns a constraint that tests whether the actual value falls
+ within a specified range.
+
+
+
+
+ Returns a ConstraintExpression that negates any
+ following constraint.
+
+
+
+
+ Returns a ConstraintExpression that negates any
+ following constraint.
+
+
+
+
+ Returns a ConstraintExpression, which will apply
+ the following constraint to all members of a collection,
+ succeeding if all of them succeed.
+
+
+
+
+ Returns a ConstraintExpression, which will apply
+ the following constraint to all members of a collection,
+ succeeding if at least one of them succeeds.
+
+
+
+
+ Returns a ConstraintExpression, which will apply
+ the following constraint to all members of a collection,
+ succeeding if all of them fail.
+
+
+
+
+ Returns a new ConstraintExpression, which will apply the following
+ constraint to the Length property of the object being tested.
+
+
+
+
+ Returns a new ConstraintExpression, which will apply the following
+ constraint to the Count property of the object being tested.
+
+
+
+
+ Returns a new ConstraintExpression, which will apply the following
+ constraint to the Message property of the object being tested.
+
+
+
+
+ Returns a new ConstraintExpression, which will apply the following
+ constraint to the InnerException property of the object being tested.
+
+
+
+
+ Returns a constraint that tests for null
+
+
+
+
+ Returns a constraint that tests for True
+
+
+
+
+ Returns a constraint that tests for False
+
+
+
+
+ Returns a constraint that tests for a positive value
+
+
+
+
+ Returns a constraint that tests for a negative value
+
+
+
+
+ Returns a constraint that tests for equality with zero
+
+
+
+
+ Returns a constraint that tests for NaN
+
+
+
+
+ Returns a constraint that tests for empty
+
+
+
+
+ Returns a constraint that tests whether a collection
+ contains all unique items.
+
+
+
+
+ Returns a constraint that tests whether an object graph is serializable in binary format.
+
+
+
+
+ Returns a constraint that tests whether an object graph is serializable in xml format.
+
+
+
+
+ Returns a constraint that tests whether a collection is ordered
+
+
+
+
+ BinarySerializableConstraint tests whether
+ an object is serializable in binary format.
+
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for success, false for failure
+
+
+
+ Returns the string representation
+
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ Used on a method, marks the test with a timeout value in milliseconds.
+ The test will be run in a separate thread and is cancelled if the timeout
+ is exceeded. Used on a class or assembly, sets the default timeout
+ for all contained test methods.
+
+
+
+
+ Construct a TimeoutAttribute given a time in milliseconds
+
+ The timeout value in milliseconds
+
+
+
+ Adding this attribute to a method within a
+ class makes the method callable from the NUnit test runner. There is a property
+ called Description which is optional which you can provide a more detailed test
+ description. This class cannot be inherited.
+
+
+
+ [TestFixture]
+ public class Fixture
+ {
+ [Test]
+ public void MethodToTest()
+ {}
+
+ [Test(Description = "more detailed description")]
+ public void TestDescriptionMethod()
+ {}
+ }
+
+
+
+
+
+ Modifies a test by adding a description, if not already set.
+
+ The test to modify
+
+
+
+ Construct a TestMethod from a given method.
+
+ The method for which a test is to be constructed.
+ The suite to which the test will be added.
+ A TestMethod
+
+
+
+ Descriptive text for this test
+
+
+
+
+ The author of this test
+
+
+
+
+ The type that this test is testing
+
+
+
+
+ Gets or sets the expected result.
+
+ The result.
+
+
+
+ Returns true if an expected result has been set
+
+
+
+
+ Summary description for SetUICultureAttribute.
+
+
+
+
+ Construct given the name of a culture
+
+
+
+
+
+ Marks a test that must run in the STA, causing it
+ to run in a separate thread if necessary.
+
+
+
+
+ Construct a RequiresSTAAttribute
+
+
+
+
+ Used to mark a field, property or method providing a set of datapoints to
+ be used in executing any theories within the same fixture that require an
+ argument of the Type provided. The data source may provide an array of
+ the required Type or an .
+ Synonymous with DatapointSourceAttribute.
+
+
+
+
+ TestActionItem represents a single execution of an
+ ITestAction. It is used to track whether the BeforeTest
+ method has been called and suppress calling the
+ AfterTest method if it has not.
+
+
+
+
+ Construct a TestActionItem
+
+ The ITestAction to be included
+
+
+
+ Run the BeforeTest method of the action and remember that it has been run.
+
+ The test to which the action applies
+
+
+
+ Run the AfterTest action, but only if the BeforeTest
+ action was actually run.
+
+ The test to which the action applies
+
+
+
+ InternalTraceLevel is an enumeration controlling the
+ level of detailed presented in the internal log.
+
+
+
+
+ Use the default settings as specified by the user.
+
+
+
+
+ Do not display any trace messages
+
+
+
+
+ Display Error messages only
+
+
+
+
+ Display Warning level and higher messages
+
+
+
+
+ Display informational and higher messages
+
+
+
+
+ Display debug messages and higher - i.e. all messages
+
+
+
+
+ Display debug messages and higher - i.e. all messages
+
+
+
+
+ The ParallelScope enumeration permits specifying the degree to
+ which a test and its descendants may be run in parallel.
+
+
+
+
+ No Parallelism is permitted
+
+
+
+
+ The test itself may be run in parallel with others at the same level
+
+
+
+
+ Descendants of the test may be run in parallel with one another
+
+
+
+
+ Descendants of the test down to the level of TestFixtures may be run in parallel
+
+
+
+
+ ListMapper is used to transform a collection used as an actual argument
+ producing another collection to be used in the assertion.
+
+
+
+
+ Construct a ListMapper based on a collection
+
+ The collection to be transformed
+
+
+
+ Produces a collection containing all the _values of a property
+
+ The collection of property _values
+
+
+
+
+ The List class is a helper class with properties and methods
+ that supply a number of constraints used with lists and collections.
+
+
+
+
+ List.Map returns a ListMapper, which can be used to map
+ the original collection to another collection.
+
+
+
+
+
+
+ TestAssembly is a TestSuite that represents the execution
+ of tests in a managed assembly.
+
+
+
+
+ Initializes a new instance of the class
+ specifying the Assembly and the path from which it was loaded.
+
+ The assembly this test represents.
+ The path used to load the assembly.
+
+
+
+ Initializes a new instance of the class
+ for a path which could not be loaded.
+
+ The path used to load the assembly.
+
+
+
+ Gets the Assembly represented by this instance.
+
+
+
+
+ Gets the name used for the top-level element in the
+ XML representation of this test
+
+
+
+
+ SetUpFixture extends TestSuite and supports
+ Setup and TearDown methods.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The type.
+
+
+
+ TrueConstraint tests that the actual value is true
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for success, false for failure
+
+
+
+ The Tolerance class generalizes the notion of a tolerance
+ within which an equality test succeeds. Normally, it is
+ used with numeric types, but it can be used with any
+ type that supports taking a difference between two
+ objects and comparing that difference to a value.
+
+
+
+
+ Constructs a linear tolerance of a specified amount
+
+
+
+
+ Constructs a tolerance given an amount and
+
+
+
+
+ Tests that the current Tolerance is linear with a
+ numeric value, throwing an exception if it is not.
+
+
+
+
+ Returns a default Tolerance object, equivalent to
+ specifying an exact match unless
+ is set, in which case, the
+ will be used.
+
+
+
+
+ Returns an empty Tolerance object, equivalent to
+ specifying an exact match even if
+ is set.
+
+
+
+
+ Gets the for the current Tolerance
+
+
+
+
+ Gets the value of the current Tolerance instance.
+
+
+
+
+ Returns a new tolerance, using the current amount as a percentage.
+
+
+
+
+ Returns a new tolerance, using the current amount in Ulps
+
+
+
+
+ Returns a new tolerance with a as the amount, using
+ the current amount as a number of days.
+
+
+
+
+ Returns a new tolerance with a as the amount, using
+ the current amount as a number of hours.
+
+
+
+
+ Returns a new tolerance with a as the amount, using
+ the current amount as a number of minutes.
+
+
+
+
+ Returns a new tolerance with a as the amount, using
+ the current amount as a number of seconds.
+
+
+
+
+ Returns a new tolerance with a as the amount, using
+ the current amount as a number of milliseconds.
+
+
+
+
+ Returns a new tolerance with a as the amount, using
+ the current amount as a number of clock ticks.
+
+
+
+
+ Returns true if the current tolerance has not been set or is using the .
+
+
+
+
+ StartsWithConstraint can test whether a string starts
+ with an expected substring.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The expected string
+
+
+
+ Test whether the constraint is matched by the actual value.
+ This is a template method, which calls the IsMatch method
+ of the derived class.
+
+
+
+
+
+
+ Operator that tests that an exception is thrown and
+ optionally applies further tests to the exception.
+
+
+
+
+ Construct a ThrowsOperator
+
+
+
+
+ Reduce produces a constraint from the operator and
+ any arguments. It takes the arguments from the constraint
+ stack and pushes the resulting constraint on it.
+
+
+
+
+ ConstraintExpression represents a compound constraint in the
+ process of being constructed from a series of syntactic elements.
+
+ Individual elements are appended to the expression as they are
+ reorganized. When a constraint is appended, it is returned as the
+ value of the operation so that modifiers may be applied. However,
+ any partially built expression is attached to the constraint for
+ later resolution. When an operator is appended, the partial
+ expression is returned. If it's a self-resolving operator, then
+ a ResolvableConstraintExpression is returned.
+
+
+
+
+ The ConstraintBuilder holding the elements recognized so far
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the
+ class passing in a ConstraintBuilder, which may be pre-populated.
+
+ The builder.
+
+
+
+ Returns a string representation of the expression as it
+ currently stands. This should only be used for testing,
+ since it has the side-effect of resolving the expression.
+
+
+
+
+
+ Appends an operator to the expression and returns the
+ resulting expression itself.
+
+
+
+
+ Appends a self-resolving operator to the expression and
+ returns a new ResolvableConstraintExpression.
+
+
+
+
+ Appends a constraint to the expression and returns that
+ constraint, which is associated with the current state
+ of the expression being built. Note that the constraint
+ is not reduced at this time. For example, if there
+ is a NotOperator on the stack we don't reduce and
+ return a NotConstraint. The original constraint must
+ be returned because it may support modifiers that
+ are yet to be applied.
+
+
+
+
+ Returns a ConstraintExpression, which will apply
+ the following constraint to all members of a collection,
+ succeeding only if a specified number of them succeed.
+
+
+
+
+ Returns a new PropertyConstraintExpression, which will either
+ test for the existence of the named property on the object
+ being tested or apply any following constraint to that property.
+
+
+
+
+ Returns a new AttributeConstraint checking for the
+ presence of a particular attribute on an object.
+
+
+
+
+ Returns a new AttributeConstraint checking for the
+ presence of a particular attribute on an object.
+
+
+
+
+ Returns the constraint provided as an argument - used to allow custom
+ custom constraints to easily participate in the syntax.
+
+
+
+
+ Returns the constraint provided as an argument - used to allow custom
+ custom constraints to easily participate in the syntax.
+
+
+
+
+ Returns a constraint that tests two items for equality
+
+
+
+
+ Returns a constraint that tests that two references are the same object
+
+
+
+
+ Returns a constraint that tests whether the
+ actual value is greater than the supplied argument
+
+
+
+
+ Returns a constraint that tests whether the
+ actual value is greater than or equal to the supplied argument
+
+
+
+
+ Returns a constraint that tests whether the
+ actual value is greater than or equal to the supplied argument
+
+
+
+
+ Returns a constraint that tests whether the
+ actual value is less than the supplied argument
+
+
+
+
+ Returns a constraint that tests whether the
+ actual value is less than or equal to the supplied argument
+
+
+
+
+ Returns a constraint that tests whether the
+ actual value is less than or equal to the supplied argument
+
+
+
+
+ Returns a constraint that tests whether the actual
+ value is of the exact type supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual
+ value is of the exact type supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is of the type supplied as an argument or a derived type.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is of the type supplied as an argument or a derived type.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is assignable from the type supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is assignable from the type supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is assignable from the type supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is assignable from the type supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is a collection containing the same elements as the
+ collection supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is a subset of the collection supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the actual value
+ is a superset of the collection supplied as an argument.
+
+
+
+
+ Returns a new CollectionContainsConstraint checking for the
+ presence of a particular object in the collection.
+
+
+
+
+ Returns a new CollectionContainsConstraint checking for the
+ presence of a particular object in the collection.
+
+
+
+
+ Returns a new ContainsConstraint. This constraint
+ will, in turn, make use of the appropriate second-level
+ constraint, depending on the type of the actual argument.
+ This overload is only used if the item sought is a string,
+ since any other type implies that we are looking for a
+ collection member.
+
+
+
+
+ Returns a new ContainsConstraint. This constraint
+ will, in turn, make use of the appropriate second-level
+ constraint, depending on the type of the actual argument.
+ This overload is only used if the item sought is a string,
+ since any other type implies that we are looking for a
+ collection member.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value contains the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value contains the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value starts with the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value starts with the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value starts with the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value ends with the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value ends with the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value ends with the substring supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value matches the regular expression supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value matches the regular expression supplied as an argument.
+
+
+
+
+ Returns a constraint that succeeds if the actual
+ value matches the regular expression supplied as an argument.
+
+
+
+
+ Returns a constraint that tests whether the path provided
+ is the same as an expected path after canonicalization.
+
+
+
+
+ Returns a constraint that tests whether the path provided
+ is the a subpath of the expected path after canonicalization.
+
+
+
+
+ Returns a constraint that tests whether the path provided
+ is the same path or under an expected path after canonicalization.
+
+
+
+
+ Returns a constraint that tests whether the actual value falls
+ within a specified range.
+
+
+
+
+ Returns a ConstraintExpression that negates any
+ following constraint.
+
+
+
+
+ Returns a ConstraintExpression that negates any
+ following constraint.
+
+
+
+
+ Returns a ConstraintExpression, which will apply
+ the following constraint to all members of a collection,
+ succeeding if all of them succeed.
+
+
+
+
+ Returns a ConstraintExpression, which will apply
+ the following constraint to all members of a collection,
+ succeeding if at least one of them succeeds.
+
+
+
+
+ Returns a ConstraintExpression, which will apply
+ the following constraint to all members of a collection,
+ succeeding if all of them fail.
+
+
+
+
+ Returns a new ConstraintExpression, which will apply the following
+ constraint to the Length property of the object being tested.
+
+
+
+
+ Returns a new ConstraintExpression, which will apply the following
+ constraint to the Count property of the object being tested.
+
+
+
+
+ Returns a new ConstraintExpression, which will apply the following
+ constraint to the Message property of the object being tested.
+
+
+
+
+ Returns a new ConstraintExpression, which will apply the following
+ constraint to the InnerException property of the object being tested.
+
+
+
+
+ With is currently a NOP - reserved for future use.
+
+
+
+
+ Returns a constraint that tests for null
+
+
+
+
+ Returns a constraint that tests for True
+
+
+
+
+ Returns a constraint that tests for False
+
+
+
+
+ Returns a constraint that tests for a positive value
+
+
+
+
+ Returns a constraint that tests for a negative value
+
+
+
+
+ Returns a constraint that tests if item is equal to zero
+
+
+
+
+ Returns a constraint that tests for NaN
+
+
+
+
+ Returns a constraint that tests for empty
+
+
+
+
+ Returns a constraint that tests whether a collection
+ contains all unique items.
+
+
+
+
+ Returns a constraint that tests whether an object graph is serializable in binary format.
+
+
+
+
+ Returns a constraint that tests whether an object graph is serializable in xml format.
+
+
+
+
+ Returns a constraint that tests whether a collection is ordered
+
+
+
+
+ Returns a constraint that succeeds if the value
+ is a file or directory and it exists.
+
+
+
+
+ Attribute used to apply a category to a test
+
+
+
+
+ The name of the category
+
+
+
+
+ Construct attribute for a given category based on
+ a name. The name may not contain the characters ',',
+ '+', '-' or '!'. However, this is not checked in the
+ constructor since it would cause an error to arise at
+ as the test was loaded without giving a clear indication
+ of where the problem is located. The error is handled
+ in NUnitFramework.cs by marking the test as not
+ runnable.
+
+ The name of the category
+
+
+
+ Protected constructor uses the Type name as the name
+ of the category.
+
+
+
+
+ Modifies a test by adding a category to it.
+
+ The test to modify
+
+
+
+ The name of the category
+
+
+
+
+ IdFilter selects tests based on their id
+
+
+
+
+ Construct an IdFilter for a single value
+
+ The id the filter will recognize.
+
+
+
+ Match a test against a single value.
+
+
+
+
+ Gets the element name
+
+ Element name
+
+
+
+ Represents a constraint that succeeds if none of the
+ members of a collection match a base constraint.
+
+
+
+
+ Returns a constraint that will apply the argument
+ to the members of a collection, succeeding if
+ none of them succeed.
+
+
+
+
+ Indicates which class the test or test fixture is testing
+
+
+
+
+ Initializes a new instance of the class.
+
+ The type that is being tested.
+
+
+
+ Initializes a new instance of the class.
+
+ The type that is being tested.
+
+
+
+ Defines the order that the test will run in
+
+
+
+
+ Defines the order that the test will run in
+
+
+
+
+ Defines the order that the test will run in
+
+
+
+
+
+ Modifies a test as defined for the specific attribute.
+
+ The test to modify
+
+
+
+ SingleThreadedAttribute applies to a test fixture and indicates
+ that all the child tests must be run on the same thread as the
+ OneTimeSetUp and OneTimeTearDown. It sets a flag in the
+ TestExecutionContext and forces all tests to be run sequentially
+ on the current thread. Any ParallelScope setting is ignored.
+
+
+
+
+ Apply changes to the TestExecutionContext
+
+ The TestExecutionContext
+
+
+
+ FrameworkPackageSettings is a static class containing constant values that
+ are used as keys in setting up a TestPackage. These values are used in
+ the framework, and set in the runner. Setting values may be a string, int or bool.
+
+
+
+
+ Flag (bool) indicating whether tests are being debugged.
+
+
+
+
+ Flag (bool) indicating whether to pause execution of tests to allow
+ the user to attache a debugger.
+
+
+
+
+ The InternalTraceLevel for this run. Values are: "Default",
+ "Off", "Error", "Warning", "Info", "Debug", "Verbose".
+ Default is "Off". "Debug" and "Verbose" are synonyms.
+
+
+
+
+ Full path of the directory to be used for work and result files.
+ This path is provided to tests by the frameowrk TestContext.
+
+
+
+
+ Integer value in milliseconds for the default timeout value
+ for test cases. If not specified, there is no timeout except
+ as specified by attributes on the tests themselves.
+
+
+
+
+ A TextWriter to which the internal trace will be sent.
+
+
+
+
+ A list of tests to be loaded.
+
+
+
+
+ The number of test threads to run for the assembly. If set to
+ 1, a single queue is used. If set to 0, tests are executed
+ directly, without queuing.
+
+
+
+
+ The random seed to be used for this assembly. If specified
+ as the value reported from a prior run, the framework should
+ generate identical random values for tests as were used for
+ that run, provided that no change has been made to the test
+ assembly. Default is a random value itself.
+
+
+
+
+ If true, execution stops after the first error or failure.
+
+
+
+
+ If true, use of the event queue is suppressed and test events are synchronous.
+
+
+
+
+ The default naming pattern used in generating test names
+
+
+
+
+ Parameters to be passed on to the test
+
+
+
+
+ Represents a constraint that succeeds if the specified
+ count of members of a collection match a base constraint.
+
+
+
+
+ Construct an ExactCountOperator for a specified count
+
+ The expected count
+
+
+
+ Returns a constraint that will apply the argument
+ to the members of a collection, succeeding if
+ none of them succeed.
+
+
+
+
+ ParameterizedFixtureSuite serves as a container for the set of test
+ fixtures created from a given Type using various parameters.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The ITypeInfo for the type that represents the suite.
+
+
+
+ Gets a string representing the type of test
+
+
+
+
+
+ ReusableConstraint wraps a constraint expression after
+ resolving it so that it can be reused consistently.
+
+
+
+
+ Construct a ReusableConstraint from a constraint expression
+
+ The expression to be resolved and reused
+
+
+
+ Converts a constraint to a ReusableConstraint
+
+ The constraint to be converted
+ A ReusableConstraint
+
+
+
+ Returns a that represents this instance.
+
+
+ A that represents this instance.
+
+
+
+
+ Return the top-level constraint for this expression
+
+
+
+
+
+ PropertyExistsConstraint tests that a named property
+ exists on the object provided through Match.
+
+ Originally, PropertyConstraint provided this feature
+ in addition to making optional tests on the value
+ of the property. The two constraints are now separate.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The name of the property.
+
+
+
+ Test whether the property exists for a given object
+
+ The object to be tested
+ True for success, false for failure
+
+
+
+ Returns the string representation of the constraint.
+
+
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ PropertyConstraint extracts a named property and uses
+ its value as the actual value for a chained constraint.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The name.
+ The constraint to apply to the property.
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for success, false for failure
+
+
+
+ Returns the string representation of the constraint.
+
+
+
+
+
+ Represents a constraint that simply wraps the
+ constraint provided as an argument, without any
+ further functionality, but which modifies the
+ order of evaluation because of its precedence.
+
+
+
+
+ Constructor for the WithOperator
+
+
+
+
+ Returns a constraint that wraps its argument
+
+
+
+
+ NUnitComparer encapsulates NUnit's default behavior
+ in comparing two objects.
+
+
+
+
+ Compares two objects
+
+
+
+
+
+
+
+ Returns the default NUnitComparer.
+
+
+
+
+ Tests whether a value is less than or equal to the value supplied to its constructor
+
+
+
+
+ Initializes a new instance of the class.
+
+ The expected value.
+
+
+
+ Attribute used to identify a method that is
+ called before any tests in a fixture are run.
+
+
+
+
+ Used to mark a field for use as a datapoint when executing a theory
+ within the same fixture that requires an argument of the field's Type.
+
+
+
+
+ AssertionHelper is an optional base class for user tests,
+ allowing the use of shorter ids for constraints and
+ asserts and avoiding conflict with the definition of
+ , from which it inherits much of its
+ behavior, in certain mock object frameworks.
+
+
+
+
+ Asserts that a condition is true. If the condition is false the method throws
+ an . Works Identically to
+ .
+
+ The evaluated condition
+ The message to display if the condition is false
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that a condition is true. If the condition is false the method throws
+ an . Works Identically to .
+
+ The evaluated condition
+
+
+
+ Apply a constraint to an actual value, succeeding if the constraint
+ is satisfied and throwing an assertion exception on failure.
+
+ A Constraint expression to be applied
+ An ActualValueDelegate returning the value to be tested
+
+
+
+ Apply a constraint to an actual value, succeeding if the constraint
+ is satisfied and throwing an assertion exception on failure.
+
+ An ActualValueDelegate returning the value to be tested
+ A Constraint expression to be applied
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that the code represented by a delegate throws an exception
+ that satisfies the constraint provided.
+
+ A TestDelegate to be executed
+ A ThrowsConstraint used in the test
+
+
+
+ Apply a constraint to an actual value, succeeding if the constraint
+ is satisfied and throwing an assertion exception on failure.
+
+ A Constraint to be applied
+ The actual value to test
+
+
+
+ Apply a constraint to an actual value, succeeding if the constraint
+ is satisfied and throwing an assertion exception on failure.
+
+ A Constraint expression to be applied
+ The actual value to test
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Returns a ListMapper based on a collection.
+
+ The original collection
+
+
+
+
+ TextMessageWriter writes constraint descriptions and messages
+ in displayable form as a text stream. It tailors the display
+ of individual message components to form the standard message
+ format of NUnit assertion failure messages.
+
+
+
+
+ Prefix used for the expected value line of a message
+
+
+
+
+ Prefix used for the actual value line of a message
+
+
+
+
+ Length of a message prefix
+
+
+
+
+ Construct a TextMessageWriter
+
+
+
+
+ Construct a TextMessageWriter, specifying a user message
+ and optional formatting arguments.
+
+
+
+
+
+
+ Method to write single line message with optional args, usually
+ written to precede the general failure message, at a given
+ indentation level.
+
+ The indentation level of the message
+ The message to be written
+ Any arguments used in formatting the message
+
+
+
+ Display Expected and Actual lines for a constraint. This
+ is called by MessageWriter's default implementation of
+ WriteMessageTo and provides the generic two-line display.
+
+ The result of the constraint that failed
+
+
+
+ Display Expected and Actual lines for given _values. This
+ method may be called by constraints that need more control over
+ the display of actual and expected _values than is provided
+ by the default implementation.
+
+ The expected value
+ The actual value causing the failure
+
+
+
+ Display Expected and Actual lines for given _values, including
+ a tolerance value on the expected line.
+
+ The expected value
+ The actual value causing the failure
+ The tolerance within which the test was made
+
+
+
+ Display the expected and actual string _values on separate lines.
+ If the mismatch parameter is >=0, an additional line is displayed
+ line containing a caret that points to the mismatch point.
+
+ The expected string value
+ The actual string value
+ The point at which the strings don't match or -1
+ If true, case is ignored in string comparisons
+ If true, clip the strings to fit the max line length
+
+
+
+ Writes the text for an actual value.
+
+ The actual value.
+
+
+
+ Writes the text for a generalized value.
+
+ The value.
+
+
+
+ Writes the text for a collection value,
+ starting at a particular point, to a max length
+
+ The collection containing elements to write.
+ The starting point of the elements to write
+ The maximum number of elements to write
+
+
+
+ Write the generic 'Expected' line for a constraint
+
+ The constraint that failed
+
+
+
+ Write the generic 'Expected' line for a given value
+
+ The expected value
+
+
+
+ Write the generic 'Expected' line for a given value
+ and tolerance.
+
+ The expected value
+ The tolerance within which the test was made
+
+
+
+ Write the generic 'Actual' line for a constraint
+
+ The ConstraintResult for which the actual value is to be written
+
+
+
+ Write the generic 'Actual' line for a given value
+
+ The actual value causing a failure
+
+
+
+ Gets or sets the maximum line length for this writer
+
+
+
+
+ EventListenerTextWriter sends text output to the currently active
+ ITestEventListener in the form of a TestOutput object. If no event
+ listener is active in the contet, or if there is no context,
+ the output is forwarded to the supplied default writer.
+
+
+
+
+ Construct an EventListenerTextWriter
+
+ The name of the stream to use for events
+ The default writer to use if no listener is available
+
+
+
+ Write a single char
+
+
+
+
+ Write a string
+
+
+
+
+ Write a string followed by a newline
+
+
+
+
+ Get the Encoding for this TextWriter
+
+
+
+
+ CollectionSupersetConstraint is used to determine whether
+ one collection is a superset of another
+
+
+
+
+ Construct a CollectionSupersetConstraint
+
+ The collection that the actual value is expected to be a superset of
+
+
+
+ Test whether the actual collection is a superset of
+ the expected collection provided.
+
+
+
+
+
+
+ Flag the constraint to use the supplied predicate function
+
+ The comparison function to use.
+ Self.
+
+
+
+ The display name of this Constraint for use by ToString().
+ The default value is the name of the constraint with
+ trailing "Constraint" removed. Derived classes may set
+ this to another name in their constructors.
+
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ ParameterizedMethodSuite holds a collection of individual
+ TestMethods with their arguments applied.
+
+
+
+
+ Construct from a MethodInfo
+
+
+
+
+
+ Gets a string representing the type of test
+
+
+
+
+
+ OSPlatform represents a particular operating system platform
+
+
+
+
+ Platform ID for Unix as defined by Microsoft .NET 2.0 and greater
+
+
+
+
+ Platform ID for Unix as defined by Mono
+
+
+
+
+ Platform ID for XBox as defined by .NET and Mono, but not CF
+
+
+
+
+ Platform ID for MacOSX as defined by .NET and Mono, but not CF
+
+
+
+
+ Gets the actual OS Version, not the incorrect value that might be
+ returned for Win 8.1 and Win 10
+
+
+ If an application is not manifested as Windows 8.1 or Windows 10,
+ the version returned from Environment.OSVersion will not be 6.3 and 10.0
+ respectively, but will be 6.2 and 6.3. The correct value can be found in
+ the registry.
+
+ The original version
+ The correct OS version
+
+
+
+ Construct from a platform ID and version
+
+
+
+
+ Construct from a platform ID, version and product type
+
+
+
+
+ Get the OSPlatform under which we are currently running
+
+
+
+
+ Get the platform ID of this instance
+
+
+
+
+ Get the Version of this instance
+
+
+
+
+ Get the Product Type of this instance
+
+
+
+
+ Return true if this is a windows platform
+
+
+
+
+ Return true if this is a Unix or Linux platform
+
+
+
+
+ Return true if the platform is Win32S
+
+
+
+
+ Return true if the platform is Win32Windows
+
+
+
+
+ Return true if the platform is Win32NT
+
+
+
+
+ Return true if the platform is Windows CE
+
+
+
+
+ Return true if the platform is Xbox
+
+
+
+
+ Return true if the platform is MacOSX
+
+
+
+
+ Return true if the platform is Windows 95
+
+
+
+
+ Return true if the platform is Windows 98
+
+
+
+
+ Return true if the platform is Windows ME
+
+
+
+
+ Return true if the platform is NT 3
+
+
+
+
+ Return true if the platform is NT 4
+
+
+
+
+ Return true if the platform is NT 5
+
+
+
+
+ Return true if the platform is Windows 2000
+
+
+
+
+ Return true if the platform is Windows XP
+
+
+
+
+ Return true if the platform is Windows 2003 Server
+
+
+
+
+ Return true if the platform is NT 6
+
+
+
+
+ Return true if the platform is NT 6.0
+
+
+
+
+ Return true if the platform is NT 6.1
+
+
+
+
+ Return true if the platform is NT 6.2
+
+
+
+
+ Return true if the platform is NT 6.3
+
+
+
+
+ Return true if the platform is Vista
+
+
+
+
+ Return true if the platform is Windows 2008 Server (original or R2)
+
+
+
+
+ Return true if the platform is Windows 2008 Server (original)
+
+
+
+
+ Return true if the platform is Windows 2008 Server R2
+
+
+
+
+ Return true if the platform is Windows 2012 Server (original or R2)
+
+
+
+
+ Return true if the platform is Windows 2012 Server (original)
+
+
+
+
+ Return true if the platform is Windows 2012 Server R2
+
+
+
+
+ Return true if the platform is Windows 7
+
+
+
+
+ Return true if the platform is Windows 8
+
+
+
+
+ Return true if the platform is Windows 8.1
+
+
+
+
+ Return true if the platform is Windows 10
+
+
+
+
+ Return true if the platform is Windows Server. This is named Windows
+ Server 10 to distinguish it from previous versions of Windows Server.
+
+
+
+
+ Product Type Enumeration used for Windows
+
+
+
+
+ Product type is unknown or unspecified
+
+
+
+
+ Product type is Workstation
+
+
+
+
+ Product type is Domain Controller
+
+
+
+
+ Product type is Server
+
+
+
+
+ Combines multiple filters so that a test must pass one
+ of them in order to pass this filter.
+
+
+
+
+ Constructs an empty OrFilter
+
+
+
+
+ Constructs an AndFilter from an array of filters
+
+
+
+
+
+ Checks whether the OrFilter is matched by a test
+
+ The test to be matched
+ True if any of the component filters pass, otherwise false
+
+
+
+ Checks whether the OrFilter is matched by a test
+
+ The test to be matched
+ True if any of the component filters match, otherwise false
+
+
+
+ Checks whether the OrFilter is explicit matched by a test
+
+ The test to be matched
+ True if any of the component filters explicit match, otherwise false
+
+
+
+ Gets the element name
+
+ Element name
+
+
+
+ InstanceOfTypeConstraint is used to test that an object
+ is of the same type provided or derived from it.
+
+
+
+
+ Construct an InstanceOfTypeConstraint for the type provided
+
+ The expected Type
+
+
+
+ Apply the constraint to an actual value, returning true if it succeeds
+
+ The actual argument
+ True if the constraint succeeds, otherwise false.
+
+
+
+ The display name of this Constraint for use by ToString().
+ The default value is the name of the constraint with
+ trailing "Constraint" removed. Derived classes may set
+ this to another name in their constructors.
+
+
+
+
+ Tests whether a value is greater than the value supplied to its constructor
+
+
+
+
+ Initializes a new instance of the class.
+
+ The expected value.
+
+
+
+ DictionaryContainsKeyConstraint is used to test whether a dictionary
+ contains an expected object as a key.
+
+
+
+
+ Construct a DictionaryContainsKeyConstraint
+
+
+
+
+
+ Test whether the expected key is contained in the dictionary
+
+
+
+
+ The display name of this Constraint for use by ToString().
+ The default value is the name of the constraint with
+ trailing "Constraint" removed. Derived classes may set
+ this to another name in their constructors.
+
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ ContainsConstraint tests a whether a string contains a substring
+ or a collection contains an object. It postpones the decision of
+ which test to use until the type of the actual argument is known.
+ This allows testing whether a string is contained in a collection
+ or as a substring of another string using the same syntax.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The _expected.
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for success, false for failure
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ Flag the constraint to ignore case and return self.
+
+
+
+
+ CollectionTally counts (tallies) the number of
+ occurrences of each object in one or more enumerations.
+
+
+
+
+ Construct a CollectionTally object from a comparer and a collection
+
+
+
+
+ Try to remove an object from the tally
+
+ The object to remove
+ True if successful, false if the object was not found
+
+
+
+ Try to remove a set of objects from the tally
+
+ The objects to remove
+ True if successful, false if any object was not found
+
+
+
+ The number of objects remaining in the tally
+
+
+
+
+ AllItemsConstraint applies another constraint to each
+ item in a collection, succeeding if they all succeed.
+
+
+
+
+ Construct an AllItemsConstraint on top of an existing constraint
+
+
+
+
+
+ Apply the item constraint to each item in the collection,
+ failing if any item fails.
+
+
+
+
+
+
+ The display name of this Constraint for use by ToString().
+ The default value is the name of the constraint with
+ trailing "Constraint" removed. Derived classes may set
+ this to another name in their constructors.
+
+
+
+
+ A set of Assert methods operating on one or more collections
+
+
+
+
+ The Equals method throws an InvalidOperationException. This is done
+ to make sure there is no mistake by calling this function.
+
+
+
+
+
+
+ override the default ReferenceEquals to throw an InvalidOperationException. This
+ implementation makes sure there is no mistake in calling this function
+ as part of Assert.
+
+
+
+
+
+
+ Asserts that all items contained in collection are of the type specified by expectedType.
+
+ IEnumerable containing objects to be considered
+ System.Type that all objects in collection must be instances of
+
+
+
+ Asserts that all items contained in collection are of the type specified by expectedType.
+
+ IEnumerable containing objects to be considered
+ System.Type that all objects in collection must be instances of
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that all items contained in collection are not equal to null.
+
+ IEnumerable containing objects to be considered
+
+
+
+ Asserts that all items contained in collection are not equal to null.
+
+ IEnumerable of objects to be considered
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Ensures that every object contained in collection exists within the collection
+ once and only once.
+
+ IEnumerable of objects to be considered
+
+
+
+ Ensures that every object contained in collection exists within the collection
+ once and only once.
+
+ IEnumerable of objects to be considered
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that expected and actual are exactly equal. The collections must have the same count,
+ and contain the exact same objects in the same order.
+
+ The first IEnumerable of objects to be considered
+ The second IEnumerable of objects to be considered
+
+
+
+ Asserts that expected and actual are exactly equal. The collections must have the same count,
+ and contain the exact same objects in the same order.
+ If comparer is not null then it will be used to compare the objects.
+
+ The first IEnumerable of objects to be considered
+ The second IEnumerable of objects to be considered
+ The IComparer to use in comparing objects from each IEnumerable
+
+
+
+ Asserts that expected and actual are exactly equal. The collections must have the same count,
+ and contain the exact same objects in the same order.
+
+ The first IEnumerable of objects to be considered
+ The second IEnumerable of objects to be considered
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that expected and actual are exactly equal. The collections must have the same count,
+ and contain the exact same objects in the same order.
+ If comparer is not null then it will be used to compare the objects.
+
+ The first IEnumerable of objects to be considered
+ The second IEnumerable of objects to be considered
+ The IComparer to use in comparing objects from each IEnumerable
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order.
+
+ The first IEnumerable of objects to be considered
+ The second IEnumerable of objects to be considered
+
+
+
+ Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order.
+
+ The first IEnumerable of objects to be considered
+ The second IEnumerable of objects to be considered
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that expected and actual are not exactly equal.
+
+ The first IEnumerable of objects to be considered
+ The second IEnumerable of objects to be considered
+
+
+
+ Asserts that expected and actual are not exactly equal.
+ If comparer is not null then it will be used to compare the objects.
+
+ The first IEnumerable of objects to be considered
+ The second IEnumerable of objects to be considered
+ The IComparer to use in comparing objects from each IEnumerable
+
+
+
+ Asserts that expected and actual are not exactly equal.
+
+ The first IEnumerable of objects to be considered
+ The second IEnumerable of objects to be considered
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that expected and actual are not exactly equal.
+ If comparer is not null then it will be used to compare the objects.
+
+ The first IEnumerable of objects to be considered
+ The second IEnumerable of objects to be considered
+ The IComparer to use in comparing objects from each IEnumerable
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that expected and actual are not equivalent.
+
+ The first IEnumerable of objects to be considered
+ The second IEnumerable of objects to be considered
+
+
+
+ Asserts that expected and actual are not equivalent.
+
+ The first IEnumerable of objects to be considered
+ The second IEnumerable of objects to be considered
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that collection contains actual as an item.
+
+ IEnumerable of objects to be considered
+ Object to be found within collection
+
+
+
+ Asserts that collection contains actual as an item.
+
+ IEnumerable of objects to be considered
+ Object to be found within collection
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that collection does not contain actual as an item.
+
+ IEnumerable of objects to be considered
+ Object that cannot exist within collection
+
+
+
+ Asserts that collection does not contain actual as an item.
+
+ IEnumerable of objects to be considered
+ Object that cannot exist within collection
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that the superset does not contain the subset
+
+ The IEnumerable subset to be considered
+ The IEnumerable superset to be considered
+
+
+
+ Asserts that the superset does not contain the subset
+
+ The IEnumerable subset to be considered
+ The IEnumerable superset to be considered
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that the superset contains the subset.
+
+ The IEnumerable subset to be considered
+ The IEnumerable superset to be considered
+
+
+
+ Asserts that the superset contains the subset.
+
+ The IEnumerable subset to be considered
+ The IEnumerable superset to be considered
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that the subset does not contain the superset
+
+ The IEnumerable superset to be considered
+ The IEnumerable subset to be considered
+
+
+
+ Asserts that the subset does not contain the superset
+
+ The IEnumerable superset to be considered
+ The IEnumerable subset to be considered
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that the subset contains the superset.
+
+ The IEnumerable superset to be considered
+ The IEnumerable subset to be considered
+
+
+
+ Asserts that the subset contains the superset.
+
+ The IEnumerable superset to be considered
+ The IEnumerable subset to be considered
+ The message that will be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Assert that an array, list or other collection is empty
+
+ An array, list or other collection implementing IEnumerable
+ The message to be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Assert that an array,list or other collection is empty
+
+ An array, list or other collection implementing IEnumerable
+
+
+
+ Assert that an array, list or other collection is empty
+
+ An array, list or other collection implementing IEnumerable
+ The message to be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Assert that an array,list or other collection is empty
+
+ An array, list or other collection implementing IEnumerable
+
+
+
+ Assert that an array, list or other collection is ordered
+
+ An array, list or other collection implementing IEnumerable
+ The message to be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Assert that an array, list or other collection is ordered
+
+ An array, list or other collection implementing IEnumerable
+
+
+
+ Assert that an array, list or other collection is ordered
+
+ An array, list or other collection implementing IEnumerable
+ A custom comparer to perform the comparisons
+ The message to be displayed on failure
+ Arguments to be used in formatting the message
+
+
+
+ Assert that an array, list or other collection is ordered
+
+ An array, list or other collection implementing IEnumerable
+ A custom comparer to perform the comparisons
+
+
+
+ TestCaseSourceAttribute indicates the source to be used to
+ provide test cases for a test method.
+
+
+
+
+ Construct with the name of the method, property or field that will provide data
+
+ The name of a static method, property or field that will provide data.
+
+
+
+ Construct with a Type and name
+
+ The Type that will provide data
+ The name of a static method, property or field that will provide data.
+ A set of parameters passed to the method, works only if the Source Name is a method.
+ If the source name is a field or property has no effect.
+
+
+
+ Construct with a Type and name
+
+ The Type that will provide data
+ The name of a static method, property or field that will provide data.
+
+
+
+ Construct with a Type
+
+ The type that will provide data
+
+
+
+ Construct one or more TestMethods from a given MethodInfo,
+ using available parameter data.
+
+ The IMethod for which tests are to be constructed.
+ The suite to which the tests will be added.
+ One or more TestMethods
+
+
+
+ Returns a set of ITestCaseDataItems for use as arguments
+ to a parameterized test method.
+
+ The method for which data is needed.
+
+
+
+
+ A set of parameters passed to the method, works only if the Source Name is a method.
+ If the source name is a field or property has no effect.
+
+
+
+
+ The name of a the method, property or fiend to be used as a source
+
+
+
+
+ A Type to be used as a source
+
+
+
+
+ Gets or sets the category associated with every fixture created from
+ this attribute. May be a single category or a comma-separated list.
+
+
+
+
+ TestMethodCommand is the lowest level concrete command
+ used to run actual test cases.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The test.
+
+
+
+ Runs the test, saving a TestResult in the execution context, as
+ well as returning it. If the test has an expected result, it
+ is asserts on that value. Since failed tests and errors throw
+ an exception, this command must be wrapped in an outer command,
+ will handle that exception and records the failure. This role
+ is usually played by the SetUpTearDown command.
+
+ The execution context
+
+
+
+ SetUpTearDownCommand runs any SetUp methods for a suite,
+ runs the test and then runs any TearDown methods.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The inner command.
+
+
+
+ Runs the test, saving a TestResult in the supplied TestExecutionContext.
+
+ The context in which the test should run.
+ A TestResult
+
+
+
+ SetUpTearDownItem holds the setup and teardown methods
+ for a single level of the inheritance hierarchy.
+
+
+
+
+ Construct a SetUpTearDownNode
+
+ A list of setup methods for this level
+ A list teardown methods for this level
+
+
+
+ Run SetUp on this level.
+
+ The execution context to use for running.
+
+
+
+ Run TearDown for this level.
+
+
+
+
+
+ Returns true if this level has any methods at all.
+ This flag is used to discard levels that do nothing.
+
+
+
+
+ Class used to guard against unexpected argument values
+ or operations by throwing an appropriate exception.
+
+
+
+
+ Throws an exception if an argument is null
+
+ The value to be tested
+ The name of the argument
+
+
+
+ Throws an exception if a string argument is null or empty
+
+ The value to be tested
+ The name of the argument
+
+
+
+ Throws an ArgumentOutOfRangeException if the specified condition is not met.
+
+ The condition that must be met
+ The exception message to be used
+ The name of the argument
+
+
+
+ Throws an ArgumentException if the specified condition is not met.
+
+ The condition that must be met
+ The exception message to be used
+ The name of the argument
+
+
+
+ Throws an InvalidOperationException if the specified condition is not met.
+
+ The condition that must be met
+ The exception message to be used
+
+
+
+ SubPathConstraint tests that the actual path is under the expected path
+
+
+
+
+ Initializes a new instance of the class.
+
+ The expected path
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for success, false for failure
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ ParallelizableAttribute is used to mark tests that may be run in parallel.
+
+
+
+
+ Construct a ParallelizableAttribute using default ParallelScope.Self.
+
+
+
+
+ Construct a ParallelizableAttribute with a specified scope.
+
+ The ParallelScope associated with this attribute.
+
+
+
+ Modify the context to be used for child tests
+
+ The current TestExecutionContext
+
+
+
+ Helper class with properties and methods that supply
+ constraints that operate on exceptions.
+
+
+
+
+ Creates a constraint specifying the exact type of exception expected
+
+
+
+
+ Creates a constraint specifying the exact type of exception expected
+
+
+
+
+ Creates a constraint specifying the type of exception expected
+
+
+
+
+ Creates a constraint specifying the type of exception expected
+
+
+
+
+ Creates a constraint specifying an expected exception
+
+
+
+
+ Creates a constraint specifying an exception with a given InnerException
+
+
+
+
+ Creates a constraint specifying an expected TargetInvocationException
+
+
+
+
+ Creates a constraint specifying an expected ArgumentException
+
+
+
+
+ Creates a constraint specifying an expected ArgumentNUllException
+
+
+
+
+ Creates a constraint specifying an expected InvalidOperationException
+
+
+
+
+ Creates a constraint specifying that no exception is thrown
+
+
+
+
+ Enumeration identifying a common language
+ runtime implementation.
+
+
+
+ Any supported runtime framework
+
+
+ Microsoft .NET Framework
+
+
+ Microsoft .NET Compact Framework
+
+
+ Microsoft Shared Source CLI
+
+
+ Mono
+
+
+ Silverlight
+
+
+ MonoTouch
+
+
+
+ RuntimeFramework represents a particular version
+ of a common language runtime implementation.
+
+
+
+
+ DefaultVersion is an empty Version, used to indicate that
+ NUnit should select the CLR version to use for the test.
+
+
+
+
+ Construct from a runtime type and version. If the version has
+ two parts, it is taken as a framework version. If it has three
+ or more, it is taken as a CLR version. In either case, the other
+ version is deduced based on the runtime type and provided version.
+
+ The runtime type of the framework
+ The version of the framework
+
+
+
+ Parses a string representing a RuntimeFramework.
+ The string may be just a RuntimeType name or just
+ a Version or a hyphenated RuntimeType-Version or
+ a Version prefixed by 'versionString'.
+
+
+
+
+
+
+ Overridden to return the short name of the framework
+
+
+
+
+
+ Returns true if the current framework matches the
+ one supplied as an argument. Two frameworks match
+ if their runtime types are the same or either one
+ is RuntimeType.Any and all specified version components
+ are equal. Negative (i.e. unspecified) version
+ components are ignored.
+
+ The RuntimeFramework to be matched.
+ True on match, otherwise false
+
+
+
+ Static method to return a RuntimeFramework object
+ for the framework that is currently in use.
+
+
+
+
+ The type of this runtime framework
+
+
+
+
+ The framework version for this runtime framework
+
+
+
+
+ The CLR version for this runtime framework
+
+
+
+
+ Return true if any CLR version may be used in
+ matching this RuntimeFramework object.
+
+
+
+
+ Returns the Display name for this framework
+
+
+
+
+ CategoryFilter is able to select or exclude tests
+ based on their categories.
+
+
+
+
+
+ Construct a CategoryFilter using a single category name
+
+ A category name
+
+
+
+ Check whether the filter matches a test
+
+ The test to be matched
+
+
+
+
+ Gets the element name
+
+ Element name
+
+
+
+ GlobalSettings is a place for setting default values used
+ by the framework in performing asserts. Anything set through
+ this class applies to the entire test run. It should not normally
+ be used from within a test, since it is not thread-safe.
+
+
+
+
+ Default tolerance for floating point equality
+
+
+
+
+ Asserts on Files
+
+
+
+
+ The Equals method throws an InvalidOperationException. This is done
+ to make sure there is no mistake by calling this function.
+
+
+
+
+
+
+ override the default ReferenceEquals to throw an InvalidOperationException. This
+ implementation makes sure there is no mistake in calling this function
+ as part of Assert.
+
+
+
+
+
+
+ Verifies that two Streams are equal. Two Streams are considered
+ equal if both are null, or if both have the same value byte for byte.
+ If they are not equal an is thrown.
+
+ The expected Stream
+ The actual Stream
+ The message to display if Streams are not equal
+ Arguments to be used in formatting the message
+
+
+
+ Verifies that two Streams are equal. Two Streams are considered
+ equal if both are null, or if both have the same value byte for byte.
+ If they are not equal an is thrown.
+
+ The expected Stream
+ The actual Stream
+
+
+
+ Verifies that two files are equal. Two files are considered
+ equal if both are null, or if both have the same value byte for byte.
+ If they are not equal an is thrown.
+
+ A file containing the value that is expected
+ A file containing the actual value
+ The message to display if Streams are not equal
+ Arguments to be used in formatting the message
+
+
+
+ Verifies that two files are equal. Two files are considered
+ equal if both are null, or if both have the same value byte for byte.
+ If they are not equal an is thrown.
+
+ A file containing the value that is expected
+ A file containing the actual value
+
+
+
+ Verifies that two files are equal. Two files are considered
+ equal if both are null, or if both have the same value byte for byte.
+ If they are not equal an is thrown.
+
+ The path to a file containing the value that is expected
+ The path to a file containing the actual value
+ The message to display if Streams are not equal
+ Arguments to be used in formatting the message
+
+
+
+ Verifies that two files are equal. Two files are considered
+ equal if both are null, or if both have the same value byte for byte.
+ If they are not equal an is thrown.
+
+ The path to a file containing the value that is expected
+ The path to a file containing the actual value
+
+
+
+ Asserts that two Streams are not equal. If they are equal
+ an is thrown.
+
+ The expected Stream
+ The actual Stream
+ The message to be displayed when the two Stream are the same.
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that two Streams are not equal. If they are equal
+ an is thrown.
+
+ The expected Stream
+ The actual Stream
+
+
+
+ Asserts that two files are not equal. If they are equal
+ an is thrown.
+
+ A file containing the value that is expected
+ A file containing the actual value
+ The message to display if Streams are not equal
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that two files are not equal. If they are equal
+ an is thrown.
+
+ A file containing the value that is expected
+ A file containing the actual value
+
+
+
+ Asserts that two files are not equal. If they are equal
+ an is thrown.
+
+ The path to a file containing the value that is expected
+ The path to a file containing the actual value
+ The message to display if Streams are not equal
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that two files are not equal. If they are equal
+ an is thrown.
+
+ The path to a file containing the value that is expected
+ The path to a file containing the actual value
+
+
+
+ Asserts that the file exists. If it does not exist
+ an is thrown.
+
+ A file containing the actual value
+ The message to display if Streams are not equal
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that the file exists. If it does not exist
+ an is thrown.
+
+ A file containing the actual value
+
+
+
+ Asserts that the file exists. If it does not exist
+ an is thrown.
+
+ The path to a file containing the actual value
+ The message to display if Streams are not equal
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that the file exists. If it does not exist
+ an is thrown.
+
+ The path to a file containing the actual value
+
+
+
+ Asserts that the file does not exist. If it does exist
+ an is thrown.
+
+ A file containing the actual value
+ The message to display if Streams are not equal
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that the file does not exist. If it does exist
+ an is thrown.
+
+ A file containing the actual value
+
+
+
+ Asserts that the file does not exist. If it does exist
+ an is thrown.
+
+ The path to a file containing the actual value
+ The message to display if Streams are not equal
+ Arguments to be used in formatting the message
+
+
+
+ Asserts that the file does not exist. If it does exist
+ an is thrown.
+
+ The path to a file containing the actual value
+
+
+
+ Thrown when an assertion failed.
+
+
+
+
+
+
+ The error message that explains
+ the reason for the exception
+ The exception that caused the
+ current exception
+
+
+
+ Serialization Constructor
+
+
+
+
+ Gets the ResultState provided by this exception
+
+
+
+
+ SomeItemsConstraint applies another constraint to each
+ item in a collection, succeeding if any of them succeeds.
+
+
+
+
+ Construct a SomeItemsConstraint on top of an existing constraint
+
+
+
+
+
+ Apply the item constraint to each item in the collection,
+ succeeding if any item succeeds.
+
+
+
+
+
+
+ The display name of this Constraint for use by ToString().
+ The default value is the name of the constraint with
+ trailing "Constraint" removed. Derived classes may set
+ this to another name in their constructors.
+
+
+
+
+ SameAsConstraint tests whether an object is identical to
+ the object passed to its constructor
+
+
+
+
+ Initializes a new instance of the class.
+
+ The expected object.
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for success, false for failure
+
+
+
+ The Description of what this constraint tests, for
+ use in messages and in the ConstraintResult.
+
+
+
+
+ RegexConstraint can test whether a string matches
+ the pattern provided.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The pattern.
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for success, false for failure
+
+
+
+ ConstraintStatus represents the status of a ConstraintResult
+ returned by a Constraint being applied to an actual value.
+
+
+
+
+ The status has not yet been set
+
+
+
+
+ The constraint succeeded
+
+
+
+
+ The constraint failed
+
+
+
+
+ An error occured in applying the constraint (reserved for future use)
+
+
+
+
+ Attribute used to identify a method that is called
+ immediately after each test is run. The method is
+ guaranteed to be called, even if an exception is thrown.
+
+
+
+
+ Marks a test to use a combinatorial join of any argument
+ data provided. Since this is the default, the attribute is
+ optional.
+
+
+
+
+ Default constructor
+
+
+
+
+ The PropertyNames class provides static constants for the
+ standard property ids that NUnit uses on tests.
+
+
+
+
+ The FriendlyName of the AppDomain in which the assembly is running
+
+
+
+
+ The selected strategy for joining parameter data into test cases
+
+
+
+
+ The process ID of the executing assembly
+
+
+
+
+ The stack trace from any data provider that threw
+ an exception.
+
+
+
+
+ The reason a test was not run
+
+
+
+
+ The author of the tests
+
+
+
+
+ The ApartmentState required for running the test
+
+
+
+
+ The categories applying to a test
+
+
+
+
+ The Description of a test
+
+
+
+
+ The number of threads to be used in running tests
+
+
+
+
+ The maximum time in ms, above which the test is considered to have failed
+
+
+
+
+ The ParallelScope associated with a test
+
+
+
+
+ The number of times the test should be repeated
+
+
+
+
+ Indicates that the test should be run on a separate thread
+
+
+
+
+ The culture to be set for a test
+
+
+
+
+ The UI culture to be set for a test
+
+
+
+
+ The type that is under test
+
+
+
+
+ The timeout value for the test
+
+
+
+
+ The test will be ignored until the given date
+
+
+
+
+ The optional Order the test will run in
+
+
+
+
+ The MethodWrapper class wraps a MethodInfo so that it may
+ be used in a platform-independent manner.
+
+
+
+
+ Construct a MethodWrapper for a Type and a MethodInfo.
+
+
+
+
+ Construct a MethodInfo for a given Type and method name.
+
+
+
+
+ Gets the parameters of the method.
+
+
+
+
+
+ Returns the Type arguments of a generic method or the Type parameters of a generic method definition.
+
+
+
+
+ Replaces the type parameters of the method with the array of types provided and returns a new IMethodInfo.
+
+ The type arguments to be used
+ A new IMethodInfo with the type arguments replaced
+
+
+
+ Returns an array of custom attributes of the specified type applied to this method
+
+
+
+
+ Gets a value indicating whether one or more attributes of the spcified type are defined on the method.
+
+
+
+
+ Invokes the method, converting any TargetInvocationException to an NUnitException.
+
+ The object on which to invoke the method
+ The argument list for the method
+ The return value from the invoked method
+
+
+
+ Override ToString() so that error messages in NUnit's own tests make sense
+
+
+
+
+ Gets the Type from which this method was reflected.
+
+
+
+
+ Gets the MethodInfo for this method.
+
+
+
+
+ Gets the name of the method.
+
+
+
+
+ Gets a value indicating whether the method is abstract.
+
+
+
+
+ Gets a value indicating whether the method is public.
+
+
+
+
+ Gets a value indicating whether the method contains unassigned generic type parameters.
+
+
+
+
+ Gets a value indicating whether the method is a generic method.
+
+
+
+
+ Gets a value indicating whether the MethodInfo represents the definition of a generic method.
+
+
+
+
+ Gets the return Type of the method.
+
+
+
+
+ Represents a constraint that succeeds if any of the
+ members of a collection match a base constraint.
+
+
+
+
+ Returns a constraint that will apply the argument
+ to the members of a collection, succeeding if
+ any of them succeed.
+
+
+
+
+ The TestMethod class represents a Test implemented as a method.
+
+
+
+
+ The ParameterSet used to create this test method
+
+
+
+
+ Initializes a new instance of the class.
+
+ The method to be used as a test.
+
+
+
+ Initializes a new instance of the class.
+
+ The method to be used as a test.
+ The suite or fixture to which the new test will be added
+
+
+
+ Overridden to return a TestCaseResult.
+
+ A TestResult for this test.
+
+
+
+ Returns a TNode representing the current result after
+ adding it as a child of the supplied parent node.
+
+ The parent node.
+ If true, descendant results are included
+
+
+
+
+ Gets a bool indicating whether the current test
+ has any descendant tests.
+
+
+
+
+ Gets this test's child tests
+
+ A list of child tests
+
+
+
+ Gets the name used for the top-level element in the
+ XML representation of this test
+
+
+
+
+ Returns the name of the method
+
+
+
+
+ RangeConstraint tests whether two _values are within a
+ specified range.
+
+
+
+
+ Initializes a new instance of the class.
+
+ from must be less than or equal to true
+ Inclusive beginning of the range. Must be less than or equal to to.
+ Inclusive end of the range. Must be greater than or equal to from.
+
+
+
+ Test whether the constraint is satisfied by a given value
+
+ The value to be tested
+ True for success, false for failure
+
+
+
+ Modifies the constraint to use an and returns self.
+
+
+
+
+ Modifies the constraint to use an and returns self.
+
+
+
+
+ Modifies the constraint to use a and returns self.
+
+
+
+
+ Gets text describing a constraint
+
+
+
+
+ Tests whether a value is greater than or equal to the value supplied to its constructor
+
+
+
+
+ Initializes a new instance of the class.
+
+ The expected value.
+
+
+
+ Delegate used to delay evaluation of the actual value
+ to be used in evaluating a constraint
+
+
+
+
+ AttributeConstraint tests that a specified attribute is present
+ on a Type or other provider and that the value of the attribute
+ satisfies some other constraint.
+
+
+
+
+ Constructs an AttributeConstraint for a specified attribute
+ Type and base constraint.
+
+
+
+
+
+
+ Determines whether the Type or other provider has the
+ expected attribute and if its value matches the
+ additional constraint specified.
+
+
+
+
+ Returns a string representation of the constraint.
+
+
+
+
+ ValueSourceAttribute indicates the source to be used to
+ provide data for one parameter of a test method.
+
+
+
+
+ Construct with the name of the factory - for use with languages
+ that don't support params arrays.
+
+ The name of a static method, property or field that will provide data.
+
+
+
+ Construct with a Type and name - for use with languages
+ that don't support params arrays.
+
+ The Type that will provide data
+ The name of a static method, property or field that will provide data.
+
+
+
+ Gets an enumeration of data items for use as arguments
+ for a test method parameter.
+
+ The parameter for which data is needed
+
+ An enumeration containing individual data items
+
+
+
+
+ The name of a the method, property or fiend to be used as a source
+
+
+
+
+ A Type to be used as a source
+
+
+
+
+ Summary description for SetCultureAttribute.
+
+
+
+
+ Construct given the name of a culture
+
+
+
+
+
+ RandomAttribute is used to supply a set of random _values
+ to a single parameter of a parameterized test.
+
+
+
+
+ Construct a random set of values appropriate for the Type of the
+ parameter on which the attribute appears, specifying only the count.
+
+
+
+
+
+ Construct a set of ints within a specified range
+
+
+
+
+ Construct a set of unsigned ints within a specified range
+
+
+
+
+ Construct a set of longs within a specified range
+
+
+
+
+ Construct a set of unsigned longs within a specified range
+
+
+
+
+ Construct a set of shorts within a specified range
+
+
+
+
+ Construct a set of unsigned shorts within a specified range
+
+
+
+
+ Construct a set of doubles within a specified range
+
+
+
+
+ Construct a set of floats within a specified range
+
+
+
+
+ Construct a set of bytes within a specified range
+
+
+
+
+ Construct a set of sbytes within a specified range
+
+
+
+
+ Get the collection of _values to be used as arguments.
+
+
+
+
+ Delegate used by tests that execute code and
+ capture any thrown exception.
+
+
+
+
+ TNode represents a single node in the XML representation
+ of a Test or TestResult. It replaces System.Xml.XmlNode and
+ System.Xml.Linq.XElement, providing a minimal set of methods
+ for operating on the XML in a platform-independent manner.
+
+
+
+
+ Constructs a new instance of TNode
+
+ The name of the node
+
+
+
+ Constructs a new instance of TNode with a value
+
+ The name of the node
+ The text content of the node
+
+
+
+ Constructs a new instance of TNode with a value
+
+ The name of the node
+ The text content of the node
+ Flag indicating whether to use CDATA when writing the text
+
+
+
+ Create a TNode from it's XML text representation
+
+ The XML text to be parsed
+ A TNode
+
+
+
+ Adds a new element as a child of the current node and returns it.
+
+ The element name.
+ The newly created child element
+
+
+
+ Adds a new element with a value as a child of the current node and returns it.
+
+ The element name
+ The text content of the new element
+ The newly created child element
+
+
+
+ Adds a new element with a value as a child of the current node and returns it.
+ The value will be output using a CDATA section.
+
+ The element name
+ The text content of the new element
+ The newly created child element
+
+
+
+ Adds an attribute with a specified name and value to the XmlNode.
+
+ The name of the attribute.
+ The value of the attribute.
+
+
+
+ Finds a single descendant of this node matching an xpath
+ specification. The format of the specification is
+ limited to what is needed by NUnit and its tests.
+
+
+
+
+
+
+ Finds all descendants of this node matching an xpath
+ specification. The format of the specification is
+ limited to what is needed by NUnit and its tests.
+
+
+
+
+ Writes the XML representation of the node to an XmlWriter
+
+
+
+
+
+ Gets the name of the node
+
+
+
+
+ Gets the value of the node
+
+
+
+
+ Gets a flag indicating whether the value should be output using CDATA.
+
+
+
+
+ Gets the dictionary of attributes
+
+
+
+
+ Gets a list of child nodes
+
+
+
+
+ Gets the first ChildNode
+
+
+
+
+ Gets the XML representation of this node.
+
+
+
+
+ Class used to represent a list of XmlResults
+
+
+
+
+ Class used to represent the attributes of a node
+
+
+
+
+ Gets or sets the value associated with the specified key.
+ Overridden to return null if attribute is not found.
+
+ The key.
+ Value of the attribute or null
+
+
+
+ The ITestAssemblyRunner interface is implemented by classes
+ that are able to execute a suite of tests loaded
+ from an assembly.
+
+
+
+
+ Loads the tests found in an Assembly, returning an
+ indication of whether or not the load succeeded.
+
+ File name of the assembly to load
+ Dictionary of options to use in loading the test
+ An ITest representing the loaded tests
+
+
+
+ Loads the tests found in an Assembly, returning an
+ indication of whether or not the load succeeded.
+
+ The assembly to load
+ Dictionary of options to use in loading the test
+ An ITest representing the loaded tests
+
+
+
+ Count Test Cases using a filter
+
+ The filter to apply
+ The number of test cases found
+
+
+
+ Run selected tests and return a test result. The test is run synchronously,
+ and the listener interface is notified as it progresses.
+
+ Interface to receive ITestListener notifications.
+ A test filter used to select tests to be run
+
+
+
+ Run selected tests asynchronously, notifying the listener interface as it progresses.
+
+ Interface to receive EventListener notifications.
+ A test filter used to select tests to be run
+
+
+
+ Wait for the ongoing run to complete.
+
+ Time to wait in milliseconds
+ True if the run completed, otherwise false
+
+
+
+ Signal any test run that is in process to stop. Return without error if no test is running.
+
+ If true, kill any test-running threads
+
+
+
+ Gets the tree of loaded tests, or null if
+ no tests have been loaded.
+
+
+
+
+ Gets the tree of test results, if the test
+ run is completed, otherwise null.
+
+
+
+
+ Indicates whether a test has been loaded
+
+
+
+
+ Indicates whether a test is currently running
+
+
+
+
+ Indicates whether a test run is complete
+
+
+
+
+ Modes in which the tolerance value for a comparison can be interpreted.
+
+
+
+
+ The tolerance was created with a value, without specifying
+ how the value would be used. This is used to prevent setting
+ the mode more than once and is generally changed to Linear
+ upon execution of the test.
+
+
+
+
+ The tolerance is used as a numeric range within which
+ two compared _values are considered to be equal.
+
+
+
+
+ Interprets the tolerance as the percentage by which
+ the two compared _values my deviate from each other.
+
+
+
+
+ Compares two _values based in their distance in
+ representable numbers.
+
+
+
+
+ ResolvableConstraintExpression is used to represent a compound
+ constraint being constructed at a point where the last operator
+ may either terminate the expression or may have additional
+ qualifying constraints added to it.
+
+ It is used, for example, for a Property element or for
+ an Exception element, either of which may be optionally
+ followed by constraints that apply to the property or
+ exception.
+
+
+
+
+ Create a new instance of ResolvableConstraintExpression
+
+
+
+
+ Create a new instance of ResolvableConstraintExpression,
+ passing in a pre-populated ConstraintBuilder.
+
+
+
+
+ Resolve the current expression to a Constraint
+
+
+
+
+ Appends an And Operator to the expression
+
+
+
+
+ Appends an Or operator to the expression.
+
+
+
+
+ Negates the test of the constraint it wraps.
+
+
+
+
+ Constructs a new NotOperator
+
+
+
+
+ Returns a NotConstraint applied to its argument.
+
+
+
+
+ SetUpFixtureAttribute is used to identify a SetUpFixture
+
+
+
+
+ Build a SetUpFixture from type provided. Normally called for a Type
+ on which the attribute has been placed.
+
+ The type info of the fixture to be used.
+ A SetUpFixture object as a TestSuite.
+
+
+
+ Marks a test that must run in the MTA, causing it
+ to run in a separate thread if necessary.
+
+ On methods, you may also use MTAThreadAttribute
+ to serve the same purpose.
+
+
+
+
+ Construct a RequiresMTAAttribute
+
+
+
+
+ The ResultState class represents the outcome of running a test.
+ It contains two pieces of information. The Status of the test
+ is an enum indicating whether the test passed, failed, was
+ skipped or was inconclusive. The Label provides a more
+ detailed breakdown for use by client runners.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The TestStatus.
+
+
+
+ Initializes a new instance of the class.
+
+ The TestStatus.
+ The label.
+
+
+
+ Initializes a new instance of the class.
+
+ The TestStatus.
+ The stage at which the result was produced
+
+
+
+ Initializes a new instance of the class.
+
+ The TestStatus.
+ The label.
+ The stage at which the result was produced
+
+
+
+ The result is inconclusive
+
+
+
+
+ The test has been skipped.
+
+
+
+
+ The test has been ignored.
+
+
+
+
+ The test was skipped because it is explicit
+
+
+
+
+ The test succeeded
+
+
+
+
+ The test failed
+
+
+
+
+ The test encountered an unexpected exception
+
+
+
+
+ The test was cancelled by the user
+
+
+
+
+ The test was not runnable.
+
+
+
+
+ A suite failed because one or more child tests failed or had errors
+
+
+
+
+ A suite failed in its OneTimeSetUp
+
+
+
+
+ A suite had an unexpected exception in its OneTimeSetUp
+
+
+
+
+ A suite had an unexpected exception in its OneTimeDown
+
+
+
+
+ Get a new ResultState, which is the same as the current
+ one but with the FailureSite set to the specified value.
+
+ The FailureSite to use
+ A new ResultState
+
+
+
+ Determines whether the specified , is equal to this instance.
+
+ The to compare with this instance.
+
+ true if the specified is equal to this instance; otherwise, false.
+
+
+
+
+ Returns a hash code for this instance.
+
+
+ A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table.
+
+
+
+
+ Returns a that represents this instance.
+
+
+ A that represents this instance.
+
+
+
+
+ Gets the TestStatus for the test.
+
+ The status.
+
+
+
+ Gets the label under which this test result is
+ categorized, if any.
+
+
+
+
+ Gets the stage of test execution in which
+ the failure or other result took place.
+
+
+
+
+ The FailureSite enum indicates the stage of a test
+ in which an error or failure occurred.
+
+
+
+
+ Failure in the test itself
+
+
+
+
+ Failure in the SetUp method
+
+
+
+
+ Failure in the TearDown method
+
+
+
+
+ Failure of a parent test
+
+
+
+
+ Failure of a child test
+
+
+
+
+ The TestFixtureData class represents a set of arguments
+ and other parameter info to be used for a parameterized
+ fixture. It is derived from TestFixtureParameters and adds a
+ fluent syntax for use in initializing the fixture.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The arguments.
+
+
+
+ Initializes a new instance of the class.
+
+ The argument.
+
+
+
+ Initializes a new instance of the class.
+
+ The first argument.
+ The second argument.
+
+
+
+ Initializes a new instance of the class.
+
+ The first argument.
+ The second argument.
+ The third argument.
+
+
+
+ Marks the test fixture as explicit.
+
+
+
+
+ Marks the test fixture as explicit, specifying the reason.
+
+
+
+
+ Ignores this TestFixture, specifying the reason.
+
+ The reason.
+
+
+
+
+ Represents a thread-safe first-in, first-out collection of objects.
+
+ Specifies the type of elements in the queue.
+
+ All public and protected members of are thread-safe and may be used
+ concurrently from multiple threads.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the
+ class that contains elements copied from the specified collection
+
+ The collection whose elements are copied to the new .
+ The argument is
+ null.
+
+
+
+ Adds an object to the end of the .
+
+ The object to add to the end of the . The value can be a null reference
+ (Nothing in Visual Basic) for reference types.
+
+
+
+
+ Attempts to add an object to the .
+
+ The object to add to the . The value can be a null
+ reference (Nothing in Visual Basic) for reference types.
+
+ true if the object was added successfully; otherwise, false.
+ For , this operation will always add the object to the
+ end of the
+ and return true.
+
+
+
+ Attempts to remove and return the object at the beginning of the .
+
+
+ When this method returns, if the operation was successful, contains the
+ object removed. If no object was available to be removed, the value is unspecified.
+
+ true if an element was removed and returned from the beginning of the
+ successfully; otherwise, false.
+
+
+
+ Attempts to return an object from the beginning of the
+ without removing it.
+
+ When this method returns, contains an object from
+ the beginning of the or an
+ unspecified value if the operation failed.
+ true if and object was returned successfully; otherwise, false.
+
+
+
+ Returns an enumerator that iterates through a collection.
+
+ An that can be used to iterate through the collection.
+
+
+
+ Returns an enumerator that iterates through the .
+
+ An enumerator for the contents of the .
+
+ The enumeration represents a moment-in-time snapshot of the contents
+ of the queue. It does not reflect any updates to the collection after
+ was called. The enumerator is safe to use
+ concurrently with reads from and writes to the queue.
+
+
+
+
+ Copies the elements of the to an , starting at a particular
+ index.
+
+ The one-dimensional Array that is the
+ destination of the elements copied from the
+ . The Array must have zero-based indexing.
+ The zero-based index in at which copying
+ begins.
+ is a null reference (Nothing in
+ Visual Basic).
+ is less than
+ zero.
+
+ is multidimensional. -or-
+ does not have zero-based indexing. -or-
+ is equal to or greater than the length of the
+ -or- The number of elements in the source is
+ greater than the available space from to the end of the destination
+ . -or- The type of the source cannot be cast automatically to the type of the
+ destination .
+
+
+
+
+ Copies the elements to an existing one-dimensional Array, starting at the specified array index.
+
+ The one-dimensional Array that is the
+ destination of the elements copied from the
+ . The Array must have zero-based
+ indexing.
+ The zero-based index in at which copying
+ begins.
+ is a null reference (Nothing in
+ Visual Basic).
+ is less than
+ zero.
+ is equal to or greater than the
+ length of the
+ -or- The number of elements in the source is greater than the
+ available space from to the end of the destination .
+
+
+
+
+ Copies the elements stored in the to a new array.
+
+ A new array containing a snapshot of elements copied from the .
+
+
+
+ Attempts to remove and return an object from the .
+
+
+ When this method returns, if the operation was successful, contains the
+ object removed. If no object was available to be removed, the value is unspecified.
+
+ true if an element was removed and returned successfully; otherwise, false.
+ For , this operation will attempt to remove the object
+ from the beginning of the .
+
+
+
+
+ Gets a value indicating whether access to the is
+ synchronized with the SyncRoot.
+
+ true if access to the is synchronized
+ with the SyncRoot; otherwise, false. For , this property always
+ returns false.
+
+
+
+ Gets an object that can be used to synchronize access to the . This property is not supported.
+
+ The SyncRoot property is not supported.
+
+
+
+ Gets the number of elements contained in the .
+
+ The number of elements contained in the .
+
+ For determining whether the collection contains any items, use of the
+ property is recommended rather than retrieving the number of items from the
+ property and comparing it to 0.
+
+
+
+
+ Gets a value that indicates whether the is empty.
+
+ true if the is empty; otherwise, false.
+
+ For determining whether the collection contains any items, use of this property is recommended
+ rather than retrieving the number of items from the property and comparing it
+ to 0. However, as this collection is intended to be accessed concurrently, it may be the case
+ that another thread will modify the collection after returns, thus invalidating
+ the result.
+
+
+
+
+ Implementation of ITestAssemblyRunner
+
+
+
+
+ Initializes a new instance of the class.
+
+ The builder.
+
+
+
+ Loads the tests found in an Assembly
+
+ File name of the assembly to load
+ Dictionary of option settings for loading the assembly
+ True if the load was successful
+
+
+
+ Loads the tests found in an Assembly
+
+ The assembly to load
+ Dictionary of option settings for loading the assembly
+ True if the load was successful
+
+
+
+ Count Test Cases using a filter
+
+ The filter to apply
+ The number of test cases found
+
+
+
+ Run selected tests and return a test result. The test is run synchronously,
+ and the listener interface is notified as it progresses.
+
+ Interface to receive EventListener notifications.
+ A test filter used to select tests to be run
+
+
+
+
+ Run selected tests asynchronously, notifying the listener interface as it progresses.
+
+ Interface to receive EventListener notifications.
+ A test filter used to select tests to be run
+
+ RunAsync is a template method, calling various abstract and
+ virtual methods to be overridden by derived classes.
+
+
+
+
+ Wait for the ongoing run to complete.
+
+ Time to wait in milliseconds
+ True if the run completed, otherwise false
+
+
+
+ Signal any test run that is in process to stop. Return without error if no test is running.
+
+ If true, kill any tests that are currently running
+
+
+
+ Initiate the test run.
+
+
+
+
+ Create the initial TestExecutionContext used to run tests
+
+ The ITestListener specified in the RunAsync call
+
+
+
+ Handle the the Completed event for the top level work item
+
+
+
+
+ The tree of tests that was loaded by the builder
+
+
+
+
+ The test result, if a run has completed
+
+
+
+
+ Indicates whether a test is loaded
+
+
+
+
+ Indicates whether a test is running
+
+
+
+
+ Indicates whether a test run is complete
+
+
+
+
+ Our settings, specified when loading the assembly
+
+
+
+
+ The top level WorkItem created for the assembly as a whole
+
+
+
+
+ The TestExecutionContext for the top level WorkItem
+
+
+
+
diff --git a/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/package.json b/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/package.json
new file mode 100644
index 00000000..c0bc305f
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ext.nunit@1.0.0/package.json
@@ -0,0 +1,16 @@
+{
+ "displayName": "Custom NUnit",
+ "name": "com.unity.ext.nunit",
+ "version": "1.0.0",
+ "unity": "2019.1",
+ "description": "Custom version of the nunit package build to work with Unity. Used by the Unity Test Framework.",
+ "keywords": ["nunit", "unittest", "test"],
+ "category": "Libraries",
+ "repository": {
+ "type": "git",
+ "url": "git@gitlab.cds.internal.unity3d.com/upm-packages/core/com.unity.ext.nunit.git",
+ "revision": "c8f5044ffe6adb909f9836160b0bdaa30f2d1ec9"
+ },
+ "dependencies": {
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/.editorconfig b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/.editorconfig
new file mode 100644
index 00000000..aca19790
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/.editorconfig
@@ -0,0 +1,6 @@
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+end_of_line = lf
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/CHANGELOG.md b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/CHANGELOG.md
new file mode 100644
index 00000000..0e14adce
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/CHANGELOG.md
@@ -0,0 +1,43 @@
+# Code Editor Package for Rider
+
+## [1.1.0] - 2019-07-02
+
+new setting to manage list of extensions to be opened with Rider
+avoid breaking everything on any unhandled exception in RiderScriptEditor cctor
+hide Rider settings, when different Editor is selected
+dynamically load only newer rider plugins
+path detection (work on unix symlinks)
+speed up for project generation
+lots of bug fixing
+
+## [1.0.8] - 2019-05-20
+
+Fix NullReferenceException when External editor was pointing to non-existing Rider everything was broken by null-ref.
+
+## [1.0.7] - 2019-05-16
+
+Initial migration steps from rider plugin to package.
+Fix OSX check and opening of files.
+
+## [1.0.6] - 2019-04-30
+
+Ensure asset database is refreshed when generating csproj and solution files.
+
+## [1.0.5] - 2019-04-27
+
+Add support for generating all csproj files.
+
+## [1.0.4] - 2019-04-18
+
+Fix relative package paths.
+Fix opening editor on mac.
+
+## [1.0.3] - 2019-04-12
+
+Fixing null reference issue for callbacks to Asset pipeline.
+
+## [1.0.2] - 2019-01-01
+
+### This is the first release of *Unity Package rider_editor*.
+
+Using the newly created api to integrate Rider with Unity.
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/CONTRIBUTING.md b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/CONTRIBUTING.md
new file mode 100644
index 00000000..576d0963
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/CONTRIBUTING.md
@@ -0,0 +1,6 @@
+# Contributing
+
+## All contributions are subject to the [Unity Contribution Agreement(UCA)](https://unity3d.com/legal/licenses/Unity_Contribution_Agreement)
+By making a pull request, you are confirming agreement to the terms and conditions of the UCA, including that your Contributions are your original creation and that you have complete right and authority to make your Contributions.
+
+## Once you have a change ready following these ground rules. Simply make a pull request
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/LICENSE.md b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/LICENSE.md
new file mode 100644
index 00000000..eb18dfb7
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/LICENSE.md
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 Unity Technologies
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/Discovery.cs b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/Discovery.cs
new file mode 100644
index 00000000..4886aa7c
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/Discovery.cs
@@ -0,0 +1,418 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using JetBrains.Annotations;
+using Microsoft.Win32;
+using Unity.CodeEditor;
+using UnityEngine;
+
+namespace Packages.Rider.Editor
+{
+ public interface IDiscovery
+ {
+ CodeEditor.Installation[] PathCallback();
+ }
+
+ public class Discovery : IDiscovery
+ {
+ public CodeEditor.Installation[] PathCallback()
+ {
+ return RiderPathLocator.GetAllRiderPaths()
+ .Select(riderInfo => new CodeEditor.Installation
+ {
+ Path = riderInfo.Path,
+ Name = riderInfo.Presentation
+ })
+ .OrderBy(a=>a.Name)
+ .ToArray();
+ }
+ }
+
+ ///
+ /// This code is a modified version of the JetBrains resharper-unity plugin listed here:
+ /// https://github.com/JetBrains/resharper-unity/blob/master/unity/JetBrains.Rider.Unity.Editor/EditorPlugin/RiderPathLocator.cs
+ ///
+ public static class RiderPathLocator
+ {
+#if !(UNITY_4_7 || UNITY_5_5)
+ [UsedImplicitly] // Used in com.unity.ide.rider
+ public static RiderInfo[] GetAllRiderPaths()
+ {
+ try
+ {
+ switch (SystemInfo.operatingSystemFamily)
+ {
+ case OperatingSystemFamily.Windows:
+ {
+ return CollectRiderInfosWindows();
+ }
+
+ case OperatingSystemFamily.MacOSX:
+ {
+ return CollectRiderInfosMac();
+ }
+
+ case OperatingSystemFamily.Linux:
+ {
+ return CollectAllRiderPathsLinux();
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ Debug.LogException(e);
+ }
+
+ return new RiderInfo[0];
+ }
+#endif
+
+#if RIDER_EDITOR_PLUGIN // can't be used in com.unity.ide.rider
+ internal static RiderInfo[] GetAllFoundInfos(OperatingSystemFamilyRider operatingSystemFamily)
+ {
+ try
+ {
+ switch (operatingSystemFamily)
+ {
+ case OperatingSystemFamilyRider.Windows:
+ {
+ return CollectRiderInfosWindows();
+ }
+ case OperatingSystemFamilyRider.MacOSX:
+ {
+ return CollectRiderInfosMac();
+ }
+ case OperatingSystemFamilyRider.Linux:
+ {
+ return CollectAllRiderPathsLinux();
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ Debug.LogException(e);
+ }
+
+ return new RiderInfo[0];
+ }
+
+ internal static string[] GetAllFoundPaths(OperatingSystemFamilyRider operatingSystemFamily)
+ {
+ return GetAllFoundInfos(operatingSystemFamily).Select(a=>a.Path).ToArray();
+ }
+#endif
+
+ private static RiderInfo[] CollectAllRiderPathsLinux()
+ {
+ var home = Environment.GetEnvironmentVariable("HOME");
+ if (string.IsNullOrEmpty(home))
+ return new RiderInfo[0];
+
+ //$Home/.local/share/JetBrains/Toolbox/apps/Rider/ch-0/173.3994.1125/bin/rider.sh
+ //$Home/.local/share/JetBrains/Toolbox/apps/Rider/ch-0/.channel.settings.json
+ var toolboxRiderRootPath = Path.Combine(home, @".local/share/JetBrains/Toolbox/apps/Rider");
+ var paths = CollectPathsFromToolbox(toolboxRiderRootPath, "bin", "rider.sh", false)
+ .Select(a => new RiderInfo(a, true)).ToList();
+
+ //$Home/.local/share/applications/jetbrains-rider.desktop
+ var shortcut = new FileInfo(Path.Combine(home, @".local/share/applications/jetbrains-rider.desktop"));
+
+ if (shortcut.Exists)
+ {
+ var lines = File.ReadAllLines(shortcut.FullName);
+ foreach (var line in lines)
+ {
+ if (!line.StartsWith("Exec=\""))
+ continue;
+ var path = line.Split('"').Where((item, index) => index == 1).SingleOrDefault();
+ if (string.IsNullOrEmpty(path))
+ continue;
+
+ if (paths.Any(a => a.Path == path)) // avoid adding similar build as from toolbox
+ continue;
+ paths.Add(new RiderInfo(path, false));
+ }
+ }
+
+ // snap install
+ var snapInstallPath = "/snap/rider/current/bin/rider.sh";
+ if (new FileInfo(snapInstallPath).Exists)
+ paths.Add(new RiderInfo(snapInstallPath, false));
+
+ return paths.ToArray();
+ }
+
+ private static RiderInfo[] CollectRiderInfosMac()
+ {
+ // "/Applications/*Rider*.app"
+ var folder = new DirectoryInfo("/Applications");
+ if (!folder.Exists)
+ return new RiderInfo[0];
+
+ var results = folder.GetDirectories("*Rider*.app")
+ .Select(a => new RiderInfo(a.FullName, false))
+ .ToList();
+
+ // /Users/user/Library/Application Support/JetBrains/Toolbox/apps/Rider/ch-1/181.3870.267/Rider EAP.app
+ var home = Environment.GetEnvironmentVariable("HOME");
+ if (!string.IsNullOrEmpty(home))
+ {
+ var toolboxRiderRootPath = Path.Combine(home, @"Library/Application Support/JetBrains/Toolbox/apps/Rider");
+ var paths = CollectPathsFromToolbox(toolboxRiderRootPath, "", "Rider*.app", true)
+ .Select(a => new RiderInfo(a, true));
+ results.AddRange(paths);
+ }
+
+ return results.ToArray();
+ }
+
+ internal static string GetBuildNumber(string path)
+ {
+ var file = new FileInfo(Path.Combine(path, GetRelativePathToBuildTxt()));
+ if (!file.Exists)
+ return string.Empty;
+ var text = File.ReadAllText(file.FullName);
+ if (text.Length > 3)
+ return text.Substring(3);
+ return string.Empty;
+ }
+
+ private static RiderInfo[] CollectRiderInfosWindows()
+ {
+ var localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
+ var toolboxRiderRootPath = Path.Combine(localAppData, @"JetBrains\Toolbox\apps\Rider");
+ var installPathsToolbox = CollectPathsFromToolbox(toolboxRiderRootPath, "bin", "rider64.exe", false).ToList();
+ var installInfosToolbox = installPathsToolbox
+ .Select(a => new RiderInfo(a, true)).ToList();
+
+ var installPaths = new List();
+ const string registryKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
+ CollectPathsFromRegistry(registryKey, installPaths);
+ const string wowRegistryKey = @"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall";
+ CollectPathsFromRegistry(wowRegistryKey, installPaths);
+
+ var installInfos = installPaths
+ .Select(a => new RiderInfo(a, false)).ToList();
+ installInfos.AddRange(installInfosToolbox);
+
+ return installInfos.ToArray();
+ }
+
+ private static string GetRelativePathToBuildTxt()
+ {
+ switch (SystemInfo.operatingSystemFamily)
+ {
+ case OperatingSystemFamily.Windows:
+ case OperatingSystemFamily.Linux:
+ return "../../build.txt";
+ case OperatingSystemFamily.MacOSX:
+ return "Contents/Resources/build.txt";
+ }
+ throw new Exception("Unknown OS");
+ }
+
+ private static void CollectPathsFromRegistry(string registryKey, List installPaths)
+ {
+ using (var key = Registry.LocalMachine.OpenSubKey(registryKey))
+ {
+ if (key == null) return;
+ foreach (var subkeyName in key.GetSubKeyNames().Where(a => a.Contains("Rider")))
+ {
+ using (var subkey = key.OpenSubKey(subkeyName))
+ {
+ var folderObject = subkey?.GetValue("InstallLocation");
+ if (folderObject == null) continue;
+ var folder = folderObject.ToString();
+ var possiblePath = Path.Combine(folder, @"bin\rider64.exe");
+ if (File.Exists(possiblePath))
+ installPaths.Add(possiblePath);
+ }
+ }
+ }
+ }
+
+ private static string[] CollectPathsFromToolbox(string toolboxRiderRootPath, string dirName, string searchPattern,
+ bool isMac)
+ {
+ if (!Directory.Exists(toolboxRiderRootPath))
+ return new string[0];
+
+ var channelDirs = Directory.GetDirectories(toolboxRiderRootPath);
+ var paths = channelDirs.SelectMany(channelDir =>
+ {
+ try
+ {
+ // use history.json - last entry stands for the active build https://jetbrains.slack.com/archives/C07KNP99D/p1547807024066500?thread_ts=1547731708.057700&cid=C07KNP99D
+ var historyFile = Path.Combine(channelDir, ".history.json");
+ if (File.Exists(historyFile))
+ {
+ var json = File.ReadAllText(historyFile);
+ var build = ToolboxHistory.GetLatestBuildFromJson(json);
+ if (build != null)
+ {
+ var buildDir = Path.Combine(channelDir, build);
+ var executablePaths = GetExecutablePaths(dirName, searchPattern, isMac, buildDir);
+ if (executablePaths.Any())
+ return executablePaths;
+ }
+ }
+
+ var channelFile = Path.Combine(channelDir, ".channel.settings.json");
+ if (File.Exists(channelFile))
+ {
+ var json = File.ReadAllText(channelFile).Replace("active-application", "active_application");
+ var build = ToolboxInstallData.GetLatestBuildFromJson(json);
+ if (build != null)
+ {
+ var buildDir = Path.Combine(channelDir, build);
+ var executablePaths = GetExecutablePaths(dirName, searchPattern, isMac, buildDir);
+ if (executablePaths.Any())
+ return executablePaths;
+ }
+ }
+
+ // changes in toolbox json files format may brake the logic above, so return all found Rider installations
+ return Directory.GetDirectories(channelDir)
+ .SelectMany(buildDir => GetExecutablePaths(dirName, searchPattern, isMac, buildDir));
+ }
+ catch (Exception e)
+ {
+ // do not write to Debug.Log, just log it.
+ Logger.Warn($"Failed to get RiderPath from {channelDir}", e);
+ }
+
+ return new string[0];
+ })
+ .Where(c => !string.IsNullOrEmpty(c))
+ .ToArray();
+ return paths;
+ }
+
+ private static string[] GetExecutablePaths(string dirName, string searchPattern, bool isMac, string buildDir)
+ {
+ var folder = new DirectoryInfo(Path.Combine(buildDir, dirName));
+ if (!folder.Exists)
+ return new string[0];
+
+ if (!isMac)
+ return new[] {Path.Combine(folder.FullName, searchPattern)}.Where(File.Exists).ToArray();
+ return folder.GetDirectories(searchPattern).Select(f => f.FullName)
+ .Where(Directory.Exists).ToArray();
+ }
+
+ // Disable the "field is never assigned" compiler warning. We never assign it, but Unity does.
+ // Note that Unity disable this warning in the generated C# projects
+#pragma warning disable 0649
+
+ [Serializable]
+ class ToolboxHistory
+ {
+ public List history;
+
+ [CanBeNull]
+ public static string GetLatestBuildFromJson(string json)
+ {
+ try
+ {
+#if UNITY_4_7 || UNITY_5_5
+ return JsonConvert.DeserializeObject(json).history.LastOrDefault()?.item.build;
+#else
+ return JsonUtility.FromJson(json).history.LastOrDefault()?.item.build;
+#endif
+ }
+ catch (Exception)
+ {
+ Logger.Warn($"Failed to get latest build from json {json}");
+ }
+
+ return null;
+ }
+ }
+
+ [Serializable]
+ class ItemNode
+ {
+ public BuildNode item;
+ }
+
+ [Serializable]
+ class BuildNode
+ {
+ public string build;
+ }
+
+ // ReSharper disable once ClassNeverInstantiated.Global
+ [Serializable]
+ class ToolboxInstallData
+ {
+ // ReSharper disable once InconsistentNaming
+ public ActiveApplication active_application;
+
+ [CanBeNull]
+ public static string GetLatestBuildFromJson(string json)
+ {
+ try
+ {
+#if UNITY_4_7 || UNITY_5_5
+ var toolbox = JsonConvert.DeserializeObject(json);
+#else
+ var toolbox = JsonUtility.FromJson(json);
+#endif
+ var builds = toolbox.active_application.builds;
+ if (builds != null && builds.Any())
+ return builds.First();
+ }
+ catch (Exception)
+ {
+ Logger.Warn($"Failed to get latest build from json {json}");
+ }
+
+ return null;
+ }
+ }
+
+ [Serializable]
+ class ActiveApplication
+ {
+ // ReSharper disable once InconsistentNaming
+ public List builds;
+ }
+
+#pragma warning restore 0649
+
+ public struct RiderInfo
+ {
+ public string Presentation;
+ public string BuildVersion;
+ public string Path;
+
+ public RiderInfo(string path, bool isToolbox)
+ {
+ BuildVersion = GetBuildNumber(path);
+ Path = new FileInfo(path).FullName; // normalize separators
+ var presentation = "Rider " + BuildVersion;
+ if (isToolbox)
+ presentation += " (JetBrains Toolbox)";
+
+ Presentation = presentation;
+ }
+ }
+
+ private static class Logger
+ {
+ internal static void Warn(string message, Exception e = null)
+ {
+#if RIDER_EDITOR_PLUGIN // can't be used in com.unity.ide.rider
+ Log.GetLog(typeof(RiderPathLocator).Name).Warn(message);
+ if (e != null)
+ Log.GetLog(typeof(RiderPathLocator).Name).Warn(e);
+#else
+ Debug.LogError(message);
+ if (e != null)
+ Debug.LogException(e);
+#endif
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/EditorPluginInterop.cs b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/EditorPluginInterop.cs
new file mode 100644
index 00000000..1c09b83d
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/EditorPluginInterop.cs
@@ -0,0 +1,123 @@
+using System;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using UnityEngine;
+
+namespace Packages.Rider.Editor
+{
+ public static class EditorPluginInterop
+ {
+ private static string ourEntryPointTypeName = "JetBrains.Rider.Unity.Editor.PluginEntryPoint";
+
+ private static void DisableSyncSolutionOnceCallBack()
+ {
+ // RiderScriptableSingleton.Instance.CsprojProcessedOnce = true;
+ // Otherwise EditorPlugin regenerates all on every AppDomain reload
+ var assembly = GetEditorPluginAssembly();
+ if (assembly == null) return;
+ var type = assembly.GetType("JetBrains.Rider.Unity.Editor.Utils.RiderScriptableSingleton");
+ if (type == null) return;
+ var baseType = type.BaseType;
+ if (baseType == null) return;
+ var instance = baseType.GetProperty("Instance");
+ if (instance == null) return;
+ var instanceVal = instance.GetValue(null);
+ var member = type.GetProperty("CsprojProcessedOnce");
+ if (member==null) return;
+ member.SetValue(instanceVal, true);
+ }
+
+ public static string LogPath
+ {
+ get
+ {
+ try
+ {
+ var assembly = GetEditorPluginAssembly();
+ if (assembly == null) return null;
+ var type = assembly.GetType(ourEntryPointTypeName);
+ if (type == null) return null;
+ var field = type.GetField("LogPath", BindingFlags.NonPublic | BindingFlags.Static);
+ if (field == null) return null;
+ return field.GetValue(null) as string;
+ }
+ catch (Exception)
+ {
+ Debug.Log("Unable to do OpenFile to Rider from dll, fallback to com.unity.ide.rider implementation.");
+ }
+
+ return null;
+ }
+ }
+
+ public static bool OpenFileDllImplementation(string path, int line, int column)
+ {
+ var openResult = false;
+ // reflection for fast OpenFileLineCol, when Rider is started and protocol connection is established
+ try
+ {
+ var assembly = GetEditorPluginAssembly();
+ if (assembly == null) return false;
+ var type = assembly.GetType(ourEntryPointTypeName);
+ if (type == null) return false;
+ var field = type.GetField("OpenAssetHandler", BindingFlags.NonPublic | BindingFlags.Static);
+ if (field == null) return false;
+ var handlerInstance = field.GetValue(null);
+ var method = handlerInstance.GetType()
+ .GetMethod("OnOpenedAsset", new[] {typeof(string), typeof(int), typeof(int)});
+ if (method == null) return false;
+ var assetFilePath = path;
+ if (!string.IsNullOrEmpty(path))
+ assetFilePath = Path.GetFullPath(path);
+
+ openResult = (bool) method.Invoke(handlerInstance, new object[] {assetFilePath, line, column});
+ }
+ catch (Exception e)
+ {
+ Debug.Log("Unable to do OpenFile to Rider from dll, fallback to com.unity.ide.rider implementation.");
+ Debug.LogException(e);
+ }
+
+ return openResult;
+ }
+
+ public static Assembly GetEditorPluginAssembly()
+ {
+ var assemblies = AppDomain.CurrentDomain.GetAssemblies();
+ var assembly = assemblies.FirstOrDefault(a => a.GetName().Name.Equals("JetBrains.Rider.Unity.Editor.Plugin.Full.Repacked"));
+ return assembly;
+ }
+
+ public static bool EditorPluginIsLoadedFromAssets()
+ {
+ var currentDir = Directory.GetCurrentDirectory();
+ var assembly = GetEditorPluginAssembly();
+ if (assembly == null)
+ return false;
+ var location = assembly.Location;
+ return location.StartsWith(currentDir, StringComparison.InvariantCultureIgnoreCase);
+ }
+
+
+ internal static void InitEntryPoint()
+ {
+ try
+ {
+ DisableSyncSolutionOnceCallBack(); // is require for Rider prior to 2019.2
+
+ var type = GetEditorPluginAssembly().GetType("JetBrains.Rider.Unity.Editor.AfterUnity56.EntryPoint");
+ if (type == null)
+ type = GetEditorPluginAssembly().GetType("JetBrains.Rider.Unity.Editor.UnitTesting.EntryPoint"); // oldRider
+ RuntimeHelpers.RunClassConstructor(type.TypeHandle);
+ }
+ catch (TypeInitializationException ex)
+ {
+ Debug.LogException(ex);
+ if (ex.InnerException != null)
+ Debug.LogException(ex.InnerException);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/LoggingLevel.cs b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/LoggingLevel.cs
new file mode 100644
index 00000000..19ef8ab1
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/LoggingLevel.cs
@@ -0,0 +1,22 @@
+namespace Packages.Rider.Editor
+{
+ public enum LoggingLevel
+ {
+ ///
+ /// Do not use it in logging. Only in config to disable logging.
+ ///
+ OFF,
+ /// For errors that lead to application failure
+ FATAL,
+ /// For errors that must be shown in Exception Browser
+ ERROR,
+ /// Suspicious situations but not errors
+ WARN,
+ /// Regular level for important events
+ INFO,
+ /// Additional info for debbuging
+ VERBOSE,
+ /// Methods & callstacks tracing, more than verbose
+ TRACE,
+ }
+}
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/PluginSettings.cs b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/PluginSettings.cs
new file mode 100644
index 00000000..0f159798
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/PluginSettings.cs
@@ -0,0 +1,153 @@
+using System.Reflection;
+using Unity.CodeEditor;
+using UnityEditor;
+using UnityEngine;
+
+namespace Packages.Rider.Editor
+{
+ public class PluginSettings
+ {
+ public static LoggingLevel SelectedLoggingLevel
+ {
+ get => (LoggingLevel) EditorPrefs.GetInt("Rider_SelectedLoggingLevel", 0);
+ set
+ {
+ EditorPrefs.SetInt("Rider_SelectedLoggingLevel", (int) value);
+ }
+ }
+
+ public static bool OverrideLangVersion
+ {
+ get { return EditorPrefs.GetBool("Rider_OverrideLangVersion", false); }
+ private set { EditorPrefs.SetBool("Rider_OverrideLangVersion", value);; }
+ }
+
+ public static string LangVersion
+ {
+ get { return EditorPrefs.GetString("Rider_LangVersion", "4"); }
+ private set { EditorPrefs.SetString("Rider_LangVersion", value); }
+ }
+
+ public static bool LogEventsCollectorEnabled
+ {
+ get { return EditorPrefs.GetBool("Rider_LogEventsCollectorEnabled", true); }
+ private set { EditorPrefs.SetBool("Rider_LogEventsCollectorEnabled", value); }
+ }
+
+
+ private static GUIStyle ourVersionInfoStyle = new GUIStyle()
+ {
+ normal = new GUIStyleState()
+ {
+ textColor = new Color(0, 0, 0, .6f),
+ },
+ margin = new RectOffset(4, 4, 4, 4),
+ };
+
+ ///
+ /// Preferences menu layout
+ ///
+ ///
+ /// Contains all 3 toggles: Enable/Disable; Debug On/Off; Writing Launch File On/Off
+ ///
+ [SettingsProvider]
+ private static SettingsProvider RiderPreferencesItem()
+ {
+ if (!RiderScriptEditor.IsRiderInstallation(RiderScriptEditor.CurrentEditor))
+ return null;
+ if (!RiderScriptEditor.ShouldLoadEditorPlugin(RiderScriptEditor.CurrentEditor))
+ return null;
+ var provider = new SettingsProvider("Preferences/Rider", SettingsScope.User)
+ {
+ label = "Rider",
+ keywords = new[] { "Rider" },
+ guiHandler = (searchContext) =>
+ {
+ EditorGUIUtility.labelWidth = 200f;
+ EditorGUILayout.BeginVertical();
+
+ GUILayout.BeginVertical();
+ LogEventsCollectorEnabled =
+ EditorGUILayout.Toggle(new GUIContent("Pass Console to Rider:"), LogEventsCollectorEnabled);
+
+ GUILayout.EndVertical();
+
+ OverrideLangVersion = EditorGUILayout.Toggle(new GUIContent("Override LangVersion:"), OverrideLangVersion);
+ if (OverrideLangVersion)
+ {
+ var workaroundUrl = "https://gist.github.com/van800/875ce55eaf88d65b105d010d7b38a8d4";
+ var workaroundText = "Use this workaround if overriding doesn't work.";
+ var helpLangVersion = @"Avoid overriding, unless there is no particular need.";
+
+ LangVersion =
+ EditorGUILayout.TextField(
+ new GUIContent("LangVersion:",
+ helpLangVersion), LangVersion);
+ LinkButton(caption: workaroundText, url: workaroundUrl);
+ EditorGUILayout.HelpBox(helpLangVersion, MessageType.None);
+ }
+
+ GUILayout.Label("");
+
+ if (!string.IsNullOrEmpty(EditorPluginInterop.LogPath))
+ {
+ EditorGUILayout.BeginHorizontal();
+ EditorGUILayout.PrefixLabel("Log file:");
+ var previous = GUI.enabled;
+ GUI.enabled = previous && SelectedLoggingLevel != LoggingLevel.OFF;
+ var button = GUILayout.Button(new GUIContent("Open log"));
+ if (button)
+ {
+ //UnityEditorInternal.InternalEditorUtility.OpenFileAtLineExternal(PluginEntryPoint.LogPath, 0);
+ // works much faster than the commented code, when Rider is already started
+ CodeEditor.CurrentEditor.OpenProject(EditorPluginInterop.LogPath, 0, 0);
+ }
+
+ GUI.enabled = previous;
+ GUILayout.EndHorizontal();
+ }
+
+ var loggingMsg =
+ @"Sets the amount of Rider Debug output. If you are about to report an issue, please select Verbose logging level and attach Unity console output to the issue.";
+ SelectedLoggingLevel =
+ (LoggingLevel) EditorGUILayout.EnumPopup(new GUIContent("Logging Level:", loggingMsg),
+ SelectedLoggingLevel);
+
+
+ EditorGUILayout.HelpBox(loggingMsg, MessageType.None);
+
+ var githubRepo = "https://github.com/JetBrains/resharper-unity";
+ var caption = $"{githubRepo}";
+ LinkButton(caption: caption, url: githubRepo);
+
+ GUILayout.FlexibleSpace();
+ GUILayout.BeginHorizontal();
+
+ GUILayout.FlexibleSpace();
+ var version = Assembly.GetExecutingAssembly().GetName().Version;
+ GUILayout.Label("Plugin version: " + version, ourVersionInfoStyle);
+
+ GUILayout.EndHorizontal();
+
+ EditorGUILayout.EndVertical();
+ }
+ };
+ return provider;
+ }
+
+ private static void LinkButton(string caption, string url)
+ {
+ var style = GUI.skin.label;
+ style.richText = true;
+
+ var bClicked = GUILayout.Button(caption, style);
+
+ var rect = GUILayoutUtility.GetLastRect();
+ rect.width = style.CalcSize(new GUIContent(caption)).x;
+ EditorGUIUtility.AddCursorRect(rect, MouseCursor.Link);
+
+ if (bClicked)
+ Application.OpenURL(url);
+ }
+ }
+}
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/ProjectGeneration.cs b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/ProjectGeneration.cs
new file mode 100644
index 00000000..7b7cd03d
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/ProjectGeneration.cs
@@ -0,0 +1,938 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Security;
+using System.Security.Cryptography;
+using System.Text;
+using System.Text.RegularExpressions;
+using Packages.Rider.Editor.Util;
+using UnityEditor;
+using UnityEditor.Compilation;
+using UnityEditor.PackageManager;
+using UnityEditorInternal;
+using UnityEngine;
+
+namespace Packages.Rider.Editor
+{
+ public interface IGenerator
+ {
+ bool SyncIfNeeded(IEnumerable affectedFiles, IEnumerable reimportedFiles);
+ void Sync();
+ bool HasSolutionBeenGenerated();
+ string SolutionFile();
+ string ProjectDirectory { get; }
+ void GenerateAll(bool generateAll);
+ }
+
+ public interface IAssemblyNameProvider
+ {
+ string GetAssemblyNameFromScriptPath(string path);
+ IEnumerable GetAllAssemblies(Func shouldFileBePartOfSolution);
+ IEnumerable GetAllAssetPaths();
+ UnityEditor.PackageManager.PackageInfo FindForAssetPath(string assetPath);
+ }
+
+ public struct TestSettings
+ {
+ public bool ShouldSync;
+ public Dictionary SyncPath;
+ }
+
+ class AssemblyNameProvider : IAssemblyNameProvider
+ {
+ public string GetAssemblyNameFromScriptPath(string path)
+ {
+ return CompilationPipeline.GetAssemblyNameFromScriptPath(path);
+ }
+
+ public IEnumerable GetAllAssemblies(Func shouldFileBePartOfSolution)
+ {
+ return CompilationPipeline.GetAssemblies()
+ .Where(i => 0 < i.sourceFiles.Length && i.sourceFiles.Any(shouldFileBePartOfSolution));
+ }
+
+ public IEnumerable GetAllAssetPaths()
+ {
+ return AssetDatabase.GetAllAssetPaths();
+ }
+
+ public UnityEditor.PackageManager.PackageInfo FindForAssetPath(string assetPath)
+ {
+ return UnityEditor.PackageManager.PackageInfo.FindForAssetPath(assetPath);
+ }
+ }
+
+
+ public class ProjectGeneration : IGenerator
+ {
+ enum ScriptingLanguage
+ {
+ None,
+ CSharp
+ }
+
+ public static readonly string MSBuildNamespaceUri = "http://schemas.microsoft.com/developer/msbuild/2003";
+
+ const string k_WindowsNewline = "\r\n";
+
+ ///
+ /// Map source extensions to ScriptingLanguages
+ ///
+ static readonly Dictionary k_BuiltinSupportedExtensions =
+ new Dictionary
+ {
+ {"cs", ScriptingLanguage.CSharp},
+ {"uxml", ScriptingLanguage.None},
+ {"uss", ScriptingLanguage.None},
+ {"shader", ScriptingLanguage.None},
+ {"compute", ScriptingLanguage.None},
+ {"cginc", ScriptingLanguage.None},
+ {"hlsl", ScriptingLanguage.None},
+ {"glslinc", ScriptingLanguage.None}
+ };
+
+ string m_SolutionProjectEntryTemplate = string.Join("\r\n",
+ @"Project(""{{{0}}}"") = ""{1}"", ""{2}"", ""{{{3}}}""",
+ @"EndProject").Replace(" ", "\t");
+
+ string m_SolutionProjectConfigurationTemplate = string.Join("\r\n",
+ @" {{{0}}}.Debug|Any CPU.ActiveCfg = Debug|Any CPU",
+ @" {{{0}}}.Debug|Any CPU.Build.0 = Debug|Any CPU",
+ @" {{{0}}}.Release|Any CPU.ActiveCfg = Release|Any CPU",
+ @" {{{0}}}.Release|Any CPU.Build.0 = Release|Any CPU").Replace(" ", "\t");
+
+ static readonly string[] k_ReimportSyncExtensions = {".dll", ".asmdef"};
+
+ ///
+ /// Map ScriptingLanguages to project extensions
+ ///
+ /*static readonly Dictionary k_ProjectExtensions = new Dictionary
+ {
+ { ScriptingLanguage.CSharp, ".csproj" },
+ { ScriptingLanguage.None, ".csproj" },
+ };*/
+ static readonly Regex k_ScriptReferenceExpression = new Regex(
+ @"^Library.ScriptAssemblies.(?(?.*)\.dll$)",
+ RegexOptions.Compiled | RegexOptions.IgnoreCase);
+
+ string[] m_ProjectSupportedExtensions = new string[0];
+ bool m_ShouldGenerateAll;
+
+ public string ProjectDirectory { get; }
+
+ public void GenerateAll(bool generateAll)
+ {
+ m_ShouldGenerateAll = generateAll;
+ }
+
+ public TestSettings Settings { get; set; }
+ readonly string m_ProjectName;
+ readonly IAssemblyNameProvider m_AssemblyNameProvider;
+
+ const string k_ToolsVersion = "4.0";
+ const string k_ProductVersion = "10.0.20506";
+ const string k_BaseDirectory = ".";
+ const string k_TargetFrameworkVersion = "v4.7.1";
+ const string k_TargetLanguageVersion = "latest";
+
+ public ProjectGeneration() : this(Directory.GetParent(Application.dataPath).FullName, new AssemblyNameProvider())
+ {
+ }
+
+ public ProjectGeneration(string tempDirectory) : this(tempDirectory, new AssemblyNameProvider())
+ {
+ }
+
+ public ProjectGeneration(string tempDirectory, IAssemblyNameProvider assemblyNameProvider)
+ {
+ Settings = new TestSettings {ShouldSync = true};
+ ProjectDirectory = tempDirectory.Replace('\\', '/');
+ m_ProjectName = Path.GetFileName(ProjectDirectory);
+ m_AssemblyNameProvider = assemblyNameProvider;
+ }
+
+ ///
+ /// Syncs the scripting solution if any affected files are relevant.
+ ///
+ ///
+ /// Whether the solution was synced.
+ ///
+ ///
+ /// A set of files whose status has changed
+ ///
+ ///
+ /// A set of files that got reimported
+ ///
+ public bool SyncIfNeeded(IEnumerable affectedFiles, IEnumerable reimportedFiles)
+ {
+ SetupProjectSupportedExtensions();
+
+ if (HasFilesBeenModified(affectedFiles, reimportedFiles))
+ {
+ Sync();
+ return true;
+ }
+
+ return false;
+ }
+
+ bool HasFilesBeenModified(IEnumerable affectedFiles, IEnumerable reimportedFiles)
+ {
+ return affectedFiles.Any(ShouldFileBePartOfSolution) || reimportedFiles.Any(ShouldSyncOnReimportedAsset);
+ }
+
+ static bool ShouldSyncOnReimportedAsset(string asset)
+ {
+ return k_ReimportSyncExtensions.Contains(new FileInfo(asset).Extension);
+ }
+
+ public void Sync()
+ {
+ SetupProjectSupportedExtensions();
+ var types = GetAssetPostprocessorTypes();
+ bool externalCodeAlreadyGeneratedProjects = OnPreGeneratingCSProjectFiles(types);
+
+ if (!externalCodeAlreadyGeneratedProjects)
+ {
+ GenerateAndWriteSolutionAndProjects(types);
+ }
+
+ OnGeneratedCSProjectFiles(types);
+ }
+
+ public bool HasSolutionBeenGenerated()
+ {
+ return File.Exists(SolutionFile());
+ }
+
+ void SetupProjectSupportedExtensions()
+ {
+ m_ProjectSupportedExtensions = EditorSettings.projectGenerationUserExtensions;
+ }
+
+ bool ShouldFileBePartOfSolution(string file)
+ {
+ string extension = Path.GetExtension(file);
+
+ // Exclude files coming from packages except if they are internalized.
+ if (!m_ShouldGenerateAll && IsInternalizedPackagePath(file))
+ {
+ return false;
+ }
+
+ // Dll's are not scripts but still need to be included..
+ if (extension == ".dll")
+ return true;
+
+ if (file.ToLower().EndsWith(".asmdef"))
+ return true;
+
+ return IsSupportedExtension(extension);
+ }
+
+ bool IsSupportedExtension(string extension)
+ {
+ extension = extension.TrimStart('.');
+ if (k_BuiltinSupportedExtensions.ContainsKey(extension))
+ return true;
+ if (m_ProjectSupportedExtensions.Contains(extension))
+ return true;
+ return false;
+ }
+
+ static ScriptingLanguage ScriptingLanguageFor(Assembly island)
+ {
+ return ScriptingLanguageFor(GetExtensionOfSourceFiles(island.sourceFiles));
+ }
+
+ static string GetExtensionOfSourceFiles(string[] files)
+ {
+ return files.Length > 0 ? GetExtensionOfSourceFile(files[0]) : "NA";
+ }
+
+ static string GetExtensionOfSourceFile(string file)
+ {
+ var ext = Path.GetExtension(file).ToLower();
+ ext = ext.Substring(1); //strip dot
+ return ext;
+ }
+
+ static ScriptingLanguage ScriptingLanguageFor(string extension)
+ {
+ return k_BuiltinSupportedExtensions.TryGetValue(extension.TrimStart('.'), out var result)
+ ? result
+ : ScriptingLanguage.None;
+ }
+
+ public void GenerateAndWriteSolutionAndProjects(Type[] types)
+ {
+ // Only synchronize islands that have associated source files and ones that we actually want in the project.
+ // This also filters out DLLs coming from .asmdef files in packages.
+ var assemblies = m_AssemblyNameProvider.GetAllAssemblies(ShouldFileBePartOfSolution);
+
+ var allAssetProjectParts = GenerateAllAssetProjectParts();
+
+ var monoIslands = assemblies.ToList();
+
+ SyncSolution(monoIslands, types);
+ var allProjectIslands = RelevantIslandsForMode(monoIslands).ToList();
+ foreach (Assembly assembly in allProjectIslands)
+ {
+ var responseFileData = ParseResponseFileData(assembly);
+ SyncProject(assembly, allAssetProjectParts, responseFileData, allProjectIslands, types);
+ }
+ }
+
+ IEnumerable ParseResponseFileData(Assembly assembly)
+ {
+ var systemReferenceDirectories =
+ CompilationPipeline.GetSystemAssemblyDirectories(assembly.compilerOptions.ApiCompatibilityLevel);
+
+ Dictionary responseFilesData = assembly.compilerOptions.ResponseFiles.ToDictionary(
+ x => x, x => CompilationPipeline.ParseResponseFile(
+ Path.Combine(ProjectDirectory, x),
+ ProjectDirectory,
+ systemReferenceDirectories
+ ));
+
+ Dictionary responseFilesWithErrors = responseFilesData.Where(x => x.Value.Errors.Any())
+ .ToDictionary(x => x.Key, x => x.Value);
+
+ if (responseFilesWithErrors.Any())
+ {
+ foreach (var error in responseFilesWithErrors)
+ foreach (var valueError in error.Value.Errors)
+ {
+ Debug.LogError($"{error.Key} Parse Error : {valueError}");
+ }
+ }
+
+ return responseFilesData.Select(x => x.Value);
+ }
+
+ Dictionary GenerateAllAssetProjectParts()
+ {
+ Dictionary stringBuilders = new Dictionary();
+
+ foreach (string asset in m_AssemblyNameProvider.GetAllAssetPaths())
+ {
+ // Exclude files coming from packages except if they are internalized.
+ if (!m_ShouldGenerateAll && IsInternalizedPackagePath(asset))
+ {
+ continue;
+ }
+
+ string extension = Path.GetExtension(asset);
+ if (IsSupportedExtension(extension) && ScriptingLanguage.None == ScriptingLanguageFor(extension))
+ {
+ // Find assembly the asset belongs to by adding script extension and using compilation pipeline.
+ var assemblyName = m_AssemblyNameProvider.GetAssemblyNameFromScriptPath(asset + ".cs");
+
+ if (string.IsNullOrEmpty(assemblyName))
+ {
+ continue;
+ }
+
+ assemblyName = FileSystemUtil.FileNameWithoutExtension(assemblyName);
+
+ if (!stringBuilders.TryGetValue(assemblyName, out var projectBuilder))
+ {
+ projectBuilder = new StringBuilder();
+ stringBuilders[assemblyName] = projectBuilder;
+ }
+
+ projectBuilder.Append(" ")
+ .Append(k_WindowsNewline);
+ }
+ }
+
+ var result = new Dictionary();
+
+ foreach (var entry in stringBuilders)
+ result[entry.Key] = entry.Value.ToString();
+
+ return result;
+ }
+
+ bool IsInternalizedPackagePath(string file)
+ {
+ if (string.IsNullOrWhiteSpace(file))
+ {
+ return false;
+ }
+
+ var packageInfo = m_AssemblyNameProvider.FindForAssetPath(file);
+ if (packageInfo == null)
+ {
+ return false;
+ }
+
+ var packageSource = packageInfo.source;
+ return packageSource != PackageSource.Embedded && packageSource != PackageSource.Local;
+ }
+
+ void SyncProject(
+ Assembly island,
+ Dictionary allAssetsProjectParts,
+ IEnumerable responseFilesData,
+ List allProjectIslands,
+ Type[] types)
+ {
+ SyncProjectFileIfNotChanged(ProjectFile(island),
+ ProjectText(island, allAssetsProjectParts, responseFilesData, allProjectIslands), types);
+ }
+
+ void SyncProjectFileIfNotChanged(string path, string newContents, Type[] types)
+ {
+ if (Path.GetExtension(path) == ".csproj")
+ {
+ newContents = OnGeneratedCSProject(path, newContents, types);
+ }
+
+ SyncFileIfNotChanged(path, newContents);
+ }
+
+ void SyncSolutionFileIfNotChanged(string path, string newContents, Type[] types)
+ {
+ newContents = OnGeneratedSlnSolution(path, newContents, types);
+
+ SyncFileIfNotChanged(path, newContents);
+ }
+
+ static List SafeGetTypes(System.Reflection.Assembly a)
+ {
+ List ret;
+
+ try
+ {
+ ret = a.GetTypes().ToList();
+ }
+ catch (System.Reflection.ReflectionTypeLoadException rtl)
+ {
+ ret = rtl.Types.ToList();
+ }
+ catch (Exception)
+ {
+ return new List();
+ }
+
+ return ret.Where(r => r != null).ToList();
+ }
+
+ static void OnGeneratedCSProjectFiles(Type[] types)
+ {
+ var args = new object[0];
+ foreach (var type in types)
+ {
+ var method = type.GetMethod("OnGeneratedCSProjectFiles",
+ System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic |
+ System.Reflection.BindingFlags.Static);
+ if (method == null)
+ {
+ continue;
+ }
+
+ method.Invoke(null, args);
+ }
+ }
+
+ public static Type[] GetAssetPostprocessorTypes()
+ {
+ return TypeCache.GetTypesDerivedFrom().ToArray(); // doesn't find types from EditorPlugin, which is fine
+ }
+
+ static bool OnPreGeneratingCSProjectFiles(Type[] types)
+ {
+ bool result = false;
+ foreach (var type in types)
+ {
+ var args = new object[0];
+ var method = type.GetMethod("OnPreGeneratingCSProjectFiles",
+ System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic |
+ System.Reflection.BindingFlags.Static);
+ if (method == null)
+ {
+ continue;
+ }
+
+ var returnValue = method.Invoke(null, args);
+ if (method.ReturnType == typeof(bool))
+ {
+ result |= (bool) returnValue;
+ }
+ }
+
+ return result;
+ }
+
+ static string OnGeneratedCSProject(string path, string content, Type[] types)
+ {
+ foreach (var type in types)
+ {
+ var args = new[] {path, content};
+ var method = type.GetMethod("OnGeneratedCSProject",
+ System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic |
+ System.Reflection.BindingFlags.Static);
+ if (method == null)
+ {
+ continue;
+ }
+
+ var returnValue = method.Invoke(null, args);
+ if (method.ReturnType == typeof(string))
+ {
+ content = (string) returnValue;
+ }
+ }
+
+ return content;
+ }
+
+ static string OnGeneratedSlnSolution(string path, string content, Type[] types)
+ {
+ foreach (var type in types)
+ {
+ var args = new[] {path, content};
+ var method = type.GetMethod("OnGeneratedSlnSolution",
+ System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic |
+ System.Reflection.BindingFlags.Static);
+ if (method == null)
+ {
+ continue;
+ }
+
+ var returnValue = method.Invoke(null, args);
+ if (method.ReturnType == typeof(string))
+ {
+ content = (string) returnValue;
+ }
+ }
+
+ return content;
+ }
+
+ void SyncFileIfNotChanged(string filename, string newContents)
+ {
+ if (File.Exists(filename) &&
+ newContents == File.ReadAllText(filename))
+ {
+ return;
+ }
+
+ if (Settings.ShouldSync)
+ {
+ File.WriteAllText(filename, newContents, Encoding.UTF8);
+ }
+ else
+ {
+ var utf8 = Encoding.UTF8;
+ byte[] utfBytes = utf8.GetBytes(newContents);
+ Settings.SyncPath[filename] = utf8.GetString(utfBytes, 0, utfBytes.Length);
+ }
+ }
+
+ string ProjectText(Assembly assembly,
+ Dictionary allAssetsProjectParts,
+ IEnumerable responseFilesData,
+ List allProjectIslands)
+ {
+ var projectBuilder = new StringBuilder(ProjectHeader(assembly, responseFilesData));
+ var references = new List();
+ var projectReferences = new List();
+
+ foreach (string file in assembly.sourceFiles)
+ {
+ if (!ShouldFileBePartOfSolution(file))
+ continue;
+
+ var extension = Path.GetExtension(file).ToLower();
+ var fullFile = EscapedRelativePathFor(file);
+ if (".dll" != extension)
+ {
+ projectBuilder.Append(" ").Append(k_WindowsNewline);
+ }
+ else
+ {
+ references.Add(fullFile);
+ }
+ }
+
+ var assemblyName = FileSystemUtil.FileNameWithoutExtension(assembly.outputPath);
+
+ // Append additional non-script files that should be included in project generation.
+ if (allAssetsProjectParts.TryGetValue(assemblyName, out var additionalAssetsForProject))
+ projectBuilder.Append(additionalAssetsForProject);
+
+ var islandRefs = references.Union(assembly.allReferences);
+
+ foreach (string reference in islandRefs)
+ {
+ if (reference.EndsWith("/UnityEditor.dll", StringComparison.Ordinal)
+ || reference.EndsWith("/UnityEngine.dll", StringComparison.Ordinal)
+ || reference.EndsWith("\\UnityEditor.dll", StringComparison.Ordinal)
+ || reference.EndsWith("\\UnityEngine.dll", StringComparison.Ordinal))
+ continue;
+
+ var match = k_ScriptReferenceExpression.Match(reference);
+ if (match.Success)
+ {
+ // assume csharp language
+ // Add a reference to a project except if it's a reference to a script assembly
+ // that we are not generating a project for. This will be the case for assemblies
+ // coming from .assembly.json files in non-internalized packages.
+ var dllName = match.Groups["dllname"].Value;
+ if (allProjectIslands.Any(i => Path.GetFileName(i.outputPath) == dllName))
+ {
+ projectReferences.Add(match);
+ continue;
+ }
+ }
+
+ string fullReference = Path.IsPathRooted(reference) ? reference : Path.Combine(ProjectDirectory, reference);
+
+ AppendReference(fullReference, projectBuilder);
+ }
+
+ var responseRefs = responseFilesData.SelectMany(x => x.FullPathReferences.Select(r => r));
+ foreach (var reference in responseRefs)
+ {
+ AppendReference(reference, projectBuilder);
+ }
+
+ if (0 < projectReferences.Count)
+ {
+ projectBuilder.AppendLine(" ");
+ projectBuilder.AppendLine(" ");
+ foreach (Match reference in projectReferences)
+ {
+ var referencedProject = reference.Groups["project"].Value;
+
+ projectBuilder.Append(" ").Append(k_WindowsNewline);
+ projectBuilder.Append(" {")
+ .Append(ProjectGuid(Path.Combine("Temp", reference.Groups["project"].Value + ".dll"))).Append("}")
+ .Append(k_WindowsNewline);
+ projectBuilder.Append(" ").Append(referencedProject).Append("").Append(k_WindowsNewline);
+ projectBuilder.AppendLine(" ");
+ }
+ }
+
+ projectBuilder.Append(ProjectFooter());
+ return projectBuilder.ToString();
+ }
+
+ static void AppendReference(string fullReference, StringBuilder projectBuilder)
+ {
+ //replace \ with / and \\ with /
+ var escapedFullPath = SecurityElement.Escape(fullReference);
+ escapedFullPath = escapedFullPath.Replace("\\\\", "/").Replace("\\", "/");
+ projectBuilder.Append(" ").Append(k_WindowsNewline);
+ projectBuilder.Append(" ").Append(escapedFullPath).Append("").Append(k_WindowsNewline);
+ projectBuilder.Append(" ").Append(k_WindowsNewline);
+ }
+
+ public string ProjectFile(Assembly assembly)
+ {
+ return Path.Combine(ProjectDirectory, $"{FileSystemUtil.FileNameWithoutExtension(assembly.outputPath)}.csproj");
+ }
+
+ public string SolutionFile()
+ {
+ return Path.Combine(ProjectDirectory, $"{m_ProjectName}.sln");
+ }
+
+ string ProjectHeader(
+ Assembly island,
+ IEnumerable responseFilesData
+ )
+ {
+ var arguments = new object[]
+ {
+ k_ToolsVersion, k_ProductVersion, ProjectGuid(island.outputPath),
+ InternalEditorUtility.GetEngineAssemblyPath(),
+ InternalEditorUtility.GetEditorAssemblyPath(),
+ string.Join(";",
+ new[] {"DEBUG", "TRACE"}.Concat(EditorUserBuildSettings.activeScriptCompilationDefines).Concat(island.defines)
+ .Concat(responseFilesData.SelectMany(x => x.Defines)).Distinct().ToArray()),
+ MSBuildNamespaceUri,
+ FileSystemUtil.FileNameWithoutExtension(island.outputPath),
+ EditorSettings.projectGenerationRootNamespace,
+ k_TargetFrameworkVersion,
+ PluginSettings.OverrideLangVersion?PluginSettings.LangVersion:k_TargetLanguageVersion,
+ k_BaseDirectory,
+ island.compilerOptions.AllowUnsafeCode | responseFilesData.Any(x => x.Unsafe)
+ };
+
+ try
+ {
+ return string.Format(GetProjectHeaderTemplate(), arguments);
+ }
+ catch (Exception)
+ {
+ throw new NotSupportedException(
+ "Failed creating c# project because the c# project header did not have the correct amount of arguments, which is " +
+ arguments.Length);
+ }
+ }
+
+ static string GetSolutionText()
+ {
+ return string.Join("\r\n",
+ @"",
+ @"Microsoft Visual Studio Solution File, Format Version {0}",
+ @"# Visual Studio {1}",
+ @"{2}",
+ @"Global",
+ @" GlobalSection(SolutionConfigurationPlatforms) = preSolution",
+ @" Debug|Any CPU = Debug|Any CPU",
+ @" Release|Any CPU = Release|Any CPU",
+ @" EndGlobalSection",
+ @" GlobalSection(ProjectConfigurationPlatforms) = postSolution",
+ @"{3}",
+ @" EndGlobalSection",
+ @" GlobalSection(SolutionProperties) = preSolution",
+ @" HideSolutionNode = FALSE",
+ @" EndGlobalSection",
+ @"EndGlobal",
+ @"").Replace(" ", "\t");
+ }
+
+ static string GetProjectFooterTemplate()
+ {
+ return string.Join("\r\n",
+ @" ",
+ @" ",
+ @" ",
+ @"",
+ @"");
+ }
+
+ static string GetProjectHeaderTemplate()
+ {
+ var header = new[]
+ {
+ @"",
+ @"",
+ @" ",
+ @" {10}",
+ @" <_TargetFrameworkDirectories>non_empty_path_generated_by_unity.rider.package",
+ @" <_FullFrameworkReferenceAssemblyPaths>non_empty_path_generated_by_unity.rider.package",
+ @" true",
+ @" ",
+ @" ",
+ @" Debug",
+ @" AnyCPU",
+ @" {1}",
+ @" 2.0",
+ @" {8}",
+ @" {{{2}}}",
+ @" Library",
+ @" Properties",
+ @" {7}",
+ @" {9}",
+ @" 512",
+ @" {11}",
+ @" ",
+ @" ",
+ @" true",
+ @" full",
+ @" false",
+ @" Temp\bin\Debug\",
+ @" {5}",
+ @" prompt",
+ @" 4",
+ @" 0169",
+ @" {12}",
+ @" ",
+ @" ",
+ @" pdbonly",
+ @" true",
+ @" Temp\bin\Release\",
+ @" prompt",
+ @" 4",
+ @" 0169",
+ @" {12}",
+ @" "
+ };
+
+ var forceExplicitReferences = new[]
+ {
+ @" ",
+ @" true",
+ @" true",
+ @" false",
+ @" false",
+ @" false",
+ @" "
+ };
+
+ var itemGroupStart = new[]
+ {
+ @" "
+ };
+
+ var footer = new[]
+ {
+ @" ",
+ @" {3}",
+ @" ",
+ @" ",
+ @" {4}",
+ @" ",
+ @" ",
+ @" ",
+ @""
+ };
+
+ var text = header.Concat(forceExplicitReferences).Concat(itemGroupStart).Concat(footer).ToArray();
+ return string.Join("\r\n", text);
+ }
+
+ void SyncSolution(IEnumerable islands, Type[] types)
+ {
+ SyncSolutionFileIfNotChanged(SolutionFile(), SolutionText(islands), types);
+ }
+
+ string SolutionText(IEnumerable islands)
+ {
+ var fileversion = "11.00";
+ var vsversion = "2010";
+
+ var relevantIslands = RelevantIslandsForMode(islands);
+ string projectEntries = GetProjectEntries(relevantIslands);
+ string projectConfigurations = string.Join(k_WindowsNewline,
+ relevantIslands.Select(i => GetProjectActiveConfigurations(ProjectGuid(i.outputPath))).ToArray());
+ return string.Format(GetSolutionText(), fileversion, vsversion, projectEntries, projectConfigurations);
+ }
+
+ static IEnumerable RelevantIslandsForMode(IEnumerable islands)
+ {
+ IEnumerable relevantIslands = islands.Where(i => ScriptingLanguage.CSharp == ScriptingLanguageFor(i));
+ return relevantIslands;
+ }
+
+ ///
+ /// Get a Project("{guid}") = "MyProject", "MyProject.unityproj", "{projectguid}"
+ /// entry for each relevant language
+ ///
+ string GetProjectEntries(IEnumerable islands)
+ {
+ var projectEntries = islands.Select(i => string.Format(
+ m_SolutionProjectEntryTemplate,
+ SolutionGuid(i), FileSystemUtil.FileNameWithoutExtension(i.outputPath), Path.GetFileName(ProjectFile(i)),
+ ProjectGuid(i.outputPath)
+ ));
+
+ return string.Join(k_WindowsNewline, projectEntries.ToArray());
+ }
+
+ ///
+ /// Generate the active configuration string for a given project guid
+ ///
+ string GetProjectActiveConfigurations(string projectGuid)
+ {
+ return string.Format(
+ m_SolutionProjectConfigurationTemplate,
+ projectGuid);
+ }
+
+ string EscapedRelativePathFor(string file)
+ {
+ var projectDir = ProjectDirectory.Replace('/', '\\');
+ file = file.Replace('/', '\\');
+ var path = SkipPathPrefix(file, projectDir);
+
+ var packageInfo = m_AssemblyNameProvider.FindForAssetPath(path.Replace('\\', '/'));
+ if (packageInfo != null)
+ {
+ // We have to normalize the path, because the PackageManagerRemapper assumes
+ // dir seperators will be os specific.
+ var absolutePath = Path.GetFullPath(NormalizePath(path)).Replace('/', '\\');
+ path = SkipPathPrefix(absolutePath, projectDir);
+ }
+
+ return SecurityElement.Escape(path);
+ }
+
+ static string SkipPathPrefix(string path, string prefix)
+ {
+ if (path.Replace("\\", "/").StartsWith($"{prefix}/"))
+ return path.Substring(prefix.Length + 1);
+ return path;
+ }
+
+ static string NormalizePath(string path)
+ {
+ if (Path.DirectorySeparatorChar == '\\')
+ return path.Replace('/', Path.DirectorySeparatorChar);
+ return path.Replace('\\', Path.DirectorySeparatorChar);
+ }
+
+
+ string ProjectGuid(string assembly)
+ {
+ return SolutionGuidGenerator.GuidForProject(m_ProjectName + FileSystemUtil.FileNameWithoutExtension(assembly));
+ }
+
+ string SolutionGuid(Assembly island)
+ {
+ return SolutionGuidGenerator.GuidForSolution(m_ProjectName, GetExtensionOfSourceFiles(island.sourceFiles));
+ }
+
+ static string ProjectFooter()
+ {
+ return GetProjectFooterTemplate();
+ }
+
+ static string GetProjectExtension()
+ {
+ return ".csproj";
+ }
+ }
+
+ public static class SolutionGuidGenerator
+ {
+ public static string GuidForProject(string projectName)
+ {
+ return ComputeGuidHashFor(projectName + "salt");
+ }
+
+ public static string GuidForSolution(string projectName, string sourceFileExtension)
+ {
+ if (sourceFileExtension.ToLower() == "cs")
+ // GUID for a C# class library: http://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs
+ return "FAE04EC0-301F-11D3-BF4B-00C04F79EFBC";
+
+ return ComputeGuidHashFor(projectName);
+ }
+
+ static string ComputeGuidHashFor(string input)
+ {
+ var hash = MD5.Create().ComputeHash(Encoding.Default.GetBytes(input));
+ return HashAsGuid(HashToString(hash));
+ }
+
+ static string HashAsGuid(string hash)
+ {
+ var guid = hash.Substring(0, 8) + "-" + hash.Substring(8, 4) + "-" + hash.Substring(12, 4) + "-" +
+ hash.Substring(16, 4) + "-" + hash.Substring(20, 12);
+ return guid.ToUpper();
+ }
+
+ static string HashToString(byte[] bs)
+ {
+ var sb = new StringBuilder();
+ foreach (byte b in bs)
+ sb.Append(b.ToString("x2"));
+ return sb.ToString();
+ }
+ }
+}
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/RiderInitializer.cs b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/RiderInitializer.cs
new file mode 100644
index 00000000..f70b7924
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/RiderInitializer.cs
@@ -0,0 +1,47 @@
+using System;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using UnityEngine;
+
+namespace Packages.Rider.Editor
+{
+ internal class RiderInitializer
+ {
+ public void Initialize(string editorPath)
+ {
+ if (EditorPluginInterop.EditorPluginIsLoadedFromAssets())
+ {
+ Debug.LogError($"Please delete {EditorPluginInterop.GetEditorPluginAssembly().Location}. Unity 2019.2+ loads it directly from Rider installation. To disable this, open Rider's settings, search and uncheck 'Automatically install and update Rider's Unity editor plugin'.");
+ return;
+ }
+
+ var dllName = "JetBrains.Rider.Unity.Editor.Plugin.Full.Repacked.dll";
+ var relPath = "../../plugins/rider-unity/EditorPlugin";
+ if (SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX)
+ relPath = "Contents/plugins/rider-unity/EditorPlugin";
+ var dllFile = new FileInfo(Path.Combine(Path.Combine(editorPath, relPath), dllName));
+
+ if (dllFile.Exists)
+ {
+ // doesn't lock assembly on disk
+ var bytes = File.ReadAllBytes(dllFile.FullName);
+ var pdbFile = new FileInfo(Path.ChangeExtension(dllFile.FullName, ".pdb"));
+ if (pdbFile.Exists)
+ {
+ AppDomain.CurrentDomain.Load(bytes, File.ReadAllBytes(pdbFile.FullName));
+ }
+ else
+ {
+ AppDomain.CurrentDomain.Load(bytes);
+ // AppDomain.CurrentDomain.Load(AssemblyName.GetAssemblyName(dllFile.FullName)); // use this for external source debug
+ }
+ EditorPluginInterop.InitEntryPoint();
+ }
+ else
+ {
+ Debug.Log((object) ($"Unable to find Rider EditorPlugin {dllFile.FullName} for Unity "));
+ }
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/RiderScriptEditor.cs b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/RiderScriptEditor.cs
new file mode 100644
index 00000000..190ed666
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/RiderScriptEditor.cs
@@ -0,0 +1,344 @@
+using System;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using Packages.Rider.Editor.Util;
+using Unity.CodeEditor;
+using UnityEditor;
+using UnityEngine;
+using Debug = UnityEngine.Debug;
+
+namespace Packages.Rider.Editor
+{
+ [InitializeOnLoad]
+ public class RiderScriptEditor : IExternalCodeEditor
+ {
+ IDiscovery m_Discoverability;
+ IGenerator m_ProjectGeneration;
+ RiderInitializer m_Initiliazer = new RiderInitializer();
+
+ static RiderScriptEditor()
+ {
+ try
+ {
+ var projectGeneration = new ProjectGeneration();
+ var editor = new RiderScriptEditor(new Discovery(), projectGeneration);
+ CodeEditor.Register(editor);
+
+ var path = GetEditorRealPath(CodeEditor.CurrentEditorInstallation);
+ if (IsRiderInstallation(path))
+ {
+ if (!FileSystemUtil.EditorPathExists(path)) // previously used rider was removed
+ {
+ var newEditor = editor.Installations.Last().Path;
+ CodeEditor.SetExternalScriptEditor(newEditor);
+ path = newEditor;
+ }
+
+ editor.CreateSolutionIfDoesntExist();
+ if (ShouldLoadEditorPlugin(path))
+ {
+ editor.m_Initiliazer.Initialize(path);
+ }
+
+ InitProjectFilesWatcher();
+ }
+ }
+ catch (Exception e)
+ {
+ Debug.LogException(e);
+ }
+ }
+
+ private static void InitProjectFilesWatcher()
+ {
+ var watcher = new FileSystemWatcher();
+ watcher.Path = Directory.GetCurrentDirectory();
+ watcher.NotifyFilter = NotifyFilters.LastWrite; //Watch for changes in LastWrite times
+ watcher.Filter = "*.*";
+
+ // Add event handlers.
+ watcher.Changed += OnChanged;
+ watcher.Created += OnChanged;
+
+ watcher.EnableRaisingEvents = true; // Begin watching.
+
+ AppDomain.CurrentDomain.DomainUnload += (EventHandler) ((_, __) =>
+ {
+ watcher.Dispose();
+ });
+ }
+
+ private static void OnChanged(object sender, FileSystemEventArgs e)
+ {
+ var extension = Path.GetExtension(e.FullPath);
+ if (extension == ".sln" || extension == ".csproj")
+ RiderScriptEditorData.instance.HasChanges = true;
+ }
+
+ private static string GetEditorRealPath(string path)
+ {
+ if (string.IsNullOrEmpty(path))
+ {
+ return path;
+ }
+
+ if (!FileSystemUtil.EditorPathExists(path))
+ return path;
+
+ if (SystemInfo.operatingSystemFamily != OperatingSystemFamily.Windows)
+ {
+ var realPath = FileSystemUtil.GetFinalPathName(path);
+
+ // case of snap installation
+ if (SystemInfo.operatingSystemFamily == OperatingSystemFamily.Linux)
+ {
+ if (new FileInfo(path).Name.ToLowerInvariant() == "rider" &&
+ new FileInfo(realPath).Name.ToLowerInvariant() == "snap")
+ {
+ var snapInstallPath = "/snap/rider/current/bin/rider.sh";
+ if (new FileInfo(snapInstallPath).Exists)
+ return snapInstallPath;
+ }
+ }
+
+ // in case of symlink
+ return realPath;
+ }
+
+ return path;
+ }
+
+ const string unity_generate_all = "unity_generate_all_csproj";
+
+ public RiderScriptEditor(IDiscovery discovery, IGenerator projectGeneration)
+ {
+ m_Discoverability = discovery;
+ m_ProjectGeneration = projectGeneration;
+ }
+
+ private static string[] defaultExtensions
+ {
+ get
+ {
+ var customExtensions = new[] {"json", "asmdef", "log"};
+ return EditorSettings.projectGenerationBuiltinExtensions.Concat(EditorSettings.projectGenerationUserExtensions)
+ .Concat(customExtensions).Distinct().ToArray();
+ }
+ }
+
+ private static string[] HandledExtensions
+ {
+ get
+ {
+ return HandledExtensionsString.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries).Select(s => s.TrimStart('.', '*'))
+ .ToArray();
+ }
+ }
+
+ private static string HandledExtensionsString
+ {
+ get { return EditorPrefs.GetString("Rider_UserExtensions", string.Join(";", defaultExtensions));}
+ set { EditorPrefs.SetString("Rider_UserExtensions", value); }
+ }
+
+ private static bool SupportsExtension(string path)
+ {
+ var extension = Path.GetExtension(path);
+ if (string.IsNullOrEmpty(extension))
+ return false;
+ return HandledExtensions.Contains(extension.TrimStart('.'));
+ }
+
+ public void OnGUI()
+ {
+ var prevGenerate = EditorPrefs.GetBool(unity_generate_all, false);
+ var generateAll = EditorGUILayout.Toggle("Generate all .csproj files.", prevGenerate);
+ if (generateAll != prevGenerate)
+ {
+ EditorPrefs.SetBool(unity_generate_all, generateAll);
+ }
+
+ m_ProjectGeneration.GenerateAll(generateAll);
+
+ if (ShouldLoadEditorPlugin(CurrentEditor))
+ {
+ HandledExtensionsString = EditorGUILayout.TextField(new GUIContent("Extensions handled: "), HandledExtensionsString);
+ }
+ }
+
+ public void SyncIfNeeded(string[] addedFiles, string[] deletedFiles, string[] movedFiles, string[] movedFromFiles,
+ string[] importedFiles)
+ {
+ m_ProjectGeneration.SyncIfNeeded(addedFiles.Union(deletedFiles).Union(movedFiles).Union(movedFromFiles),
+ importedFiles);
+ }
+
+ public void SyncAll()
+ {
+ AssetDatabase.Refresh();
+ if (RiderScriptEditorData.instance.HasChanges)
+ {
+ m_ProjectGeneration.Sync();
+ RiderScriptEditorData.instance.HasChanges = false;
+ }
+ }
+
+ public void Initialize(string editorInstallationPath) // is called each time ExternalEditor is changed
+ {
+ m_ProjectGeneration.Sync(); // regenerate csproj and sln for new editor
+ }
+
+ public bool OpenProject(string path, int line, int column)
+ {
+ if (path != "" && !SupportsExtension(path)) // Assets - Open C# Project passes empty path here
+ {
+ return false;
+ }
+
+ if (path == "" && SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX)
+ {
+ // there is a bug in DllImplementation - use package implementation here instead https://github.cds.internal.unity3d.com/unity/com.unity.ide.rider/issues/21
+ return OpenOSXApp(path, line, column);
+ }
+
+ if (!IsUnityScript(path))
+ {
+ var fastOpenResult = EditorPluginInterop.OpenFileDllImplementation(path, line, column);
+ if (fastOpenResult)
+ return true;
+ }
+
+ if (SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX)
+ {
+ return OpenOSXApp(path, line, column);
+ }
+
+ var solution = GetSolutionFile(path); // TODO: If solution file doesn't exist resync.
+ solution = solution == "" ? "" : $"\"{solution}\"";
+ var process = new Process
+ {
+ StartInfo = new ProcessStartInfo
+ {
+ FileName = CodeEditor.CurrentEditorInstallation,
+ Arguments = $"{solution} -l {line} \"{path}\"",
+ UseShellExecute = true,
+ }
+ };
+
+ process.Start();
+
+ return true;
+ }
+
+ private bool OpenOSXApp(string path, int line, int column)
+ {
+ var solution = GetSolutionFile(path); // TODO: If solution file doesn't exist resync.
+ solution = solution == "" ? "" : $"\"{solution}\"";
+ var pathArguments = path == "" ? "" : $"-l {line} \"{path}\"";
+ var process = new Process
+ {
+ StartInfo = new ProcessStartInfo
+ {
+ FileName = "open",
+ Arguments = $"-n \"{CodeEditor.CurrentEditorInstallation}\" --args {solution} {pathArguments}",
+ CreateNoWindow = true,
+ UseShellExecute = true,
+ }
+ };
+
+ process.Start();
+
+ return true;
+ }
+
+ private string GetSolutionFile(string path)
+ {
+ if (IsUnityScript(path))
+ {
+ return Path.Combine(GetBaseUnityDeveloperFolder(), "Projects/CSharp/Unity.CSharpProjects.gen.sln");
+ }
+
+ var solutionFile = m_ProjectGeneration.SolutionFile();
+ if (File.Exists(solutionFile))
+ {
+ return solutionFile;
+ }
+
+ return "";
+ }
+
+ static bool IsUnityScript(string path)
+ {
+ if (UnityEditor.Unsupported.IsDeveloperBuild())
+ {
+ var baseFolder = GetBaseUnityDeveloperFolder().Replace("\\", "/");
+ var lowerPath = path.ToLowerInvariant().Replace("\\", "/");
+
+ if (lowerPath.Contains((baseFolder + "/Runtime").ToLowerInvariant())
+ || lowerPath.Contains((baseFolder + "/Editor").ToLowerInvariant()))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ static string GetBaseUnityDeveloperFolder()
+ {
+ return Directory.GetParent(EditorApplication.applicationPath).Parent.Parent.FullName;
+ }
+
+ public bool TryGetInstallationForPath(string editorPath, out CodeEditor.Installation installation)
+ {
+ if (FileSystemUtil.EditorPathExists(editorPath) && IsRiderInstallation(editorPath))
+ {
+ var info = new RiderPathLocator.RiderInfo(editorPath, false);
+ installation = new CodeEditor.Installation
+ {
+ Name = info.Presentation,
+ Path = info.Path
+ };
+ return true;
+ }
+
+ installation = default;
+ return false;
+ }
+
+ public static bool IsRiderInstallation(string path)
+ {
+ if (string.IsNullOrEmpty(path))
+ {
+ return false;
+ }
+
+ var fileInfo = new FileInfo(path);
+ var filename = fileInfo.Name.ToLowerInvariant();
+ return filename.StartsWith("rider", StringComparison.Ordinal);
+ }
+
+ public static string CurrentEditor // works fast, doesn't validate if executable really exists
+ => EditorPrefs.GetString("kScriptsDefaultApp");
+
+ public static bool ShouldLoadEditorPlugin(string path)
+ {
+ var ver = RiderPathLocator.GetBuildNumber(path);
+ if (!Version.TryParse(ver, out var version))
+ return false;
+
+ return version >= new Version("191.7141.156");
+ }
+
+ public CodeEditor.Installation[] Installations => m_Discoverability.PathCallback();
+
+ public void CreateSolutionIfDoesntExist()
+ {
+ if (!m_ProjectGeneration.HasSolutionBeenGenerated())
+ {
+ m_ProjectGeneration.Sync();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/RiderScriptEditorData.cs b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/RiderScriptEditorData.cs
new file mode 100644
index 00000000..d05428bb
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/RiderScriptEditorData.cs
@@ -0,0 +1,10 @@
+using UnityEditor;
+using UnityEngine;
+
+namespace Packages.Rider.Editor
+{
+ public class RiderScriptEditorData:ScriptableSingleton
+ {
+ [SerializeField] internal bool HasChanges = true; // sln/csproj files were changed
+ }
+}
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/Util/FileSystemUtil.cs b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/Util/FileSystemUtil.cs
new file mode 100644
index 00000000..3d0624b2
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/Util/FileSystemUtil.cs
@@ -0,0 +1,66 @@
+using System;
+using System.ComponentModel;
+using System.IO;
+using System.Text;
+using JetBrains.Annotations;
+using UnityEngine;
+
+namespace Packages.Rider.Editor.Util
+{
+ public static class FileSystemUtil
+ {
+ [NotNull]
+ public static string GetFinalPathName([NotNull] string path)
+ {
+ if (path == null) throw new ArgumentNullException("path");
+
+ // up to MAX_PATH. MAX_PATH on Linux currently 4096, on Mac OS X 1024
+ // doc: http://man7.org/linux/man-pages/man3/realpath.3.html
+ var sb = new StringBuilder(8192);
+ var result = LibcNativeInterop.realpath(path, sb);
+ if (result == IntPtr.Zero)
+ {
+ throw new Win32Exception($"{path} was not resolved.");
+ }
+
+ return new FileInfo(sb.ToString()).FullName;
+ }
+
+ public static string FileNameWithoutExtension(string path)
+ {
+ if (string.IsNullOrEmpty(path))
+ {
+ return "";
+ }
+
+ var indexOfDot = -1;
+ var indexOfSlash = 0;
+ for (var i = path.Length - 1; i >= 0; i--)
+ {
+ if (indexOfDot == -1 && path[i] == '.')
+ {
+ indexOfDot = i;
+ }
+
+ if (indexOfSlash == 0 && path[i] == '/' || path[i] == '\\')
+ {
+ indexOfSlash = i + 1;
+ break;
+ }
+ }
+
+ if (indexOfDot == -1)
+ {
+ indexOfDot = path.Length - 1;
+ }
+
+ return path.Substring(indexOfSlash, indexOfDot - indexOfSlash);
+ }
+
+ public static bool EditorPathExists(string editorPath)
+ {
+ return SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX && new DirectoryInfo(editorPath).Exists
+ || SystemInfo.operatingSystemFamily != OperatingSystemFamily.MacOSX && new FileInfo(editorPath).Exists;
+ }
+ }
+}
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/Util/LibcNativeInterop.cs b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/Util/LibcNativeInterop.cs
new file mode 100644
index 00000000..a4070f28
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/Util/LibcNativeInterop.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Runtime.InteropServices;
+using System.Text;
+
+namespace Packages.Rider.Editor.Util
+{
+ internal static class LibcNativeInterop
+ {
+ [DllImport("libc", SetLastError = true)]
+ public static extern IntPtr realpath(string path, StringBuilder resolved_path);
+ }
+}
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/Util/UnityUtils.cs b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/Util/UnityUtils.cs
new file mode 100644
index 00000000..03c9922e
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/Util/UnityUtils.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Linq;
+using UnityEngine;
+
+namespace Packages.Rider.Editor.Util
+{
+ public static class UnityUtils
+ {
+ internal static readonly string UnityApplicationVersion = Application.unityVersion;
+
+ public static Version UnityVersion
+ {
+ get
+ {
+ var ver = UnityApplicationVersion.Split(".".ToCharArray()).Take(2).Aggregate((a, b) => a + "." + b);
+ return new Version(ver);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/com.unity.ide.rider.asmdef b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/com.unity.ide.rider.asmdef
new file mode 100644
index 00000000..2e652fa9
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/Rider/Editor/com.unity.ide.rider.asmdef
@@ -0,0 +1,9 @@
+{
+ "name": "Unity.Rider.Editor",
+ "references": [],
+ "optionalUnityReferences": [],
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": []
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/package.json b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/package.json
new file mode 100644
index 00000000..ac4a762f
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.rider@1.1.0/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "com.unity.ide.rider",
+ "displayName": "Rider Editor",
+ "description": "Code editor integration for supporting Rider as code editor for unity. Adds support for generating csproj files for code completion, auto discovery of installations, etc.",
+ "version": "1.1.0",
+ "unity": "2019.2",
+ "unityRelease": "0a12",
+ "dependencies": {
+ "com.unity.ext.nunit": "1.0.0"
+ },
+ "relatedPackages": {
+ "com.unity.ide.rider.tests": "1.1.0"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git@github.cds.internal.unity3d.com:unity/com.unity.ide.rider.git",
+ "revision": "80ad81f593b04a6104771ae0d01cc71773d07b02"
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/CHANGELOG.md b/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/CHANGELOG.md
new file mode 100644
index 00000000..e7a32b4d
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/CHANGELOG.md
@@ -0,0 +1,34 @@
+# Code Editor Package for Visual Studio Code
+
+## [1.1.0] - 2019-08-07
+
+Adds support for choosing extensions to be opened with VSCode. This can be done through the GUI in Preferences.
+Avoids opening all extensions after the change in core unity.
+
+
+## [1.0.7] - 2019-05-15
+
+Fix various OSX specific issues.
+Generate project on load if they are not generated.
+Fix path recognition.
+
+
+## [1.0.6] - 2019-04-30
+
+Ensure asset database is refreshed when generating csproj and solution files.
+
+## [1.0.5] - 2019-04-27
+
+Add support for generating all csproj files.
+
+## [1.0.4] - 2019-04-18
+
+Fix relative package paths.
+Fix opening editor on mac.
+Add %LOCALAPPDATA%/Programs to the path of install paths.
+
+## [1.0.3] - 2019-01-01
+
+### This is the first release of *Unity Package vscode_editor*.
+
+Using the newly created api to integrate Visual Studio Code with Unity.
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/CONTRIBUTING.md b/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/CONTRIBUTING.md
new file mode 100644
index 00000000..576d0963
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/CONTRIBUTING.md
@@ -0,0 +1,6 @@
+# Contributing
+
+## All contributions are subject to the [Unity Contribution Agreement(UCA)](https://unity3d.com/legal/licenses/Unity_Contribution_Agreement)
+By making a pull request, you are confirming agreement to the terms and conditions of the UCA, including that your Contributions are your original creation and that you have complete right and authority to make your Contributions.
+
+## Once you have a change ready following these ground rules. Simply make a pull request
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/Editor/ProjectGeneration.cs b/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/Editor/ProjectGeneration.cs
new file mode 100644
index 00000000..1f16d96c
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/Editor/ProjectGeneration.cs
@@ -0,0 +1,837 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Security;
+using System.Security.Cryptography;
+using System.Text;
+using System.Text.RegularExpressions;
+using UnityEditor;
+using UnityEditor.Compilation;
+using UnityEditor.PackageManager;
+using UnityEditorInternal;
+using UnityEngine;
+using UnityEngine.Profiling;
+
+namespace VSCodeEditor
+{
+ public interface IGenerator {
+ bool SyncIfNeeded(IEnumerable affectedFiles, IEnumerable reimportedFiles);
+ void Sync();
+ bool HasSolutionBeenGenerated();
+ string SolutionFile();
+ string ProjectDirectory { get; }
+ void GenerateAll(bool generateAll);
+ }
+
+ public interface IAssemblyNameProvider
+ {
+ string GetAssemblyNameFromScriptPath(string path);
+ IEnumerable GetAllAssemblies(Func shouldFileBePartOfSolution);
+ IEnumerable GetAllAssetPaths();
+ UnityEditor.PackageManager.PackageInfo FindForAssetPath(string assetPath);
+ }
+
+ public struct TestSettings {
+ public bool ShouldSync;
+ public Dictionary SyncPath;
+ }
+
+ class AssemblyNameProvider : IAssemblyNameProvider
+ {
+ public string GetAssemblyNameFromScriptPath(string path)
+ {
+ return CompilationPipeline.GetAssemblyNameFromScriptPath(path);
+ }
+
+ public IEnumerable GetAllAssemblies(Func shouldFileBePartOfSolution)
+ {
+ return CompilationPipeline.GetAssemblies().Where(i => 0 < i.sourceFiles.Length && i.sourceFiles.Any(shouldFileBePartOfSolution));
+ }
+
+ public IEnumerable GetAllAssetPaths()
+ {
+ return AssetDatabase.GetAllAssetPaths();
+ }
+
+ public UnityEditor.PackageManager.PackageInfo FindForAssetPath(string assetPath)
+ {
+ return UnityEditor.PackageManager.PackageInfo.FindForAssetPath(assetPath);
+ }
+ }
+
+
+ public class ProjectGeneration : IGenerator
+ {
+ enum ScriptingLanguage
+ {
+ None,
+ CSharp
+ }
+
+ public static readonly string MSBuildNamespaceUri = "http://schemas.microsoft.com/developer/msbuild/2003";
+
+ const string k_WindowsNewline = "\r\n";
+
+ const string k_SettingsJson = @"{
+ ""files.exclude"":
+ {
+ ""**/.DS_Store"":true,
+ ""**/.git"":true,
+ ""**/.gitignore"":true,
+ ""**/.gitmodules"":true,
+ ""**/*.booproj"":true,
+ ""**/*.pidb"":true,
+ ""**/*.suo"":true,
+ ""**/*.user"":true,
+ ""**/*.userprefs"":true,
+ ""**/*.unityproj"":true,
+ ""**/*.dll"":true,
+ ""**/*.exe"":true,
+ ""**/*.pdf"":true,
+ ""**/*.mid"":true,
+ ""**/*.midi"":true,
+ ""**/*.wav"":true,
+ ""**/*.gif"":true,
+ ""**/*.ico"":true,
+ ""**/*.jpg"":true,
+ ""**/*.jpeg"":true,
+ ""**/*.png"":true,
+ ""**/*.psd"":true,
+ ""**/*.tga"":true,
+ ""**/*.tif"":true,
+ ""**/*.tiff"":true,
+ ""**/*.3ds"":true,
+ ""**/*.3DS"":true,
+ ""**/*.fbx"":true,
+ ""**/*.FBX"":true,
+ ""**/*.lxo"":true,
+ ""**/*.LXO"":true,
+ ""**/*.ma"":true,
+ ""**/*.MA"":true,
+ ""**/*.obj"":true,
+ ""**/*.OBJ"":true,
+ ""**/*.asset"":true,
+ ""**/*.cubemap"":true,
+ ""**/*.flare"":true,
+ ""**/*.mat"":true,
+ ""**/*.meta"":true,
+ ""**/*.prefab"":true,
+ ""**/*.unity"":true,
+ ""build/"":true,
+ ""Build/"":true,
+ ""Library/"":true,
+ ""library/"":true,
+ ""obj/"":true,
+ ""Obj/"":true,
+ ""ProjectSettings/"":true,
+ ""temp/"":true,
+ ""Temp/"":true
+ }
+}";
+
+ ///
+ /// Map source extensions to ScriptingLanguages
+ ///
+ static readonly Dictionary k_BuiltinSupportedExtensions = new Dictionary
+ {
+ { "cs", ScriptingLanguage.CSharp },
+ { "uxml", ScriptingLanguage.None },
+ { "uss", ScriptingLanguage.None },
+ { "shader", ScriptingLanguage.None },
+ { "compute", ScriptingLanguage.None },
+ { "cginc", ScriptingLanguage.None },
+ { "hlsl", ScriptingLanguage.None },
+ { "glslinc", ScriptingLanguage.None }
+ };
+
+ string m_SolutionProjectEntryTemplate = string.Join("\r\n", @"Project(""{{{0}}}"") = ""{1}"", ""{2}"", ""{{{3}}}""", @"EndProject").Replace(" ", "\t");
+
+ string m_SolutionProjectConfigurationTemplate = string.Join("\r\n", @" {{{0}}}.Debug|Any CPU.ActiveCfg = Debug|Any CPU", @" {{{0}}}.Debug|Any CPU.Build.0 = Debug|Any CPU", @" {{{0}}}.Release|Any CPU.ActiveCfg = Release|Any CPU", @" {{{0}}}.Release|Any CPU.Build.0 = Release|Any CPU").Replace(" ", "\t");
+
+ static readonly string[] k_ReimportSyncExtensions = { ".dll", ".asmdef" };
+
+ ///
+ /// Map ScriptingLanguages to project extensions
+ ///
+ /*static readonly Dictionary k_ProjectExtensions = new Dictionary
+ {
+ { ScriptingLanguage.CSharp, ".csproj" },
+ { ScriptingLanguage.None, ".csproj" },
+ };*/
+
+ static readonly Regex k_ScriptReferenceExpression = new Regex(
+ @"^Library.ScriptAssemblies.(?(?.*)\.dll$)",
+ RegexOptions.Compiled | RegexOptions.IgnoreCase);
+
+ string[] m_ProjectSupportedExtensions = new string[0];
+ public string ProjectDirectory { get; }
+ bool m_ShouldGenerateAll;
+
+ public void GenerateAll(bool generateAll)
+ {
+ m_ShouldGenerateAll = generateAll;
+ }
+
+ public TestSettings Settings { get; set; }
+
+ readonly string m_ProjectName;
+ readonly IAssemblyNameProvider m_AssemblyNameProvider;
+ const string k_ToolsVersion = "4.0";
+ const string k_ProductVersion = "10.0.20506";
+ const string k_BaseDirectory = ".";
+ const string k_TargetFrameworkVersion = "v4.7.1";
+ const string k_TargetLanguageVersion = "latest";
+
+ public ProjectGeneration() : this(Directory.GetParent(Application.dataPath).FullName, new AssemblyNameProvider())
+ {
+ }
+
+ public ProjectGeneration(string tempDirectory) : this(tempDirectory, new AssemblyNameProvider()) {
+ }
+
+ public ProjectGeneration(string tempDirectory, IAssemblyNameProvider assemblyNameProvider) {
+ Settings = new TestSettings { ShouldSync = true };
+ ProjectDirectory = tempDirectory.Replace('\\', '/');
+ m_ProjectName = Path.GetFileName(ProjectDirectory);
+ m_AssemblyNameProvider = assemblyNameProvider;
+ }
+
+ ///
+ /// Syncs the scripting solution if any affected files are relevant.
+ ///
+ ///
+ /// Whether the solution was synced.
+ ///
+ ///
+ /// A set of files whose status has changed
+ ///
+ ///
+ /// A set of files that got reimported
+ ///
+ public bool SyncIfNeeded(IEnumerable affectedFiles, IEnumerable reimportedFiles)
+ {
+ Profiler.BeginSample("SolutionSynchronizerSync");
+ SetupProjectSupportedExtensions();
+
+ // Don't sync if we haven't synced before
+ if (HasSolutionBeenGenerated() && HasFilesBeenModified(affectedFiles, reimportedFiles))
+ {
+ Sync();
+
+ Profiler.EndSample();
+ return true;
+ }
+
+ Profiler.EndSample();
+ return false;
+ }
+
+ bool HasFilesBeenModified(IEnumerable affectedFiles, IEnumerable reimportedFiles)
+ {
+ return affectedFiles.Any(ShouldFileBePartOfSolution) || reimportedFiles.Any(ShouldSyncOnReimportedAsset);
+ }
+
+ static bool ShouldSyncOnReimportedAsset(string asset)
+ {
+ return k_ReimportSyncExtensions.Contains(new FileInfo(asset).Extension);
+ }
+
+ public void Sync()
+ {
+ SetupProjectSupportedExtensions();
+ GenerateAndWriteSolutionAndProjects();
+ }
+
+ public bool HasSolutionBeenGenerated()
+ {
+ return File.Exists(SolutionFile());
+ }
+
+ void SetupProjectSupportedExtensions()
+ {
+ m_ProjectSupportedExtensions = EditorSettings.projectGenerationUserExtensions;
+ }
+
+ bool ShouldFileBePartOfSolution(string file)
+ {
+ string extension = Path.GetExtension(file);
+
+ // Exclude files coming from packages except if they are internalized.
+ if (!m_ShouldGenerateAll && IsInternalizedPackagePath(file))
+ {
+ return false;
+ }
+
+ // Dll's are not scripts but still need to be included..
+ if (extension == ".dll")
+ return true;
+
+ if (file.ToLower().EndsWith(".asmdef"))
+ return true;
+
+ return IsSupportedExtension(extension);
+ }
+
+ bool IsSupportedExtension(string extension)
+ {
+ extension = extension.TrimStart('.');
+ if (k_BuiltinSupportedExtensions.ContainsKey(extension))
+ return true;
+ if (m_ProjectSupportedExtensions.Contains(extension))
+ return true;
+ return false;
+ }
+
+ static ScriptingLanguage ScriptingLanguageFor(Assembly island)
+ {
+ return ScriptingLanguageFor(GetExtensionOfSourceFiles(island.sourceFiles));
+ }
+
+ static string GetExtensionOfSourceFiles(string[] files)
+ {
+ return files.Length > 0 ? GetExtensionOfSourceFile(files[0]) : "NA";
+ }
+
+ static string GetExtensionOfSourceFile(string file)
+ {
+ var ext = Path.GetExtension(file).ToLower();
+ ext = ext.Substring(1); //strip dot
+ return ext;
+ }
+
+ static ScriptingLanguage ScriptingLanguageFor(string extension)
+ {
+ return k_BuiltinSupportedExtensions.TryGetValue(extension.TrimStart('.'), out var result)
+ ? result
+ : ScriptingLanguage.None;
+ }
+
+ public void GenerateAndWriteSolutionAndProjects()
+ {
+ // Only synchronize islands that have associated source files and ones that we actually want in the project.
+ // This also filters out DLLs coming from .asmdef files in packages.
+ var assemblies = m_AssemblyNameProvider.GetAllAssemblies(ShouldFileBePartOfSolution);
+
+ var allAssetProjectParts = GenerateAllAssetProjectParts();
+
+ var monoIslands = assemblies.ToList();
+
+ SyncSolution(monoIslands);
+ var allProjectIslands = RelevantIslandsForMode(monoIslands).ToList();
+ foreach (Assembly assembly in allProjectIslands)
+ {
+ var responseFileData = ParseResponseFileData(assembly);
+ SyncProject(assembly, allAssetProjectParts, responseFileData, allProjectIslands);
+ }
+
+ if (Settings.ShouldSync)
+ {
+ WriteVSCodeSettingsFiles();
+ }
+ }
+
+ IEnumerable ParseResponseFileData(Assembly assembly)
+ {
+ var systemReferenceDirectories = CompilationPipeline.GetSystemAssemblyDirectories(assembly.compilerOptions.ApiCompatibilityLevel);
+
+ Dictionary responseFilesData = assembly.compilerOptions.ResponseFiles.ToDictionary(x => x, x => CompilationPipeline.ParseResponseFile(
+ Path.Combine(ProjectDirectory, x),
+ ProjectDirectory,
+ systemReferenceDirectories
+ ));
+
+ Dictionary responseFilesWithErrors = responseFilesData.Where(x => x.Value.Errors.Any())
+ .ToDictionary(x => x.Key, x => x.Value);
+
+ if (responseFilesWithErrors.Any())
+ {
+ foreach (var error in responseFilesWithErrors)
+ foreach (var valueError in error.Value.Errors)
+ {
+ Debug.LogError($"{error.Key} Parse Error : {valueError}");
+ }
+ }
+
+ return responseFilesData.Select(x => x.Value);
+ }
+
+ Dictionary GenerateAllAssetProjectParts()
+ {
+ Dictionary stringBuilders = new Dictionary();
+
+ foreach (string asset in m_AssemblyNameProvider.GetAllAssetPaths())
+ {
+ // Exclude files coming from packages except if they are internalized.
+ // TODO: We need assets from the assembly API
+ if (!m_ShouldGenerateAll && IsInternalizedPackagePath(asset))
+ {
+ continue;
+ }
+
+ string extension = Path.GetExtension(asset);
+ if (IsSupportedExtension(extension) && ScriptingLanguage.None == ScriptingLanguageFor(extension))
+ {
+ // Find assembly the asset belongs to by adding script extension and using compilation pipeline.
+ var assemblyName = m_AssemblyNameProvider.GetAssemblyNameFromScriptPath(asset + ".cs");
+
+ if (string.IsNullOrEmpty(assemblyName))
+ {
+ continue;
+ }
+
+ assemblyName = Utility.FileNameWithoutExtension(assemblyName);
+
+ if (!stringBuilders.TryGetValue(assemblyName, out var projectBuilder))
+ {
+ projectBuilder = new StringBuilder();
+ stringBuilders[assemblyName] = projectBuilder;
+ }
+
+ projectBuilder.Append(" ").Append(k_WindowsNewline);
+ }
+ }
+
+ var result = new Dictionary();
+
+ foreach (var entry in stringBuilders)
+ result[entry.Key] = entry.Value.ToString();
+
+ return result;
+ }
+
+ bool IsInternalizedPackagePath(string file)
+ {
+ if (string.IsNullOrWhiteSpace(file))
+ {
+ return false;
+ }
+
+ var packageInfo = m_AssemblyNameProvider.FindForAssetPath(file);
+ if (packageInfo == null) {
+ return false;
+ }
+ var packageSource = packageInfo.source;
+ return packageSource != PackageSource.Embedded && packageSource != PackageSource.Local;
+ }
+
+ void SyncProject(
+ Assembly island,
+ Dictionary allAssetsProjectParts,
+ IEnumerable responseFilesData,
+ List allProjectIslands)
+ {
+ SyncProjectFileIfNotChanged(ProjectFile(island), ProjectText(island, allAssetsProjectParts, responseFilesData, allProjectIslands));
+ }
+
+ void SyncProjectFileIfNotChanged(string path, string newContents)
+ {
+ if (Path.GetExtension(path) == ".csproj")
+ {
+ //newContents = AssetPostprocessingInternal.CallOnGeneratedCSProject(path, newContents); TODO: Call specific code here
+ }
+
+ SyncFileIfNotChanged(path, newContents);
+ }
+
+ void SyncSolutionFileIfNotChanged(string path, string newContents)
+ {
+ //newContents = AssetPostprocessingInternal.CallOnGeneratedSlnSolution(path, newContents); TODO: Call specific code here
+
+ SyncFileIfNotChanged(path, newContents);
+ }
+
+ void SyncFileIfNotChanged(string filename, string newContents)
+ {
+ if (File.Exists(filename) &&
+ newContents == File.ReadAllText(filename))
+ {
+ return;
+ }
+ if (Settings.ShouldSync)
+ {
+ File.WriteAllText(filename, newContents, Encoding.UTF8);
+ }
+ else
+ {
+ var utf8 = Encoding.UTF8;
+ byte[] utfBytes = utf8.GetBytes(newContents);
+ Settings.SyncPath[filename] = utf8.GetString(utfBytes, 0, utfBytes.Length);
+ }
+ }
+
+ string ProjectText(Assembly assembly,
+ Dictionary allAssetsProjectParts,
+ IEnumerable responseFilesData,
+ List allProjectIslands)
+ {
+ var projectBuilder = new StringBuilder(ProjectHeader(assembly, responseFilesData));
+ var references = new List();
+ var projectReferences = new List();
+
+ foreach (string file in assembly.sourceFiles)
+ {
+ if (!ShouldFileBePartOfSolution(file))
+ continue;
+
+ var extension = Path.GetExtension(file).ToLower();
+ var fullFile = EscapedRelativePathFor(file);
+ if (".dll" != extension)
+ {
+ projectBuilder.Append(" ").Append(k_WindowsNewline);
+ }
+ else
+ {
+ references.Add(fullFile);
+ }
+ }
+
+ var assemblyName = Utility.FileNameWithoutExtension(assembly.outputPath);
+
+ // Append additional non-script files that should be included in project generation.
+ if (allAssetsProjectParts.TryGetValue(assemblyName, out var additionalAssetsForProject))
+ projectBuilder.Append(additionalAssetsForProject);
+
+ var islandRefs = references.Union(assembly.allReferences);
+
+ foreach (string reference in islandRefs)
+ {
+ if (reference.EndsWith("/UnityEditor.dll", StringComparison.Ordinal)
+ || reference.EndsWith("/UnityEngine.dll", StringComparison.Ordinal)
+ || reference.EndsWith("\\UnityEditor.dll", StringComparison.Ordinal)
+ || reference.EndsWith("\\UnityEngine.dll", StringComparison.Ordinal))
+ continue;
+
+ var match = k_ScriptReferenceExpression.Match(reference);
+ if (match.Success)
+ {
+ // assume csharp language
+ // Add a reference to a project except if it's a reference to a script assembly
+ // that we are not generating a project for. This will be the case for assemblies
+ // coming from .assembly.json files in non-internalized packages.
+ var dllName = match.Groups["dllname"].Value;
+ if (allProjectIslands.Any(i => Path.GetFileName(i.outputPath) == dllName))
+ {
+ projectReferences.Add(match);
+ continue;
+ }
+ }
+
+ string fullReference = Path.IsPathRooted(reference) ? reference : Path.Combine(ProjectDirectory, reference);
+
+ AppendReference(fullReference, projectBuilder);
+ }
+
+ var responseRefs = responseFilesData.SelectMany(x => x.FullPathReferences.Select(r => r));
+ foreach (var reference in responseRefs)
+ {
+ AppendReference(reference, projectBuilder);
+ }
+
+ if (0 < projectReferences.Count)
+ {
+ projectBuilder.AppendLine(" ");
+ projectBuilder.AppendLine(" ");
+ foreach (Match reference in projectReferences)
+ {
+ var referencedProject = reference.Groups["project"].Value;
+
+ projectBuilder.Append(" ").Append(k_WindowsNewline);
+ projectBuilder.Append(" {").Append(ProjectGuid(Path.Combine("Temp", reference.Groups["project"].Value + ".dll"))).Append("}").Append(k_WindowsNewline);
+ projectBuilder.Append(" ").Append(referencedProject).Append("").Append(k_WindowsNewline);
+ projectBuilder.AppendLine(" ");
+ }
+ }
+
+ projectBuilder.Append(ProjectFooter());
+ return projectBuilder.ToString();
+ }
+
+ static void AppendReference(string fullReference, StringBuilder projectBuilder)
+ {
+ //replace \ with / and \\ with /
+ var escapedFullPath = SecurityElement.Escape(fullReference);
+ escapedFullPath = escapedFullPath.Replace("\\", "/");
+ escapedFullPath = escapedFullPath.Replace("\\\\", "/");
+ projectBuilder.Append(" ").Append(k_WindowsNewline);
+ projectBuilder.Append(" ").Append(escapedFullPath).Append("").Append(k_WindowsNewline);
+ projectBuilder.Append(" ").Append(k_WindowsNewline);
+ }
+
+ public string ProjectFile(Assembly assembly)
+ {
+ return Path.Combine(ProjectDirectory, $"{Utility.FileNameWithoutExtension(assembly.outputPath)}.csproj");
+ }
+
+ public string SolutionFile()
+ {
+ return Path.Combine(ProjectDirectory, $"{m_ProjectName}.sln");
+ }
+
+ string ProjectHeader(
+ Assembly island,
+ IEnumerable responseFilesData
+ )
+ {
+ var arguments = new object[]
+ {
+ k_ToolsVersion, k_ProductVersion, ProjectGuid(island.outputPath),
+ InternalEditorUtility.GetEngineAssemblyPath(),
+ InternalEditorUtility.GetEditorAssemblyPath(),
+ string.Join(";", new[] { "DEBUG", "TRACE" }.Concat(EditorUserBuildSettings.activeScriptCompilationDefines).Concat(island.defines).Concat(responseFilesData.SelectMany(x => x.Defines)).Distinct().ToArray()),
+ MSBuildNamespaceUri,
+ Utility.FileNameWithoutExtension(island.outputPath),
+ EditorSettings.projectGenerationRootNamespace,
+ k_TargetFrameworkVersion,
+ k_TargetLanguageVersion,
+ k_BaseDirectory,
+ island.compilerOptions.AllowUnsafeCode | responseFilesData.Any(x => x.Unsafe)
+ };
+
+ try
+ {
+ return string.Format(GetProjectHeaderTemplate(), arguments);
+ }
+ catch (Exception)
+ {
+ throw new NotSupportedException("Failed creating c# project because the c# project header did not have the correct amount of arguments, which is " + arguments.Length);
+ }
+ }
+
+ static string GetSolutionText()
+ {
+ return string.Join("\r\n", @"", @"Microsoft Visual Studio Solution File, Format Version {0}", @"# Visual Studio {1}", @"{2}", @"Global", @" GlobalSection(SolutionConfigurationPlatforms) = preSolution", @" Debug|Any CPU = Debug|Any CPU", @" Release|Any CPU = Release|Any CPU", @" EndGlobalSection", @" GlobalSection(ProjectConfigurationPlatforms) = postSolution", @"{3}", @" EndGlobalSection", @" GlobalSection(SolutionProperties) = preSolution", @" HideSolutionNode = FALSE", @" EndGlobalSection", @"EndGlobal", @"").Replace(" ", "\t");
+ }
+
+ static string GetProjectFooterTemplate()
+ {
+ return string.Join("\r\n", @" ", @" ", @" ", @"", @"");
+ }
+
+ static string GetProjectHeaderTemplate()
+ {
+ var header = new[]
+ {
+ @"",
+ @"",
+ @" ",
+ @" {10}",
+ @" ",
+ @" ",
+ @" Debug",
+ @" AnyCPU",
+ @" {1}",
+ @" 2.0",
+ @" {8}",
+ @" {{{2}}}",
+ @" Library",
+ @" Properties",
+ @" {7}",
+ @" {9}",
+ @" 512",
+ @" {11}",
+ @" ",
+ @" ",
+ @" true",
+ @" full",
+ @" false",
+ @" Temp\bin\Debug\",
+ @" {5}",
+ @" prompt",
+ @" 4",
+ @" 0169",
+ @" {12}",
+ @" ",
+ @" ",
+ @" pdbonly",
+ @" true",
+ @" Temp\bin\Release\",
+ @" prompt",
+ @" 4",
+ @" 0169",
+ @" {12}",
+ @" "
+ };
+
+ var forceExplicitReferences = new[]
+ {
+ @" ",
+ @" true",
+ @" true",
+ @" false",
+ @" false",
+ @" false",
+ @" "
+ };
+
+ var itemGroupStart = new[]
+ {
+ @" "
+ };
+
+ var footer = new[]
+ {
+ @" ",
+ @" {3}",
+ @" ",
+ @" ",
+ @" {4}",
+ @" ",
+ @" ",
+ @" ",
+ @""
+ };
+
+ var text = header.Concat(forceExplicitReferences).Concat(itemGroupStart).Concat(footer).ToArray();
+ return string.Join("\r\n", text);
+ }
+
+ void SyncSolution(IEnumerable islands)
+ {
+ SyncSolutionFileIfNotChanged(SolutionFile(), SolutionText(islands));
+ }
+
+ string SolutionText(IEnumerable islands)
+ {
+ var fileversion = "11.00";
+ var vsversion = "2010";
+
+ var relevantIslands = RelevantIslandsForMode(islands);
+ string projectEntries = GetProjectEntries(relevantIslands);
+ string projectConfigurations = string.Join(k_WindowsNewline, relevantIslands.Select(i => GetProjectActiveConfigurations(ProjectGuid(i.outputPath))).ToArray());
+ return string.Format(GetSolutionText(), fileversion, vsversion, projectEntries, projectConfigurations);
+ }
+
+ static IEnumerable RelevantIslandsForMode(IEnumerable islands)
+ {
+ IEnumerable relevantIslands = islands.Where(i => ScriptingLanguage.CSharp == ScriptingLanguageFor(i));
+ return relevantIslands;
+ }
+
+ ///
+ /// Get a Project("{guid}") = "MyProject", "MyProject.unityproj", "{projectguid}"
+ /// entry for each relevant language
+ ///
+ string GetProjectEntries(IEnumerable islands)
+ {
+ var projectEntries = islands.Select(i => string.Format(
+ m_SolutionProjectEntryTemplate,
+ SolutionGuid(i), Utility.FileNameWithoutExtension(i.outputPath), Path.GetFileName(ProjectFile(i)), ProjectGuid(i.outputPath)
+ ));
+
+ return string.Join(k_WindowsNewline, projectEntries.ToArray());
+ }
+
+ ///
+ /// Generate the active configuration string for a given project guid
+ ///
+ string GetProjectActiveConfigurations(string projectGuid)
+ {
+ return string.Format(
+ m_SolutionProjectConfigurationTemplate,
+ projectGuid);
+ }
+
+ string EscapedRelativePathFor(string file)
+ {
+ var projectDir = ProjectDirectory.Replace('/', '\\');
+ file = file.Replace('/', '\\');
+ var path = SkipPathPrefix(file, projectDir);
+
+ var packageInfo = m_AssemblyNameProvider.FindForAssetPath(path.Replace('\\', '/'));
+ if (packageInfo != null) {
+ // We have to normalize the path, because the PackageManagerRemapper assumes
+ // dir seperators will be os specific.
+ var absolutePath = Path.GetFullPath(NormalizePath(path)).Replace('/', '\\');
+ path = SkipPathPrefix(absolutePath, projectDir);
+ }
+
+ return SecurityElement.Escape(path);
+ }
+
+ static string SkipPathPrefix(string path, string prefix)
+ {
+ if (path.Replace("\\","/").StartsWith($"{prefix}/"))
+ return path.Substring(prefix.Length + 1);
+ return path;
+ }
+
+ static string NormalizePath(string path)
+ {
+ if (Path.DirectorySeparatorChar == '\\')
+ return path.Replace('/', Path.DirectorySeparatorChar);
+ return path.Replace('\\', Path.DirectorySeparatorChar);
+ }
+
+
+ string ProjectGuid(string assembly)
+ {
+ return SolutionGuidGenerator.GuidForProject(m_ProjectName + Utility.FileNameWithoutExtension(assembly));
+ }
+
+ string SolutionGuid(Assembly island)
+ {
+ return SolutionGuidGenerator.GuidForSolution(m_ProjectName, GetExtensionOfSourceFiles(island.sourceFiles));
+ }
+
+ static string ProjectFooter()
+ {
+ return GetProjectFooterTemplate();
+ }
+
+ static string GetProjectExtension()
+ {
+ return ".csproj";
+ }
+
+ void WriteVSCodeSettingsFiles()
+ {
+ var vsCodeDirectory = Path.Combine(ProjectDirectory, ".vscode");
+
+ if (!Directory.Exists(vsCodeDirectory))
+ Directory.CreateDirectory(vsCodeDirectory);
+
+ var vsCodeSettingsJson = Path.Combine(vsCodeDirectory, "settings.json");
+
+ if (!File.Exists(vsCodeSettingsJson))
+ File.WriteAllText(vsCodeSettingsJson, k_SettingsJson);
+ }
+ }
+
+ public static class SolutionGuidGenerator
+ {
+ public static string GuidForProject(string projectName)
+ {
+ return ComputeGuidHashFor(projectName + "salt");
+ }
+
+ public static string GuidForSolution(string projectName, string sourceFileExtension)
+ {
+ if (sourceFileExtension.ToLower() == "cs")
+ // GUID for a C# class library: http://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs
+ return "FAE04EC0-301F-11D3-BF4B-00C04F79EFBC";
+
+ return ComputeGuidHashFor(projectName);
+ }
+
+ static string ComputeGuidHashFor(string input)
+ {
+ var hash = MD5.Create().ComputeHash(Encoding.Default.GetBytes(input));
+ return HashAsGuid(HashToString(hash));
+ }
+
+ static string HashAsGuid(string hash)
+ {
+ var guid = hash.Substring(0, 8) + "-" + hash.Substring(8, 4) + "-" + hash.Substring(12, 4) + "-" + hash.Substring(16, 4) + "-" + hash.Substring(20, 12);
+ return guid.ToUpper();
+ }
+
+ static string HashToString(byte[] bs)
+ {
+ var sb = new StringBuilder();
+ foreach (byte b in bs)
+ sb.Append(b.ToString("x2"));
+ return sb.ToString();
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/Editor/Unity.com.unity.vscode.Editor.asmdef b/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/Editor/Unity.com.unity.vscode.Editor.asmdef
new file mode 100644
index 00000000..032da7cb
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/Editor/Unity.com.unity.vscode.Editor.asmdef
@@ -0,0 +1,9 @@
+{
+ "name": "Unity.VSCode.Editor",
+ "references": [],
+ "optionalUnityReferences": [],
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": []
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/Editor/Utility.cs b/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/Editor/Utility.cs
new file mode 100644
index 00000000..d5848569
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/Editor/Utility.cs
@@ -0,0 +1,35 @@
+namespace VSCodeEditor
+{
+ public static class Utility
+ {
+ public static string FileNameWithoutExtension(string path)
+ {
+ if (string.IsNullOrEmpty(path))
+ {
+ return "";
+ }
+
+ var indexOfDot = -1;
+ var indexOfSlash = 0;
+ for (var i = path.Length - 1; i >= 0; i--)
+ {
+ if (indexOfDot == -1 && path[i] == '.')
+ {
+ indexOfDot = i;
+ }
+ if (indexOfSlash == 0 && path[i] == '/' || path[i] == '\\')
+ {
+ indexOfSlash = i + 1;
+ break;
+ }
+ }
+
+ if (indexOfDot == -1)
+ {
+ indexOfDot = path.Length - 1;
+ }
+
+ return path.Substring(indexOfSlash, indexOfDot - indexOfSlash);
+ }
+ }
+}
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/Editor/VSCodeDiscovery.cs b/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/Editor/VSCodeDiscovery.cs
new file mode 100644
index 00000000..9d2d1f2e
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/Editor/VSCodeDiscovery.cs
@@ -0,0 +1,136 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using UnityEditor;
+using UnityEngine;
+using Unity.CodeEditor;
+
+namespace VSCodeEditor
+{
+ public interface IDiscovery {
+ CodeEditor.Installation[] PathCallback();
+ }
+
+ public class VSCodeDiscovery : IDiscovery {
+ List m_Installations;
+
+ public CodeEditor.Installation[] PathCallback()
+ {
+ if (m_Installations == null)
+ {
+ m_Installations = new List();
+ FindInstallationPaths();
+ }
+
+ return m_Installations.ToArray();
+ }
+
+ void FindInstallationPaths()
+ {
+ string[] possiblePaths =
+#if UNITY_EDITOR_OSX
+ {
+ "/Applications/Visual Studio Code.app",
+ "/Applications/Visual Studio Code - Insiders.app"
+ };
+#elif UNITY_EDITOR_WIN
+ {
+ GetProgramFiles() + @"/Microsoft VS Code/bin/code.cmd",
+ GetProgramFiles() + @"/Microsoft VS Code/Code.exe",
+ GetProgramFiles() + @"/Microsoft VS Code Insiders/bin/code-insiders.cmd",
+ GetProgramFiles() + @"/Microsoft VS Code Insiders/Code.exe",
+ GetLocalAppData() + @"/Programs/Microsoft VS Code/bin/code.cmd",
+ GetLocalAppData() + @"/Programs/Microsoft VS Code/Code.exe",
+ GetLocalAppData() + @"/Programs/Microsoft VS Code Insiders/bin/code-insiders.cmd",
+ GetLocalAppData() + @"/Programs/Microsoft VS Code Insiders/Code.exe",
+ };
+#else
+ {
+ "/usr/bin/code",
+ "/bin/code",
+ "/usr/local/bin/code",
+ "/var/lib/flatpak/exports/bin/com.visualstudio.code",
+ "/snap/current/bin/code"
+ };
+#endif
+ var existingPaths = possiblePaths.Where(VSCodeExists).ToList();
+ if (!existingPaths.Any())
+ {
+ return;
+ }
+
+ var lcp = GetLongestCommonPrefix(existingPaths);
+ switch (existingPaths.Count)
+ {
+ case 1:
+ {
+ var path = existingPaths.First();
+ m_Installations = new List
+ {
+ new CodeEditor.Installation
+ {
+ Path = path,
+ Name = path.Contains("Insiders")
+ ? "Visual Studio Code Insiders"
+ : "Visual Studio Code"
+ }
+ };
+ break;
+ }
+ case 2 when existingPaths.Any(path => !(path.Substring(lcp.Length).Contains("/") || path.Substring(lcp.Length).Contains("\\"))):
+ {
+ goto case 1;
+ }
+ default:
+ {
+ m_Installations = existingPaths.Select(path => new CodeEditor.Installation
+ {
+ Name = $"Visual Studio Code Insiders ({path.Substring(lcp.Length)})",
+ Path = path
+ }).ToList();
+
+ break;
+ }
+ }
+ }
+
+#if UNITY_EDITOR_WIN
+ static string GetProgramFiles()
+ {
+ return Environment.GetEnvironmentVariable("ProgramFiles")?.Replace("\\", "/");
+ }
+
+ static string GetLocalAppData()
+ {
+ return Environment.GetEnvironmentVariable("LOCALAPPDATA")?.Replace("\\", "/");
+ }
+#endif
+
+ static string GetLongestCommonPrefix(List paths)
+ {
+ var baseLength = paths.First().Length;
+ for (var pathIndex = 1; pathIndex < paths.Count; pathIndex++)
+ {
+ baseLength = Math.Min(baseLength, paths[pathIndex].Length);
+ for (var i = 0; i < baseLength; i++)
+ {
+ if (paths[pathIndex][i] == paths[0][i]) continue;
+
+ baseLength = i;
+ break;
+ }
+ }
+ return paths[0].Substring(0, baseLength);
+ }
+
+ static bool VSCodeExists(string path)
+ {
+#if UNITY_EDITOR_OSX
+ return System.IO.Directory.Exists(path);
+#else
+ return new FileInfo(path).Exists;
+#endif
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/Editor/VSCodeScriptEditor.cs b/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/Editor/VSCodeScriptEditor.cs
new file mode 100644
index 00000000..87f1b4cd
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/Editor/VSCodeScriptEditor.cs
@@ -0,0 +1,253 @@
+using System;
+using System.IO;
+using System.Linq;
+using System.Diagnostics;
+using UnityEditor;
+using UnityEngine;
+using Unity.CodeEditor;
+
+namespace VSCodeEditor {
+ [InitializeOnLoad]
+ public class VSCodeScriptEditor : IExternalCodeEditor
+ {
+ const string vscode_argument = "vscode_arguments";
+ const string vscode_generate_all = "unity_generate_all_csproj";
+ const string vscode_extension = "vscode_userExtensions";
+ static readonly GUIContent k_ResetArguments = EditorGUIUtility.TrTextContent("Reset argument");
+ string m_Arguments;
+
+ IDiscovery m_Discoverability;
+ IGenerator m_ProjectGeneration;
+
+ static readonly string[] k_SupportedFileNames = { "code.exe", "visualstudiocode.app", "visualstudiocode-insiders.app", "vscode.app", "code.app", "code.cmd", "code-insiders.cmd", "code", "com.visualstudio.code" };
+
+ static bool IsOSX => Application.platform == RuntimePlatform.OSXEditor;
+
+ static string GetDefaultApp => EditorPrefs.GetString("kScriptsDefaultApp");
+
+ static string DefaultArgument { get; } = "\"$(ProjectPath)\" -g \"$(File)\":$(Line):$(Column)";
+ string Arguments
+ {
+ get => m_Arguments ?? (m_Arguments = EditorPrefs.GetString(vscode_argument, DefaultArgument));
+ set
+ {
+ m_Arguments = value;
+ EditorPrefs.SetString(vscode_argument, value);
+ }
+ }
+
+ static string[] defaultExtensions
+ {
+ get
+ {
+ var customExtensions = new[] {"json", "asmdef", "log"};
+ return EditorSettings.projectGenerationBuiltinExtensions
+ .Concat(EditorSettings.projectGenerationUserExtensions)
+ .Concat(customExtensions)
+ .Distinct().ToArray();
+ }
+ }
+
+ static string[] HandledExtensions
+ {
+ get
+ {
+ return HandledExtensionsString
+ .Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries)
+ .Select(s => s.TrimStart('.', '*'))
+ .ToArray();
+ }
+ }
+
+ static string HandledExtensionsString
+ {
+ get => EditorPrefs.GetString(vscode_extension, string.Join(";", defaultExtensions));
+ set => EditorPrefs.SetString(vscode_extension, value);
+ }
+
+ public bool TryGetInstallationForPath(string editorPath, out CodeEditor.Installation installation)
+ {
+ var lowerCasePath = editorPath.ToLower();
+ var filename = Path.GetFileName(lowerCasePath).Replace(" ", "");
+ var installations = Installations;
+ if (!k_SupportedFileNames.Contains(filename))
+ {
+ installation = default;
+ return false;
+ }
+ if (!installations.Any())
+ {
+ installation = new CodeEditor.Installation
+ {
+ Name = "Visual Studio Code",
+ Path = editorPath
+ };
+ }
+ else
+ {
+ try
+ {
+ installation = installations.First(inst => inst.Path == editorPath);
+ }
+ catch (InvalidOperationException)
+ {
+ installation = new CodeEditor.Installation
+ {
+ Name = "Visual Studio Code",
+ Path = editorPath
+ };
+ }
+ }
+
+ return true;
+ }
+
+ public void OnGUI()
+ {
+ Arguments = EditorGUILayout.TextField("External Script Editor Args", Arguments);
+ if (GUILayout.Button(k_ResetArguments, GUILayout.Width(120)))
+ {
+ Arguments = DefaultArgument;
+ }
+ var prevGenerate = EditorPrefs.GetBool(vscode_generate_all, false);
+
+ var generateAll = EditorGUILayout.Toggle("Generate all .csproj files.", prevGenerate);
+ if (generateAll != prevGenerate)
+ {
+ EditorPrefs.SetBool(vscode_generate_all, generateAll);
+ }
+ m_ProjectGeneration.GenerateAll(generateAll);
+
+ HandledExtensionsString = EditorGUILayout.TextField(new GUIContent("Extensions handled: "), HandledExtensionsString);
+ }
+
+ public void CreateIfDoesntExist()
+ {
+ if (!m_ProjectGeneration.HasSolutionBeenGenerated())
+ {
+ m_ProjectGeneration.Sync();
+ }
+ }
+
+ public void SyncIfNeeded(string[] addedFiles, string[] deletedFiles, string[] movedFiles, string[] movedFromFiles, string[] importedFiles)
+ {
+ m_ProjectGeneration.SyncIfNeeded(addedFiles.Union(deletedFiles).Union(movedFiles).Union(movedFromFiles), importedFiles);
+ }
+
+ public void SyncAll()
+ {
+ AssetDatabase.Refresh();
+ m_ProjectGeneration.Sync();
+ }
+
+ public bool OpenProject(string path, int line, int column)
+ {
+ if (path != "" && !SupportsExtension(path)) // Assets - Open C# Project passes empty path here
+ {
+ return false;
+ }
+
+ if (line == -1)
+ line = 1;
+ if (column == -1)
+ column = 0;
+
+ string arguments;
+ if (Arguments != DefaultArgument)
+ {
+ arguments = m_ProjectGeneration.ProjectDirectory != path
+ ? CodeEditor.ParseArgument(Arguments, path, line, column)
+ : m_ProjectGeneration.ProjectDirectory;
+ }
+ else
+ {
+ arguments = $@"""{m_ProjectGeneration.ProjectDirectory}""";
+ if (m_ProjectGeneration.ProjectDirectory != path && path.Length != 0)
+ {
+ arguments += $@" -g ""{path}"":{line}:{column}";
+ }
+ }
+
+ if (IsOSX)
+ {
+ return OpenOSX(arguments);
+ }
+
+ var process = new Process
+ {
+ StartInfo = new ProcessStartInfo
+ {
+ FileName = GetDefaultApp,
+ Arguments = arguments,
+ WindowStyle = ProcessWindowStyle.Hidden,
+ CreateNoWindow = true,
+ UseShellExecute = true,
+ }
+ };
+
+ process.Start();
+ return true;
+ }
+
+ static bool OpenOSX(string arguments)
+ {
+ var process = new Process
+ {
+ StartInfo = new ProcessStartInfo
+ {
+ FileName = "open",
+ Arguments = $"\"{GetDefaultApp}\" --args {arguments}",
+ UseShellExecute = true,
+ }
+ };
+
+ process.Start();
+ return true;
+ }
+
+ static bool SupportsExtension(string path)
+ {
+ var extension = Path.GetExtension(path);
+ if (string.IsNullOrEmpty(extension))
+ return false;
+ return HandledExtensions.Contains(extension.TrimStart('.'));
+ }
+
+ public CodeEditor.Installation[] Installations => m_Discoverability.PathCallback();
+
+ public VSCodeScriptEditor(IDiscovery discovery, IGenerator projectGeneration)
+ {
+ m_Discoverability = discovery;
+ m_ProjectGeneration = projectGeneration;
+ }
+
+ static VSCodeScriptEditor()
+ {
+ var editor = new VSCodeScriptEditor(new VSCodeDiscovery(), new ProjectGeneration());
+ CodeEditor.Register(editor);
+
+ if (IsVSCodeInstallation(CodeEditor.CurrentEditorInstallation))
+ {
+ editor.CreateIfDoesntExist();
+ }
+ }
+
+ static bool IsVSCodeInstallation(string path)
+ {
+ if (string.IsNullOrEmpty(path))
+ {
+ return false;
+ }
+
+ var lowerCasePath = path.ToLower();
+ var filename = Path
+ .GetFileName(lowerCasePath.Replace('\\', Path.DirectorySeparatorChar).Replace('/', Path.DirectorySeparatorChar))
+ .Replace(" ", "");
+ return k_SupportedFileNames.Contains(filename);
+ }
+
+ public void Initialize(string editorInstallationPath)
+ {
+ }
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/LICENSE.md b/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/LICENSE.md
new file mode 100644
index 00000000..eb18dfb7
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/LICENSE.md
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 Unity Technologies
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/package.json b/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/package.json
new file mode 100644
index 00000000..2972856c
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.ide.vscode@1.1.0/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "com.unity.ide.vscode",
+ "displayName": "Visual Studio Code Editor",
+ "description": "Code editor integration for supporting Visual Studio Code as code editor for unity. Adds support for generating csproj files for intellisense purposes, auto discovery of installations, etc.",
+ "version": "1.1.0",
+ "unity": "2019.2",
+ "unityRelease": "0a12",
+ "dependencies": {},
+ "relatedPackages": {
+ "com.unity.ide.vscode.tests": "1.0.4"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git@github.cds.internal.unity3d.com:unity/com.unity.ide.vscode.git",
+ "revision": "be12768c09e4711e6d38ba647df27fac67dbfd1f"
+ }
+}
diff --git a/KerbalVR/Library/PackageCache/com.unity.multiplayer-hlapi@1.0.2/CHANGELOG.md b/KerbalVR/Library/PackageCache/com.unity.multiplayer-hlapi@1.0.2/CHANGELOG.md
new file mode 100644
index 00000000..951b9b8d
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.multiplayer-hlapi@1.0.2/CHANGELOG.md
@@ -0,0 +1,55 @@
+# Changelog
+
+## [1.0.2] - 2019-03-18
+
+### Changed
+- Fixed issue with population of Syncvar variable on a class derived from a networkbehaviour base class (case 1066429)
+- Fixed issue with IsDynamic not working on .net 3.5 profile (use something else)]
+- Fixed file lock error when building under certain conditions (case 1115492)
+
+## [1.0.1] - 2019-02-14
+
+### Changed
+- Disabled warnings around the usage of the 'new' keyword in the NetworkTransform, it's needed sometimes but can trigger when building (likely because of stripping) and the warning messed with CI/automation
+
+## [1.0.0] - 2019-02-13
+
+### Changed
+- Only updating version to 1.0.0 to reflect the status of the package
+
+## [0.2.6-preview] - 2019-02-13
+
+### Changed
+- Got rid of all warnings generated when the package is built, so it's CI/automation friendly
+- Readme updated
+
+## [0.2.5-preview] - 2019-01-29
+
+### Changed
+- Fixed Syncvar variable update issue. Modify both the writing and reading syncvar data as per channel. (Fixed cases 1110031, 1111442 and 1117258)
+
+## [0.2.4-preview] - 2019-01-11
+
+### Changed
+- Fixed issue with assembly dependencies not being found by the weaver during certain conditions (like when doing full reimport).
+
+### Added
+- Added API documentation, migrated from unity source repo, only some formatting changes, text itself unchanged.
+
+## [0.2.3-preview] - 2018-12-17
+
+### This is the first release of the *Unity Multiplayer HLAPI \*.
+
+Initial release of the Unity Multiplayer HLAPI (or UNet HLAPI) moved into a package. This will
+work with Unity 2019.1.0a12 and onwards.
+
+This was previously an extension DLL but the layout has been moved from the extension style to a package format. Also all
+parts which existed in the Unity engine (native code) have been moved out and utilize public API instead. Mostly
+this involved
+- Update bump is now created with a hidden game object, instead of registering in the player loop internally
+- Domain reloads are detected with public APIs
+- Weaver invocation (used for code generation) registers with the compiliation pipeline API and receives callbacks
+ every time compilation finishes so it can parse the DLLs.
+- Profiler panel functionality was made possible by making some internal APIs puplic for now.
+
+Also, some runtime tests have been moved to the package as playmode tests.
\ No newline at end of file
diff --git a/KerbalVR/Library/PackageCache/com.unity.multiplayer-hlapi@1.0.2/Editor/NetworkAnimatorEditor.cs b/KerbalVR/Library/PackageCache/com.unity.multiplayer-hlapi@1.0.2/Editor/NetworkAnimatorEditor.cs
new file mode 100644
index 00000000..e5383bdf
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.multiplayer-hlapi@1.0.2/Editor/NetworkAnimatorEditor.cs
@@ -0,0 +1,97 @@
+#if ENABLE_UNET
+using System;
+using UnityEditor.Animations;
+using UnityEngine;
+using UnityEngine.Networking;
+
+namespace UnityEditor
+{
+ [CustomEditor(typeof(NetworkAnimator), true)]
+ [CanEditMultipleObjects]
+ [Obsolete("The high level API classes are deprecated and will be removed in the future.")]
+ public class NetworkAnimatorEditor : Editor
+ {
+ NetworkAnimator m_AnimSync;
+ [NonSerialized] bool m_Initialized;
+
+ SerializedProperty m_AnimatorProperty;
+ GUIContent m_AnimatorLabel;
+
+ void Init()
+ {
+ if (m_Initialized)
+ return;
+
+ m_Initialized = true;
+ m_AnimSync = target as NetworkAnimator;
+
+ m_AnimatorProperty = serializedObject.FindProperty("m_Animator");
+ m_AnimatorLabel = TextUtility.TextContent("Animator", "The Animator component to synchronize.");
+ }
+
+ public override void OnInspectorGUI()
+ {
+ Init();
+ serializedObject.Update();
+ DrawControls();
+ serializedObject.ApplyModifiedProperties();
+ }
+
+ void DrawControls()
+ {
+ EditorGUI.BeginChangeCheck();
+ EditorGUILayout.PropertyField(m_AnimatorProperty, m_AnimatorLabel);
+ if (EditorGUI.EndChangeCheck())
+ {
+ m_AnimSync.ResetParameterOptions();
+ }
+
+ if (m_AnimSync.animator == null)
+ return;
+
+ var controller = m_AnimSync.animator.runtimeAnimatorController as AnimatorController;
+ if (controller != null)
+ {
+ var showWarning = false;
+ EditorGUI.indentLevel += 1;
+ int i = 0;
+
+ foreach (var p in controller.parameters)
+ {
+ if (i >= 32)
+ {
+ showWarning = true;
+ break;
+ }
+
+ bool oldSend = m_AnimSync.GetParameterAutoSend(i);
+ bool send = EditorGUILayout.Toggle(p.name, oldSend);
+ if (send != oldSend)
+ {
+ m_AnimSync.SetParameterAutoSend(i, send);
+ EditorUtility.SetDirty(target);
+ }
+ i += 1;
+ }
+
+ if (showWarning)
+ {
+ EditorGUILayout.HelpBox("NetworkAnimator can only select between the first 32 parameters in a mecanim controller", MessageType.Warning);
+ }
+
+ EditorGUI.indentLevel -= 1;
+ }
+
+ if (Application.isPlaying)
+ {
+ EditorGUILayout.Separator();
+ if (m_AnimSync.param0 != "") EditorGUILayout.LabelField("Param 0", m_AnimSync.param0);
+ if (m_AnimSync.param1 != "") EditorGUILayout.LabelField("Param 1", m_AnimSync.param1);
+ if (m_AnimSync.param2 != "") EditorGUILayout.LabelField("Param 2", m_AnimSync.param2);
+ if (m_AnimSync.param3 != "") EditorGUILayout.LabelField("Param 3", m_AnimSync.param3);
+ if (m_AnimSync.param4 != "") EditorGUILayout.LabelField("Param 4", m_AnimSync.param4);
+ }
+ }
+ }
+}
+#endif
diff --git a/KerbalVR/Library/PackageCache/com.unity.multiplayer-hlapi@1.0.2/Editor/NetworkBehaviourInspector.cs b/KerbalVR/Library/PackageCache/com.unity.multiplayer-hlapi@1.0.2/Editor/NetworkBehaviourInspector.cs
new file mode 100644
index 00000000..064d7c0b
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.multiplayer-hlapi@1.0.2/Editor/NetworkBehaviourInspector.cs
@@ -0,0 +1,177 @@
+#if ENABLE_UNET
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Reflection;
+using UnityEngine;
+using UnityEngine.Networking;
+
+namespace UnityEditor
+{
+ [CustomEditor(typeof(NetworkBehaviour), true)]
+ [CanEditMultipleObjects]
+ [Obsolete("The high level API classes are deprecated and will be removed in the future.")]
+ public class NetworkBehaviourInspector : Editor
+ {
+ bool m_Initialized;
+ protected List m_SyncVarNames = new List();
+ Type m_ScriptClass;
+ bool m_HasOnSerialize;
+ bool[] m_ShowSyncLists;
+
+ GUIContent m_SyncVarIndicatorContent;
+ protected GUIContent m_NetworkChannelLabel;
+ protected GUIContent m_NetworkSendIntervalLabel;
+
+ internal virtual bool hideScriptField
+ {
+ get { return false; }
+ }
+
+ void Init(MonoScript script)
+ {
+ m_Initialized = true;
+ m_ScriptClass = script.GetClass();
+
+ m_SyncVarIndicatorContent = TextUtility.TextContent("SyncVar", "This variable has been marked with the [SyncVar] attribute.");
+ m_NetworkChannelLabel = TextUtility.TextContent("Network Channel", "QoS channel used for updates. Use the [NetworkSettings] class attribute to change this.");
+ m_NetworkSendIntervalLabel = TextUtility.TextContent("Network Send Interval", "Maximum update rate in seconds. Use the [NetworkSettings] class attribute to change this, or implement GetNetworkSendInterval");
+
+ foreach (var field in m_ScriptClass.GetFields(BindingFlags.Public | BindingFlags.Instance))
+ {
+ Attribute[] fieldMarkers = (Attribute[])field.GetCustomAttributes(typeof(SyncVarAttribute), true);
+ if (fieldMarkers.Length > 0)
+ {
+ m_SyncVarNames.Add(field.Name);
+ }
+ }
+ var meth = script.GetClass().GetMethod("OnSerialize");
+ if (meth != null)
+ {
+ if (meth.DeclaringType != typeof(NetworkBehaviour))
+ {
+ m_HasOnSerialize = true;
+ }
+ }
+
+ int numSyncLists = 0;
+ foreach (var f in serializedObject.targetObject.GetType().GetFields())
+ {
+ if (f.FieldType.BaseType != null && f.FieldType.BaseType.Name.Contains("SyncList"))
+ {
+ numSyncLists += 1;
+ }
+ }
+ if (numSyncLists > 0)
+ {
+ m_ShowSyncLists = new bool[numSyncLists];
+ }
+ }
+
+ public override void OnInspectorGUI()
+ {
+ if (!m_Initialized)
+ {
+ serializedObject.Update();
+ SerializedProperty scriptProperty = serializedObject.FindProperty("m_Script");
+ if (scriptProperty == null)
+ return;
+
+ MonoScript targetScript = scriptProperty.objectReferenceValue as MonoScript;
+ Init(targetScript);
+ }
+
+ EditorGUI.BeginChangeCheck();
+ serializedObject.Update();
+
+ // Loop through properties and create one field (including children) for each top level property.
+ SerializedProperty property = serializedObject.GetIterator();
+ bool expanded = true;
+ while (property.NextVisible(expanded))
+ {
+ bool isSyncVar = m_SyncVarNames.Contains(property.name);
+ if (property.propertyType == SerializedPropertyType.ObjectReference)
+ {
+ if (property.name == "m_Script")
+ {
+ if (hideScriptField)
+ {
+ continue;
+ }
+
+ EditorGUI.BeginDisabledGroup(true);
+ }
+
+ EditorGUILayout.PropertyField(property, true);
+
+ if (isSyncVar)
+ {
+ GUILayout.Label(m_SyncVarIndicatorContent, EditorStyles.miniLabel, GUILayout.Width(EditorStyles.miniLabel.CalcSize(m_SyncVarIndicatorContent).x));
+ }
+
+ if (property.name == "m_Script")
+ {
+ EditorGUI.EndDisabledGroup();
+ }
+ }
+ else
+ {
+ EditorGUILayout.BeginHorizontal();
+
+ EditorGUILayout.PropertyField(property, true);
+
+ if (isSyncVar)
+ {
+ GUILayout.Label(m_SyncVarIndicatorContent, EditorStyles.miniLabel, GUILayout.Width(EditorStyles.miniLabel.CalcSize(m_SyncVarIndicatorContent).x));
+ }
+
+ EditorGUILayout.EndHorizontal();
+ }
+ expanded = false;
+ }
+ serializedObject.ApplyModifiedProperties();
+ EditorGUI.EndChangeCheck();
+
+ // find SyncLists.. they are not properties.
+ int syncListIndex = 0;
+ foreach (var field in serializedObject.targetObject.GetType().GetFields())
+ {
+ if (field.FieldType.BaseType != null && field.FieldType.BaseType.Name.Contains("SyncList"))
+ {
+ m_ShowSyncLists[syncListIndex] = EditorGUILayout.Foldout(m_ShowSyncLists[syncListIndex], "SyncList " + field.Name + " [" + field.FieldType.Name + "]");
+ if (m_ShowSyncLists[syncListIndex])
+ {
+ EditorGUI.indentLevel += 1;
+ var synclist = field.GetValue(serializedObject.targetObject) as IEnumerable;
+ if (synclist != null)
+ {
+ int index = 0;
+ var enu = synclist.GetEnumerator();
+ while (enu.MoveNext())
+ {
+ if (enu.Current != null)
+ {
+ EditorGUILayout.LabelField("Item:" + index, enu.Current.ToString());
+ }
+ index += 1;
+ }
+ }
+ EditorGUI.indentLevel -= 1;
+ }
+ syncListIndex += 1;
+ }
+ }
+
+ if (m_HasOnSerialize)
+ {
+ var beh = target as NetworkBehaviour;
+ if (beh != null)
+ {
+ EditorGUILayout.LabelField(m_NetworkChannelLabel, new GUIContent(beh.GetNetworkChannel().ToString()));
+ EditorGUILayout.LabelField(m_NetworkSendIntervalLabel, new GUIContent(beh.GetNetworkSendInterval().ToString()));
+ }
+ }
+ }
+ }
+} //namespace
+#endif //ENABLE_UNET
diff --git a/KerbalVR/Library/PackageCache/com.unity.multiplayer-hlapi@1.0.2/Editor/NetworkDiscoveryEditor.cs b/KerbalVR/Library/PackageCache/com.unity.multiplayer-hlapi@1.0.2/Editor/NetworkDiscoveryEditor.cs
new file mode 100644
index 00000000..bd2e6f3a
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.multiplayer-hlapi@1.0.2/Editor/NetworkDiscoveryEditor.cs
@@ -0,0 +1,134 @@
+#if ENABLE_UNET
+using System;
+using UnityEngine;
+using UnityEngine.Networking;
+
+#pragma warning disable 618
+namespace UnityEditor
+{
+ [CustomEditor(typeof(NetworkDiscovery), true)]
+ [CanEditMultipleObjects]
+ public class NetworkDiscoveryEditor : Editor
+ {
+ bool m_Initialized;
+ NetworkDiscovery m_Discovery;
+
+ SerializedProperty m_BroadcastPortProperty;
+ SerializedProperty m_BroadcastKeyProperty;
+ SerializedProperty m_BroadcastVersionProperty;
+ SerializedProperty m_BroadcastSubVersionProperty;
+ SerializedProperty m_BroadcastIntervalProperty;
+ SerializedProperty m_UseNetworkManagerProperty;
+ SerializedProperty m_BroadcastDataProperty;
+ SerializedProperty m_ShowGUIProperty;
+ SerializedProperty m_OffsetXProperty;
+ SerializedProperty m_OffsetYProperty;
+
+ GUIContent m_BroadcastPortLabel;
+ GUIContent m_BroadcastKeyLabel;
+ GUIContent m_BroadcastVersionLabel;
+ GUIContent m_BroadcastSubVersionLabel;
+ GUIContent m_BroadcastIntervalLabel;
+ GUIContent m_UseNetworkManagerLabel;
+ GUIContent m_BroadcastDataLabel;
+ GUIContent m_ShowGUILabel;
+ GUIContent m_OffsetXLabel;
+ GUIContent m_OffsetYLabel;
+
+ void Init()
+ {
+ if (m_Initialized)
+ {
+ if (m_BroadcastPortProperty == null)
+ {
+ // need to re-init
+ }
+ else
+ {
+ return;
+ }
+ }
+
+ m_Initialized = true;
+ m_Discovery = target as NetworkDiscovery;
+
+ m_BroadcastPortProperty = serializedObject.FindProperty("m_BroadcastPort");
+ m_BroadcastKeyProperty = serializedObject.FindProperty("m_BroadcastKey");
+ m_BroadcastVersionProperty = serializedObject.FindProperty("m_BroadcastVersion");
+ m_BroadcastSubVersionProperty = serializedObject.FindProperty("m_BroadcastSubVersion");
+ m_BroadcastIntervalProperty = serializedObject.FindProperty("m_BroadcastInterval");
+ m_UseNetworkManagerProperty = serializedObject.FindProperty("m_UseNetworkManager");
+ m_BroadcastDataProperty = serializedObject.FindProperty("m_BroadcastData");
+ m_ShowGUIProperty = serializedObject.FindProperty("m_ShowGUI");
+ m_OffsetXProperty = serializedObject.FindProperty("m_OffsetX");
+ m_OffsetYProperty = serializedObject.FindProperty("m_OffsetY");
+
+ m_BroadcastPortLabel = TextUtility.TextContent("Broadcast Port", "The network port to broadcast to, and listen on.");
+ m_BroadcastKeyLabel = TextUtility.TextContent("Broadcast Key", "The key to broadcast. This key typically identifies the application.");
+ m_BroadcastVersionLabel = TextUtility.TextContent("Broadcast Version", "The version of the application to broadcast. This is used to match versions of the same application.");
+ m_BroadcastSubVersionLabel = TextUtility.TextContent("Broadcast SubVersion", "The sub-version of the application to broadcast.");
+ m_BroadcastIntervalLabel = TextUtility.TextContent("Broadcast Interval", "How often in milliseconds to broadcast when running as a server.");
+ m_UseNetworkManagerLabel = TextUtility.TextContent("Use NetworkManager", "Broadcast information from the NetworkManager, and auto-join matching games using the NetworkManager.");
+ m_BroadcastDataLabel = TextUtility.TextContent("Broadcast Data", "The data to broadcast when not using the NetworkManager");
+ m_ShowGUILabel = TextUtility.TextContent("Show GUI", "Enable to draw the default broadcast control UI.");
+ m_OffsetXLabel = TextUtility.TextContent("Offset X", "The horizonal offset of the GUI.");
+ m_OffsetYLabel = TextUtility.TextContent("Offset Y", "The vertical offset of the GUI.");
+ }
+
+ public override void OnInspectorGUI()
+ {
+ Init();
+ serializedObject.Update();
+ DrawControls();
+ serializedObject.ApplyModifiedProperties();
+ }
+
+ void DrawControls()
+ {
+ if (m_Discovery == null)
+ return;
+
+ EditorGUI.BeginChangeCheck();
+
+ EditorGUILayout.PropertyField(m_BroadcastPortProperty, m_BroadcastPortLabel);
+
+ EditorGUILayout.PropertyField(m_BroadcastKeyProperty, m_BroadcastKeyLabel);
+ EditorGUILayout.PropertyField(m_BroadcastVersionProperty, m_BroadcastVersionLabel);
+ EditorGUILayout.PropertyField(m_BroadcastSubVersionProperty, m_BroadcastSubVersionLabel);
+ EditorGUILayout.PropertyField(m_BroadcastIntervalProperty, m_BroadcastIntervalLabel);
+ EditorGUILayout.PropertyField(m_UseNetworkManagerProperty, m_UseNetworkManagerLabel);
+ if (m_Discovery.useNetworkManager)
+ {
+ EditorGUILayout.LabelField(m_BroadcastDataLabel, new GUIContent(m_BroadcastDataProperty.stringValue));
+ }
+ else
+ {
+ EditorGUILayout.PropertyField(m_BroadcastDataProperty, m_BroadcastDataLabel);
+ }
+
+ EditorGUILayout.Separator();
+ EditorGUILayout.PropertyField(m_ShowGUIProperty, m_ShowGUILabel);
+ if (m_Discovery.showGUI)
+ {
+ EditorGUILayout.PropertyField(m_OffsetXProperty, m_OffsetXLabel);
+ EditorGUILayout.PropertyField(m_OffsetYProperty, m_OffsetYLabel);
+ }
+
+ if (EditorGUI.EndChangeCheck())
+ {
+ serializedObject.ApplyModifiedProperties();
+ }
+
+ if (Application.isPlaying)
+ {
+ EditorGUILayout.Separator();
+ EditorGUILayout.LabelField("hostId", m_Discovery.hostId.ToString());
+ EditorGUILayout.LabelField("running", m_Discovery.running.ToString());
+ EditorGUILayout.LabelField("isServer", m_Discovery.isServer.ToString());
+ EditorGUILayout.LabelField("isClient", m_Discovery.isClient.ToString());
+ }
+ }
+ }
+}
+#pragma warning restore 618
+#endif
diff --git a/KerbalVR/Library/PackageCache/com.unity.multiplayer-hlapi@1.0.2/Editor/NetworkIdentityEditor.cs b/KerbalVR/Library/PackageCache/com.unity.multiplayer-hlapi@1.0.2/Editor/NetworkIdentityEditor.cs
new file mode 100644
index 00000000..5fb517e7
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.multiplayer-hlapi@1.0.2/Editor/NetworkIdentityEditor.cs
@@ -0,0 +1,122 @@
+#if ENABLE_UNET
+using System;
+using UnityEngine;
+using UnityEngine.Networking;
+
+namespace UnityEditor
+{
+ [CustomEditor(typeof(NetworkIdentity), true)]
+ [CanEditMultipleObjects]
+ [Obsolete("The high level API classes are deprecated and will be removed in the future.")]
+ public class NetworkIdentityEditor : Editor
+ {
+ SerializedProperty m_ServerOnlyProperty;
+ SerializedProperty m_LocalPlayerAuthorityProperty;
+
+ GUIContent m_ServerOnlyLabel;
+ GUIContent m_LocalPlayerAuthorityLabel;
+ GUIContent m_SpawnLabel;
+
+ NetworkIdentity m_NetworkIdentity;
+ bool m_Initialized;
+ bool m_ShowObservers;
+
+ void Init()
+ {
+ if (m_Initialized)
+ {
+ return;
+ }
+ m_Initialized = true;
+ m_NetworkIdentity = target as NetworkIdentity;
+
+ m_ServerOnlyProperty = serializedObject.FindProperty("m_ServerOnly");
+ m_LocalPlayerAuthorityProperty = serializedObject.FindProperty("m_LocalPlayerAuthority");
+
+ m_ServerOnlyLabel = TextUtility.TextContent("Server Only", "True if the object should only exist on the server.");
+ m_LocalPlayerAuthorityLabel = TextUtility.TextContent("Local Player Authority", "True if this object will be controlled by a player on a client.");
+ m_SpawnLabel = TextUtility.TextContent("Spawn Object", "This causes an unspawned server object to be spawned on clients");
+ }
+
+ public override void OnInspectorGUI()
+ {
+ if (m_ServerOnlyProperty == null)
+ {
+ m_Initialized = false;
+ }
+
+ Init();
+
+ serializedObject.Update();
+
+ if (m_ServerOnlyProperty.boolValue)
+ {
+ EditorGUILayout.PropertyField(m_ServerOnlyProperty, m_ServerOnlyLabel);
+ EditorGUILayout.LabelField("Local Player Authority cannot be set for server-only objects");
+ }
+ else if (m_LocalPlayerAuthorityProperty.boolValue)
+ {
+ EditorGUILayout.LabelField("Server Only cannot be set for Local Player Authority objects");
+ EditorGUILayout.PropertyField(m_LocalPlayerAuthorityProperty, m_LocalPlayerAuthorityLabel);
+ }
+ else
+ {
+ EditorGUILayout.PropertyField(m_ServerOnlyProperty, m_ServerOnlyLabel);
+ EditorGUILayout.PropertyField(m_LocalPlayerAuthorityProperty, m_LocalPlayerAuthorityLabel);
+ }
+
+ serializedObject.ApplyModifiedProperties();
+
+ if (!Application.isPlaying)
+ {
+ return;
+ }
+
+ // Runtime actions below here
+
+ EditorGUILayout.Separator();
+
+ if (m_NetworkIdentity.observers != null && m_NetworkIdentity.observers.Count > 0)
+ {
+ m_ShowObservers = EditorGUILayout.Foldout(m_ShowObservers, "Observers");
+ if (m_ShowObservers)
+ {
+ EditorGUI.indentLevel += 1;
+ foreach (var o in m_NetworkIdentity.observers)
+ {
+ GameObject obj = null;
+ foreach (var p in o.playerControllers)
+ {
+ if (p != null)
+ {
+ obj = p.gameObject;
+ break;
+ }
+ }
+ if (obj)
+ EditorGUILayout.ObjectField("Connection " + o.connectionId, obj, typeof(GameObject), false);
+ else
+ EditorGUILayout.TextField("Connection " + o.connectionId);
+ }
+ EditorGUI.indentLevel -= 1;
+ }
+ }
+
+ if (PrefabUtility.IsPartOfPrefabAsset(m_NetworkIdentity.gameObject))
+ return;
+
+ if (m_NetworkIdentity.gameObject.activeSelf && m_NetworkIdentity.netId.IsEmpty() && NetworkServer.active)
+ {
+ EditorGUILayout.BeginHorizontal();
+ EditorGUILayout.LabelField(m_SpawnLabel);
+ if (GUILayout.Toggle(false, "Spawn", EditorStyles.miniButtonLeft))
+ {
+ NetworkServer.Spawn(m_NetworkIdentity.gameObject);
+ EditorUtility.SetDirty(target); // preview window STILL doens't update immediately..
+ }
+ EditorGUILayout.EndHorizontal();
+ }
+ }
+ }
+}
+#endif //ENABLE_UNET
diff --git a/KerbalVR/Library/PackageCache/com.unity.multiplayer-hlapi@1.0.2/Editor/NetworkInformationPreview.cs b/KerbalVR/Library/PackageCache/com.unity.multiplayer-hlapi@1.0.2/Editor/NetworkInformationPreview.cs
new file mode 100644
index 00000000..08453082
--- /dev/null
+++ b/KerbalVR/Library/PackageCache/com.unity.multiplayer-hlapi@1.0.2/Editor/NetworkInformationPreview.cs
@@ -0,0 +1,286 @@
+#if ENABLE_UNET
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.Networking;
+using UnityObject = UnityEngine.Object;
+
+#pragma warning disable 618
+namespace UnityEditor.Networking
+{
+ [CustomPreview(typeof(GameObject))]
+ class NetworkInformationPreview : ObjectPreview
+ {
+ class NetworkIdentityInfo
+ {
+ public GUIContent name;
+ public GUIContent value;
+ }
+
+ class NetworkBehaviourInfo
+ {
+ // This is here just so we can check if it's enabled/disabled
+ public NetworkBehaviour behaviour;
+ public GUIContent name;
+ }
+
+ class Styles
+ {
+ public GUIStyle labelStyle = new GUIStyle(EditorStyles.label);
+ public GUIStyle componentName = new GUIStyle(EditorStyles.boldLabel);
+ public GUIStyle disabledName = new GUIStyle(EditorStyles.miniLabel);
+
+ public Styles()
+ {
+ Color fontColor = new Color(0.7f, 0.7f, 0.7f);
+ labelStyle.padding.right += 20;
+ labelStyle.normal.textColor = fontColor;
+ labelStyle.active.textColor = fontColor;
+ labelStyle.focused.textColor = fontColor;
+ labelStyle.hover.textColor = fontColor;
+ labelStyle.onNormal.textColor = fontColor;
+ labelStyle.onActive.textColor = fontColor;
+ labelStyle.onFocused.textColor = fontColor;
+ labelStyle.onHover.textColor = fontColor;
+
+ componentName.normal.textColor = fontColor;
+ componentName.active.textColor = fontColor;
+ componentName.focused.textColor = fontColor;
+ componentName.hover.textColor = fontColor;
+ componentName.onNormal.textColor = fontColor;
+ componentName.onActive.textColor = fontColor;
+ componentName.onFocused.textColor = fontColor;
+ componentName.onHover.textColor = fontColor;
+
+ disabledName.normal.textColor = fontColor;
+ disabledName.active.textColor = fontColor;
+ disabledName.focused.textColor = fontColor;
+ disabledName.hover.textColor = fontColor;
+ disabledName.onNormal.textColor = fontColor;
+ disabledName.onActive.textColor = fontColor;
+ disabledName.onFocused.textColor = fontColor;
+ disabledName.onHover.textColor = fontColor;
+ }
+ }
+
+ List m_Info;
+ List m_Behaviours;
+ NetworkIdentity m_Identity;
+ GUIContent m_Title;
+ Styles m_Styles = new Styles();
+
+ public override void Initialize(UnityObject[] targets)
+ {
+ base.Initialize(targets);
+ GetNetworkInformation(target as GameObject);
+ }
+
+ public override GUIContent GetPreviewTitle()
+ {
+ if (m_Title == null)
+ {
+ m_Title = TextUtility.TextContent("Network Information");
+ }
+ return m_Title;
+ }
+
+ public override bool HasPreviewGUI()
+ {
+ return m_Info != null && m_Info.Count > 0;
+ }
+
+ public override void OnPreviewGUI(Rect r, GUIStyle background)
+ {
+ if (Event.current.type != EventType.Repaint)
+ return;
+
+ if (m_Info == null || m_Info.Count == 0)
+ return;
+
+ if (m_Styles == null)
+ m_Styles = new Styles();
+
+ // Get required label size for the names of the information values we're going to show
+ // There are two columns, one with label for the name of the info and the next for the value
+ Vector2 maxNameLabelSize = new Vector2(140, 16);
+ Vector2 maxValueLabelSize = GetMaxNameLabelSize();
+
+ //Apply padding
+ RectOffset previewPadding = new RectOffset(-5, -5, -5, -5);
+ r = previewPadding.Add(r);
+
+ //Centering
+ float initialX = r.x + 10;
+ float initialY = r.y + 10;
+
+ Rect labelRect = new Rect(initialX, initialY, maxNameLabelSize.x, maxNameLabelSize.y);
+ Rect idLabelRect = new Rect(maxNameLabelSize.x, initialY, maxValueLabelSize.x, maxValueLabelSize.y);
+
+ foreach (var info in m_Info)
+ {
+ GUI.Label(labelRect, info.name, m_Styles.labelStyle);
+ GUI.Label(idLabelRect, info.value, m_Styles.componentName);
+ labelRect.y += labelRect.height;
+ labelRect.x = initialX;
+ idLabelRect.y += idLabelRect.height;
+ }
+
+ // Show behaviours list in a different way than the name/value pairs above
+ float lastY = labelRect.y;
+ if (m_Behaviours != null && m_Behaviours.Count > 0)
+ {
+ Vector2 maxBehaviourLabelSize = GetMaxBehaviourLabelSize();
+ Rect behaviourRect = new Rect(initialX, labelRect.y + 10, maxBehaviourLabelSize.x, maxBehaviourLabelSize.y);
+
+ GUI.Label(behaviourRect, TextUtility.TextContent("Network Behaviours"), m_Styles.labelStyle);
+ behaviourRect.x += 20; // indent names
+ behaviourRect.y += behaviourRect.height;
+
+ foreach (var info in m_Behaviours)
+ {
+ if (info.behaviour == null)
+ {
+ // could be the case in the editor after existing play mode.
+ continue;
+ }
+ if (info.behaviour.enabled)
+ {
+ GUI.Label(behaviourRect, info.name, m_Styles.componentName);
+ }
+ else
+ {
+ GUI.Label(behaviourRect, info.name, m_Styles.disabledName);
+ }
+ behaviourRect.y += behaviourRect.height;
+ lastY = behaviourRect.y;
+ }
+
+ if (m_Identity.observers != null && m_Identity.observers.Count > 0)
+ {
+ Rect observerRect = new Rect(initialX, lastY + 10, 200, 20);
+
+ GUI.Label(observerRect, TextUtility.TextContent("Network observers"), m_Styles.labelStyle);
+ observerRect.x += 20; // indent names
+ observerRect.y += observerRect.height;
+
+ foreach (var info in m_Identity.observers)
+ {
+ GUI.Label(observerRect, info.address + ":" + info.connectionId, m_Styles.componentName);
+ observerRect.y += observerRect.height;
+ lastY = observerRect.y;
+ }
+ }
+
+ if (m_Identity.clientAuthorityOwner != null)
+ {
+ Rect ownerRect = new Rect(initialX, lastY + 10, 400, 20);
+ GUI.Label(ownerRect, TextUtility.TextContent("Client Authority: " + m_Identity.clientAuthorityOwner), m_Styles.labelStyle);
+ }
+ }
+ }
+
+ // Get the maximum size used by the value of information items
+ Vector2 GetMaxNameLabelSize()
+ {
+ Vector2 maxLabelSize = Vector2.zero;
+ foreach (var info in m_Info)
+ {
+ Vector2 labelSize = m_Styles.labelStyle.CalcSize(info.value);
+ if (maxLabelSize.x < labelSize.x)
+ {
+ maxLabelSize.x = labelSize.x;
+ }
+ if (maxLabelSize.y < labelSize.y)
+ {
+ maxLabelSize.y = labelSize.y;
+ }
+ }
+ return maxLabelSize;
+ }
+
+ Vector2 GetMaxBehaviourLabelSize()
+ {
+ Vector2 maxLabelSize = Vector2.zero;
+ foreach (var behaviour in m_Behaviours)
+ {
+ Vector2 labelSize = m_Styles.labelStyle.CalcSize(behaviour.name);
+ if (maxLabelSize.x < labelSize.x)
+ {
+ maxLabelSize.x = labelSize.x;
+ }
+ if (maxLabelSize.y < labelSize.y)
+ {
+ maxLabelSize.y = labelSize.y;
+ }
+ }
+ return maxLabelSize;
+ }
+
+ void GetNetworkInformation(GameObject gameObject)
+ {
+ m_Identity = gameObject.GetComponent();
+ if (m_Identity != null)
+ {
+ m_Info = new List();
+
+ m_Info.Add(GetAssetId());
+ m_Info.Add(GetString("Scene ID", m_Identity.sceneId.ToString()));
+
+ if (!Application.isPlaying)
+ {
+ return;
+ }
+
+ m_Info.Add(GetString("Network ID", m_Identity.netId.ToString()));
+
+ m_Info.Add(GetString("Player Controller ID", m_Identity.playerControllerId.ToString()));
+
+ m_Info.Add(GetBoolean("Is Client", m_Identity.isClient));
+ m_Info.Add(GetBoolean("Is Server", m_Identity.isServer));
+ m_Info.Add(GetBoolean("Has Authority", m_Identity.hasAuthority));
+ m_Info.Add(GetBoolean("Is Local Player", m_Identity.isLocalPlayer));
+
+ NetworkBehaviour[] behaviours = gameObject.GetComponents();
+ if (behaviours.Length > 0)
+ {
+ m_Behaviours = new List();
+ foreach (var behaviour in behaviours)
+ {
+ NetworkBehaviourInfo info = new NetworkBehaviourInfo();
+ info.name = new GUIContent(behaviour.GetType().FullName);
+ info.behaviour = behaviour;
+ m_Behaviours.Add(info);
+ }
+ }
+ }
+ }
+
+ NetworkIdentityInfo GetAssetId()
+ {
+ string assetId = m_Identity.assetId.ToString();
+ if (string.IsNullOrEmpty(assetId))
+ {
+ assetId = "