Skip to content

Commit ef792db

Browse files
author
Stewart Miles
committed
Refactored ProjectSettings to make it easier to use in tests.
- Changed Logger class to disable Unity logging in unit tests. - Refactored ProjectSettings into classes that implement ISettings which conforms to Unity's EditorPrefs. ISettings can then be mocked out with an in-memory implementation that doesn't touch the Unity DLL in unit tests. - Added unit test for ProjectSettings. Bug: 112723334 Change-Id: Id4e6aaf8edf82f726a5efc602163e7ea0d8e95f7
1 parent e48dd9b commit ef792db

File tree

7 files changed

+1082
-179
lines changed

7 files changed

+1082
-179
lines changed

build.gradle

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
* Gradle file to build the Jar Resolver Unity plugin.
33
*/
44
buildscript {
5-
repositories {
6-
jcenter()
7-
mavenLocal()
8-
}
5+
repositories {
6+
jcenter()
7+
mavenLocal()
8+
}
99
}
1010

1111
/*
@@ -772,6 +772,7 @@ Task createNUnitTask(String name, String description, File testDll,
772772
type: Exec,
773773
dependsOn: dependsOn).with {
774774
workingDir project.ext.pluginSourceDir
775+
inputs.files testDll
775776
outputs.files logFile
776777
executable project.ext.nunitConsoleExe
777778
args ([sprintf("-output:%s", logFile.absolutePath),
@@ -1309,6 +1310,28 @@ task gitTagRelease(type: Exec) {
13091310
// - Project export
13101311
// - Add a pod which changes the target SDK
13111312

1313+
Task compileVersionHandlerImplTests = createXbuildTask(
1314+
"compileVersionHandlerImplTests",
1315+
"Compile tests for VersionHandlerImpl.",
1316+
project.ext.pluginSolutionFile, "VersionHandlerImplTests",
1317+
fileTree(new File(
1318+
new File(
1319+
new File(project.ext.pluginSourceDir,
1320+
"VersionHandlerImpl"),
1321+
"unit_tests"),
1322+
"src")),
1323+
new File(project.ext.testDir, "VersionHandlerImplTests"),
1324+
[new File("Google.VersionHandlerImplTests.dll")], []).with {
1325+
doFirst { checkNUnitDllPath() }
1326+
}
1327+
1328+
createNUnitTask(
1329+
"testVersionHandlerImpl",
1330+
"Runs tests for the VersionHandlerImpl module",
1331+
compileVersionHandlerImplTests.outputs.files[0],
1332+
[compileVersionHandlerImplTests])
1333+
1334+
13121335
createUnityTestBatchAndNonBatch(
13131336
"testVersionHandlerActivation",
13141337
("Imports the plugin into a Unity project and verifies all " +

source/JarResolver.sln

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VersionHandler", "VersionHa
1111
EndProject
1212
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VersionHandlerImpl", "VersionHandlerImpl\VersionHandlerImpl.csproj", "{1E162334-8EA2-440A-9B3A-13FD8FE5C22E}"
1313
EndProject
14+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VersionHandlerImplTests", "VersionHandlerImpl\unit_tests\VersionHandlerImplTests.csproj", "{9FD33878-5B6B-411D-A3C7-D2A5E7E63182}"
15+
EndProject
1416
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IOSResolver", "IOSResolver\IOSResolver.csproj", "{5B581BAE-D432-41AB-AEED-FD269AEA081D}"
1517
EndProject
1618
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManager", "PackageManager\PackageManager.csproj", "{8B0A2564-01ED-426B-AF33-33EED4A81828}"
@@ -43,6 +45,10 @@ Global
4345
{1E162334-8EA2-440A-9B3A-13FD8FE5C22E}.Debug|Any CPU.Build.0 = Debug|Any CPU
4446
{1E162334-8EA2-440A-9B3A-13FD8FE5C22E}.Release|Any CPU.ActiveCfg = Release|Any CPU
4547
{1E162334-8EA2-440A-9B3A-13FD8FE5C22E}.Release|Any CPU.Build.0 = Release|Any CPU
48+
{9FD33878-5B6B-411D-A3C7-D2A5E7E63182}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
49+
{9FD33878-5B6B-411D-A3C7-D2A5E7E63182}.Debug|Any CPU.Build.0 = Debug|Any CPU
50+
{9FD33878-5B6B-411D-A3C7-D2A5E7E63182}.Release|Any CPU.ActiveCfg = Release|Any CPU
51+
{9FD33878-5B6B-411D-A3C7-D2A5E7E63182}.Release|Any CPU.Build.0 = Release|Any CPU
4652
{5B581BAE-D432-41AB-AEED-FD269AEA081D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
4753
{5B581BAE-D432-41AB-AEED-FD269AEA081D}.Debug|Any CPU.Build.0 = Debug|Any CPU
4854
{5B581BAE-D432-41AB-AEED-FD269AEA081D}.Release|Any CPU.ActiveCfg = Release|Any CPU

source/VersionHandlerImpl/Properties/AssemblyInfo.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,4 @@
5656
// Uses VersionHandlerImpl.RestoreDefaultSettings(preferenceKeys)
5757
[assembly: InternalsVisibleTo("Google.IOSResolver")]
5858
[assembly: InternalsVisibleTo("Google.JarResolver")]
59+
[assembly: InternalsVisibleTo("Google.VersionHandlerImplTests")]

source/VersionHandlerImpl/src/Logger.cs

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,59 +14,79 @@
1414
// limitations under the License.
1515
// </copyright>
1616

17+
using System;
18+
1719
namespace Google {
1820

1921
/// <summary>
2022
/// Log severity.
2123
/// </summary>
22-
internal enum LogLevel {
24+
public enum LogLevel {
2325
Debug,
2426
Verbose,
2527
Info,
2628
Warning,
2729
Error,
2830
};
2931

32+
/// <summary>
33+
/// Where to log.
34+
/// </summary>
35+
[Flags]
36+
public enum LogTarget {
37+
Console = 1,
38+
Unity = 2,
39+
File = 4,
40+
};
41+
3042
/// <summary>
3143
/// Writes filtered logs to the Unity log.
3244
/// </summary>
33-
internal class Logger {
45+
public class Logger {
3446

3547
/// <summary>
3648
/// Filter the log level.
3749
/// </summary>
38-
internal LogLevel Level { get; set; }
50+
public LogLevel Level { get; set; }
51+
52+
/// <summary>
53+
/// Filter the log targets.
54+
/// </summary>
55+
public LogTarget Target { get; set; }
3956

4057
/// <summary>
4158
/// Enable / disable verbose logging.
4259
/// This toggles between Info vs. Verbose levels.
4360
/// </summary>
44-
internal bool Verbose {
61+
public bool Verbose {
4562
set { Level = value ? LogLevel.Verbose : LogLevel.Info; }
4663
get { return Level <= LogLevel.Verbose; }
4764
}
4865

4966
/// <summary>
5067
/// Name of the file to log to, if this is null this will not log to a file.
5168
/// </summary>
52-
internal string LogFilename { get; set; }
69+
public string LogFilename { get; set; }
5370

5471
/// <summary>
5572
/// Delegate function used to log messages.
5673
/// </summary>
5774
/// <param name="message">Message to log.</param>
5875
/// <param name="level">Log level of the message.</param>
59-
internal delegate void LogMessageDelegate(string message, LogLevel level);
76+
public delegate void LogMessageDelegate(string message, LogLevel level);
6077

6178
/// <summary>
6279
/// Event that is called for each logged message.
6380
/// </summary>
64-
internal event LogMessageDelegate LogMessage;
81+
public event LogMessageDelegate LogMessage;
6582

6683
/// <summary>
6784
/// Construct a logger.
6885
/// </summary>
69-
internal Logger() {}
86+
public Logger() {
87+
Level = LogLevel.Info;
88+
Target = LogTarget.Unity | LogTarget.File;
89+
}
7090

7191
/// <summary>
7292
/// Write a message to the log file.
@@ -86,22 +106,29 @@ private void LogToFile(string message) {
86106
/// <param name="message">String to write to the log.</param>
87107
/// <param name="level">Severity of the message, if this is below the currently selected
88108
/// Level property the message will not be logged.</param>
89-
internal virtual void Log(string message, LogLevel level = LogLevel.Info) {
109+
public virtual void Log(string message, LogLevel level = LogLevel.Info) {
90110
if (level >= Level || ExecutionEnvironment.InBatchMode) {
91111
switch (level) {
92112
case LogLevel.Debug:
93113
case LogLevel.Verbose:
94114
case LogLevel.Info:
95-
UnityEngine.Debug.Log(message);
96-
LogToFile(message);
115+
if ((Target & LogTarget.Unity) != 0) UnityEngine.Debug.Log(message);
116+
if ((Target & LogTarget.File) != 0) LogToFile(message);
117+
if ((Target & LogTarget.Console) != 0) System.Console.WriteLine(message);
97118
break;
98119
case LogLevel.Warning:
99-
UnityEngine.Debug.LogWarning(message);
100-
LogToFile("WARNING: " + message);
120+
if ((Target & LogTarget.Unity) != 0) UnityEngine.Debug.LogWarning(message);
121+
if ((Target & LogTarget.File) != 0) LogToFile("WARNING: " + message);
122+
if ((Target & LogTarget.Console) != 0) {
123+
System.Console.WriteLine("WARNING: " + message);
124+
}
101125
break;
102126
case LogLevel.Error:
103-
UnityEngine.Debug.LogError(message);
104-
LogToFile("ERROR: " + message);
127+
if ((Target & LogTarget.Unity) != 0) UnityEngine.Debug.LogError(message);
128+
if ((Target & LogTarget.File) != 0) LogToFile("ERROR: " + message);
129+
if ((Target & LogTarget.Console) != 0) {
130+
System.Console.WriteLine("ERROR: " + message);
131+
}
105132
break;
106133
}
107134
}

0 commit comments

Comments
 (0)