Skip to content

Commit b95b60e

Browse files
committed
Adding Tests. Removing reference to the UnityEditor namespace that shouldn't be there.
1 parent 6a845bc commit b95b60e

File tree

7 files changed

+205
-6
lines changed

7 files changed

+205
-6
lines changed

Runtime/SaveLoadManager.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System;
22
using System.Collections.Generic;
3-
using UnityEditor;
43
using UnityEngine;
54

65
namespace Gameframe.SaveLoad
@@ -74,6 +73,16 @@ public void Save(object obj, string filename, string folder = null)
7473
SaveLoadUtility.Save(obj,saveLoadMethod,filename,folder, baseFolder);
7574
}
7675

76+
/// <summary>
77+
/// Gets the list of save files that have been created
78+
/// </summary>
79+
/// <param name="folder">sub folder</param>
80+
/// <returns>list of file names (excludes the path)</returns>
81+
public string[] GetFiles(string folder = null)
82+
{
83+
return SaveLoadUtility.GetSavedFiles(folder,baseFolder);
84+
}
85+
7786
/// <summary>
7887
/// Creat a copy of an object by serializing and deserializing it.
7988
/// Not compatible with unity objects.

Runtime/SaveLoadUtility.cs

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using System.IO;
1+
using System.Collections.Generic;
2+
using System.IO;
3+
using System.Linq;
24
using UnityEngine;
35

46
namespace Gameframe.SaveLoad
@@ -66,9 +68,9 @@ public static void Save(object saveObject, ISerializationMethod serializationMet
6668
saveFile.Close();
6769
}
6870
}
69-
71+
7072
/// <summary>
71-
///
73+
/// Load object from file
7274
/// </summary>
7375
/// <param name="objectType"></param>
7476
/// <param name="serializationMethod"></param>
@@ -98,7 +100,33 @@ public static object Load(System.Type objectType, ISerializationMethod serializa
98100
}
99101

100102
/// <summary>
101-
///
103+
/// Enumerate files in the save directory
104+
/// </summary>
105+
/// <param name="folderName">folder containing the save files</param>
106+
/// <param name="baseFolderPath">base path to the folder</param>
107+
/// <returns>list of file names</returns>
108+
public static IEnumerable<string> EnumerateSavedFiles(string folderName = null, string baseFolderPath = null)
109+
{
110+
var savePath = GetSavePath(folderName,baseFolderPath);
111+
foreach ( var file in Directory.EnumerateFiles(savePath,"*",SearchOption.AllDirectories) )
112+
{
113+
yield return Path.GetFileName(file);
114+
}
115+
}
116+
117+
/// <summary>
118+
/// Creates an array list of save files in the given folder and path
119+
/// </summary>
120+
/// <param name="folderName"></param>
121+
/// <param name="baseFolderPath"></param>
122+
/// <returns>Array of file names</returns>
123+
public static string[] GetSavedFiles(string folderName = null, string baseFolderPath = null)
124+
{
125+
return EnumerateSavedFiles(folderName, baseFolderPath).ToArray();
126+
}
127+
128+
/// <summary>
129+
/// Check if a saved file exists
102130
/// </summary>
103131
/// <param name="filename"></param>
104132
/// <param name="folderName"></param>
@@ -112,7 +140,7 @@ public static bool Exists(string filename, string folderName = null, string base
112140
}
113141

114142
/// <summary>
115-
///
143+
/// Delete a savedd file
116144
/// </summary>
117145
/// <param name="filename"></param>
118146
/// <param name="folderName"></param>

Tests/Editor.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
using NUnit.Framework;
5+
using UnityEngine;
6+
using Object = UnityEngine.Object;
7+
8+
namespace Gameframe.SaveLoad.Tests
9+
{
10+
public class SaveLoadUtilityTests
11+
{
12+
private string TestKey = "TestKey";
13+
private string TestSalt = "TestSalt";
14+
15+
private ISerializationMethod GetSerializationMethod(SerializationMethodType method)
16+
{
17+
switch (method)
18+
{
19+
case SerializationMethodType.Default:
20+
return new SerializationMethodUnityJson();
21+
case SerializationMethodType.Binary:
22+
return new SerializationMethodBinary();
23+
case SerializationMethodType.BinaryEncrypted:
24+
return new SerializationMethodBinaryEncrypted(TestKey,TestSalt);
25+
case SerializationMethodType.UnityJson:
26+
return new SerializationMethodUnityJson();
27+
case SerializationMethodType.UnityJsonEncrypted:
28+
return new SerializationMethodUnityJsonEncrypted(TestKey,TestSalt);
29+
case SerializationMethodType.JsonDotNet:
30+
return new SerializationMethodJsonDotNet();
31+
case SerializationMethodType.JsonDotNetEncrypted:
32+
return new SerializationMethodJsonDotNetEncrypted(TestKey,TestSalt);
33+
case SerializationMethodType.Custom:
34+
return new SerializationMethodBinary();
35+
default:
36+
throw new ArgumentOutOfRangeException(nameof(method), method, null);
37+
}
38+
}
39+
40+
[Serializable]
41+
public class SaveLoadTestObject
42+
{
43+
public string testData;
44+
}
45+
46+
[Test]
47+
public void SaveLoadAndDelete([Values]SerializationMethodType method)
48+
{
49+
var testSave = new SaveLoadTestObject() {testData = "SaveFileExists"};
50+
var serializationMethod = GetSerializationMethod(method);
51+
var filename = "TestSave.sav";
52+
53+
SaveLoadUtility.Save(testSave,serializationMethod,filename);
54+
55+
Assert.IsTrue(SaveLoadUtility.Exists(filename));
56+
57+
var loadedSave = (SaveLoadTestObject)SaveLoadUtility.Load(typeof(SaveLoadTestObject), serializationMethod, filename);
58+
Assert.NotNull(loadedSave);
59+
Assert.IsTrue(loadedSave.testData == testSave.testData);
60+
61+
SaveLoadUtility.DeleteSavedFile(filename);
62+
63+
Assert.IsFalse(SaveLoadUtility.Exists(filename));
64+
}
65+
66+
[Test]
67+
public void CanGetFiles_Empty()
68+
{
69+
var files = SaveLoadUtility.GetSavedFiles();
70+
Assert.IsTrue(files.Length == 0);
71+
}
72+
73+
[Test]
74+
public void CanGetFiles()
75+
{
76+
var testSave = new SaveLoadTestObject() {testData = "SaveFileExists"};
77+
var serializationMethod = GetSerializationMethod(SerializationMethodType.Binary);
78+
var filename = "TestSave.sav";
79+
var folder = "TestFolder";
80+
81+
SaveLoadUtility.Save(testSave,serializationMethod,filename,folder);
82+
83+
var files = SaveLoadUtility.GetSavedFiles(folder);
84+
Assert.IsTrue(files.Length == 1);
85+
86+
//Files should contain a list of names that exactly match the file name used
87+
//omits the path of the file
88+
Assert.IsTrue(files[0] == filename);
89+
90+
SaveLoadUtility.DeleteSavedFile(filename,folder);
91+
92+
files = SaveLoadUtility.GetSavedFiles();
93+
Assert.IsTrue(files.Length == 0);
94+
}
95+
96+
[TearDown]
97+
public void TearDown()
98+
{
99+
var path = SaveLoadUtility.GetSavePath();
100+
string[] files = {"TestSave.sav"};
101+
102+
foreach (var file in files)
103+
{
104+
var filename = path + file;
105+
if (File.Exists(filename))
106+
{
107+
File.Delete(filename);
108+
}
109+
}
110+
}
111+
112+
}
113+
114+
}
115+

Tests/Editor/SaveLoadUtilityTests.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"name": "com.gameframe.saveload.editor.tests",
3+
"references": [
4+
"GUID:b894308b0ac81480cb726cb405d83944",
5+
"GUID:0acc523941302664db1f4e527237feb3",
6+
"GUID:27619889b8ba8c24980f49ee34dbb44a"
7+
],
8+
"includePlatforms": [
9+
"Editor"
10+
],
11+
"excludePlatforms": [],
12+
"allowUnsafeCode": false,
13+
"overrideReferences": true,
14+
"precompiledReferences": [
15+
"nunit.framework.dll"
16+
],
17+
"autoReferenced": false,
18+
"defineConstraints": [],
19+
"versionDefines": [],
20+
"noEngineReferences": false
21+
}

Tests/Editor/com.gameframe.saveload.editor.tests.asmdef.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)