Skip to content

fix: Fix to get all collections from StringTableCollectionBundle #29

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Aug 21, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,16 @@ namespace Tsgcpp.Localization.Extension.Editor
{
public static class AssetFinding
{
public static IReadOnlyList<T> FindAssetsInFolders<T>(IReadOnlyList<DefaultAsset> folders) where T : UnityEngine.Object
public static IReadOnlyList<T> FindAssets<T>(DefaultAsset folder) where T : UnityEngine.Object
{
return FindAssets<T>(new List<DefaultAsset> { folder });
}

public static IReadOnlyList<T> FindAssets<T>(IReadOnlyList<DefaultAsset> folders) where T : UnityEngine.Object
{
if (folders == null)
{
throw new NullReferenceException("folders is null.");
return new List<T>();
}

var folderPathList = folders
Expand All @@ -22,10 +27,14 @@ public static IReadOnlyList<T> FindAssetsInFolders<T>(IReadOnlyList<DefaultAsset
.Where(path => Directory.Exists(path))
.ToList();

if (folderPathList.Count <= 0)
{
return new List<T>();
}

var assets = AssetDatabase
.FindAssets($"t:{typeof(T).Name}")
.FindAssets($"t:{typeof(T).Name}", searchInFolders: folderPathList.ToArray())
.Select(AssetDatabase.GUIDToAssetPath)
.Where(path => folderPathList.Any(folderPath => path.StartsWith(folderPath)))
.OrderBy(path => path)
.Distinct()
.Select(AssetDatabase.LoadAssetAtPath<T>)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public sealed class StringTableCollectionBundle : ScriptableObject, ITargetFolde
public float SleepSecondsPerRequest => _sleepSecondsPerRequest;

public IReadOnlyList<StringTableCollection> StringTableCollections =>
AssetFinding.FindAssetsInFolders<StringTableCollection>(TargetFolders);
AssetFinding.FindAssets<StringTableCollection>(TargetFolders);

public void PullAllLocales(
bool removeMissingEntries = false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ public sealed class StringTableCollectionBundleEditor : UnityEditor.Editor
{
private StringTableCollectionBundle Bundle => target as StringTableCollectionBundle;

private CacheListConverter<DefaultAsset, StringTableCollection> _stringTableCollectionsConverter = null;
public CacheListConverter<DefaultAsset, StringTableCollection> StringTableCollectionsConverter =>
_stringTableCollectionsConverter ??= new CacheListConverter<DefaultAsset, StringTableCollection>(actualConverter: new FolderToCollectionConverter(Bundle));

public override void OnInspectorGUI()
{
DrawDefaultInspector();
Expand All @@ -30,7 +34,7 @@ public override void OnInspectorGUI()
private void DrawToolsWithSheetsServiceProvider()
{
EditorGUILayout.LabelField("Tools (using SheetsServiceProvider)", EditorStyles.boldLabel);
using var h = new GUILayout.HorizontalScope();
using var h = new EditorGUILayout.HorizontalScope();
if (GUILayout.Button("Pull All Locales"))
{
var serviceProvider = GetSheetsServiceProvider();
Expand All @@ -47,7 +51,7 @@ private void DrawToolsWithSheetsServiceProvider()
private void DrawToolsWithServiceAccount()
{
EditorGUILayout.LabelField("Tools (using Google Service Account)", EditorStyles.boldLabel);
using var h = new GUILayout.HorizontalScope();
using var h = new EditorGUILayout.HorizontalScope();
if (GUILayout.Button("Pull All Locales"))
{
PullWithGoogleServiceAccount();
Expand All @@ -60,9 +64,6 @@ private void DrawToolsWithServiceAccount()
}

private bool _showStringTableCollections = true;
private readonly CacheListConverter<DefaultAsset, StringTableCollection> _stringTableCollectionsConverter =
new CacheListConverter<DefaultAsset, StringTableCollection>(
actualConverter: new FolderToCollectionConverter());

private void DrawStringTableCollections()
{
Expand All @@ -80,7 +81,13 @@ private void DrawStringTableCollections()
using var h = new EditorGUILayout.VerticalScope(GUI.skin.box);
using var g = new EditorGUI.DisabledGroupScope(true);

var stringTableCollections = _stringTableCollectionsConverter.Convert(Bundle.TargetFolders);
var stringTableCollections = StringTableCollectionsConverter.Convert(Bundle.TargetFolders);
if (stringTableCollections.Count <= 0)
{
EditorGUILayout.LabelField("No \"StringTableCollection\"s.");
return;
}

foreach (var collection in stringTableCollections)
{
EditorGUILayout.ObjectField(collection, typeof(StringTableCollection), allowSceneObjects: false);
Expand Down Expand Up @@ -136,9 +143,16 @@ private ServiceAccountSheetsServiceProvider CreateServiceAccountSheetsServicePro

private sealed class FolderToCollectionConverter : IListConverter<DefaultAsset, StringTableCollection>
{
private readonly StringTableCollectionBundle _bundle;

public FolderToCollectionConverter(StringTableCollectionBundle bundle)
{
_bundle = bundle;
}

public IReadOnlyList<StringTableCollection> Convert(IReadOnlyList<DefaultAsset> list)
{
return AssetFinding.FindAssetsInFolders<StringTableCollection>(list);
return _bundle.StringTableCollections;
}
}
}
Expand Down
11 changes: 11 additions & 0 deletions Assets/Tests/LocalizationExtension/Editor/AssetTool/TestAsset.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using UnityEngine;

namespace Tests.Tsgcpp.Localization.Extension.Editor
{
// [CreateAssetMenu(fileName = nameof(TestAsset), menuName = "Tsgcpp/Tests/TestAssetFinding/" + nameof(TestAsset), order = 1)]
public sealed class TestAsset : ScriptableObject
{
[SerializeField] private string _label;
public string Label => _label;
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,35 @@ namespace Tests.Tsgcpp.Localization.Extension.Editor
public class TestAssetFinding
{
[Test]
public void FindAssetsInFolders_ReturnsTextAsset_IfFolderContainsTextAsset_WhenOneFolder()
public void FindAssets_WithDefaultAssetArg_ReturnsAsset_IfFolderContainsAsset()
{
// Arrange
var folder = AssetDatabase.LoadAssetAtPath<DefaultAsset>("Assets/Tests/LocalizationExtension/Editor/Resources/Foo02/Bar01/Baz01");

// Act
var actual = AssetFinding.FindAssets<TestAsset>(folder);

// Assert
Assert.That(actual.Count, Is.EqualTo(2));
Assert.That(actual[0].Label, Is.EqualTo("02"));
Assert.That(actual[1].Label, Is.EqualTo("04"));
}

[Test]
public void FindAssets_WithDefaultAssetArg_ReturnsNoAssets_IfArgIsNull()
{
// Arrange
DefaultAsset folder = null;

// Act
var actual = AssetFinding.FindAssets<TestAsset>(folder);

// Assert
Assert.That(actual.Count, Is.EqualTo(0));
}

[Test]
public void FindAssets_WithListArg_ReturnsAsset_IfFolderContainsAsset_WhenOneFolder()
{
// Arrange
var folders = new List<DefaultAsset>
Expand All @@ -21,16 +49,16 @@ public void FindAssetsInFolders_ReturnsTextAsset_IfFolderContainsTextAsset_WhenO
};

// Act
var actual = AssetFinding.FindAssetsInFolders<TextAsset>(folders);
var actual = AssetFinding.FindAssets<TestAsset>(folders);

// Assert
Assert.That(actual.Count, Is.EqualTo(2));
Assert.That(actual[0].text, Is.EqualTo("02"));
Assert.That(actual[1].text, Is.EqualTo("04"));
Assert.That(actual[0].Label, Is.EqualTo("02"));
Assert.That(actual[1].Label, Is.EqualTo("04"));
}

[Test]
public void FindAssetsInFolders_ReturnsTextAsset_IfFolderContainsTextAsset_WhenMultipleFolders()
public void FindAssets_WithListArg_ReturnsAsset_IfFolderContainsAsset_WhenMultipleFolders()
{
// Arrange
var folders = new List<DefaultAsset>
Expand All @@ -41,18 +69,18 @@ public void FindAssetsInFolders_ReturnsTextAsset_IfFolderContainsTextAsset_WhenM
};

// Act
var actual = AssetFinding.FindAssetsInFolders<TextAsset>(folders);
var actual = AssetFinding.FindAssets<TestAsset>(folders);

// Assert
Assert.That(actual.Count, Is.EqualTo(4));
Assert.That(actual[0].text, Is.EqualTo("01"));
Assert.That(actual[1].text, Is.EqualTo("02"));
Assert.That(actual[2].text, Is.EqualTo("04"));
Assert.That(actual[3].text, Is.EqualTo("03"));
Assert.That(actual[0].Label, Is.EqualTo("01"));
Assert.That(actual[1].Label, Is.EqualTo("02"));
Assert.That(actual[2].Label, Is.EqualTo("04"));
Assert.That(actual[3].Label, Is.EqualTo("03"));
}

[Test]
public void FindAssetsInFolders_ReturnsUniquedTextAsset_IfTextAssetsAreDupulicated()
public void FindAssets_WithListArg_ReturnsUniquedAsset_IfAssetsAreDupulicated()
{
// Arrange
var folders = new List<DefaultAsset>
Expand All @@ -63,17 +91,17 @@ public void FindAssetsInFolders_ReturnsUniquedTextAsset_IfTextAssetsAreDupulicat
};

// Act
var actual = AssetFinding.FindAssetsInFolders<TextAsset>(folders);
var actual = AssetFinding.FindAssets<TestAsset>(folders);

// Assert
Assert.That(actual.Count, Is.EqualTo(3));
Assert.That(actual[0].text, Is.EqualTo("02"));
Assert.That(actual[1].text, Is.EqualTo("04"));
Assert.That(actual[2].text, Is.EqualTo("03"));
Assert.That(actual[0].Label, Is.EqualTo("02"));
Assert.That(actual[1].Label, Is.EqualTo("04"));
Assert.That(actual[2].Label, Is.EqualTo("03"));
}

[Test]
public void FindAssetsInFolders_ReturnsNoTextAssets_IfTextAssetsDontExist()
public void FindAssets_WithListArg_ReturnsNoAssets_IfAssetsDontExist()
{
// Arrange
var folders = new List<DefaultAsset>
Expand All @@ -82,31 +110,54 @@ public void FindAssetsInFolders_ReturnsNoTextAssets_IfTextAssetsDontExist()
};

// Act
var actual = AssetFinding.FindAssetsInFolders<TextAsset>(folders);
var actual = AssetFinding.FindAssets<TestAsset>(folders);

// Assert
Assert.That(actual.Count, Is.EqualTo(0));
}

[Test]
public void FindAssetsInFolders_ReturnsNoTextAssets_IfFoldersIsNone()
public void FindAssets_WithListArg_ReturnsNoAssets_IfNullList()
{
// Arrange
var folders = new List<DefaultAsset>
{
null,
};

// Act
var actual = AssetFinding.FindAssetsInFolders<TextAsset>(folders);
var actual = AssetFinding.FindAssets<TestAsset>(folders);

// Assert
Assert.That(actual.Count, Is.EqualTo(0));
}

[Test]
public void FindAssetsInFolders_ThrowsNullReferenceException_IfArgIsNull()
public void FindAssets_WithListArg_ReturnsNoAssets_IfArgIsNull()
{
Assert.Throws<NullReferenceException>(() => AssetFinding.FindAssetsInFolders<TextAsset>(null));
// Arrange
List<DefaultAsset> folders = null;

// Act
var actual = AssetFinding.FindAssets<TestAsset>(folders);

// Assert
Assert.That(actual.Count, Is.EqualTo(0));
}

[Test]
public void FindAssets_WithListArg_ReturnsNoAssets_IfFoldersIsNone()
{
// Arrange
var folders = new List<DefaultAsset>
{
};

// Act
var actual = AssetFinding.FindAssets<TestAsset>(folders);

// Assert
Assert.That(actual.Count, Is.EqualTo(0));
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f2fd2ba5cf501d149becb29e6e258529, type: 3}
m_Name: TestAsset01
m_EditorClassIdentifier:
_label: 01

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f2fd2ba5cf501d149becb29e6e258529, type: 3}
m_Name: TestAsset02
m_EditorClassIdentifier:
_label: 02

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f2fd2ba5cf501d149becb29e6e258529, type: 3}
m_Name: TestAsset04
m_EditorClassIdentifier:
_label: 04

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

This file was deleted.

This file was deleted.

Loading