first commit

This commit is contained in:
Kirill Chikalin
2024-11-16 13:20:07 +03:00
commit a3072a3693
538 changed files with 108153 additions and 0 deletions

View File

@@ -0,0 +1,50 @@
using AssetStoreTools.Utility;
using AssetStoreTools.Validator.UIElements;
using System;
using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.UIElements;
namespace AssetStoreTools.Validator
{
internal class AssetStoreValidator : AssetStoreToolsWindow
{
protected override string WindowTitle => "Asset Store Validator";
public static Action OnWindowDestroyed;
private AutomatedTestsGroup _automatedTestsGroup;
protected override void Init()
{
minSize = new Vector2(350, 350);
base.Init();
this.SetAntiAliasing(4);
VisualElement root = rootVisualElement;
root.AddToClassList("root");
// Clean it out, in case the window gets initialized again
root.Clear();
// Getting a reference to the USS Document and adding stylesheet to the root
root.styleSheets.Add(StyleSelector.ValidatorWindow.ValidatorWindowStyle);
root.styleSheets.Add(StyleSelector.ValidatorWindow.ValidatorWindowTheme);
ConstructWindow();
}
private void ConstructWindow()
{
_automatedTestsGroup = new AutomatedTestsGroup();
rootVisualElement.Add(_automatedTestsGroup);
}
private void OnDestroy()
{
OnWindowDestroyed?.Invoke();
}
}
}

View File

@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 4fdc092edc6b5b049bdf5c59068cd3bf
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/AssetStoreValidator.cs
uploadId: 681981

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 8490c57c02b441e4dab99565da835c99
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1,135 @@
fileFormatVersion: 2
guid: 0cc0ccdb7de3e964ab553ce3c299d83c
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 2
aniso: 0
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 0
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 0
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Icons/error.png
uploadId: 681981

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -0,0 +1,135 @@
fileFormatVersion: 2
guid: cdf8d51df19d58341886cc474e810c7b
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 2
aniso: 0
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 0
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 0
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Icons/error_d.png
uploadId: 681981

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,135 @@
fileFormatVersion: 2
guid: 832e106a677623145b3d8dbe015e31a0
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 2
aniso: 0
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 0
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 0
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Icons/success.png
uploadId: 681981

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -0,0 +1,135 @@
fileFormatVersion: 2
guid: 3dc139a2b2a28a54a8f39e266fc0af9c
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 2
aniso: 0
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 0
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 0
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Icons/success_d.png
uploadId: 681981

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,135 @@
fileFormatVersion: 2
guid: 4a4eef842709db34cbb71baf22384730
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 2
aniso: 0
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 0
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 0
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Icons/undefined.png
uploadId: 681981

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -0,0 +1,135 @@
fileFormatVersion: 2
guid: 88a36c7e4d60b6b4385c95cfc2d00c22
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 2
aniso: 0
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 0
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 0
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Icons/undefined_d.png
uploadId: 681981

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,135 @@
fileFormatVersion: 2
guid: 83d0e58aa5f608a4b8232fbacca5ca89
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 2
aniso: 0
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 0
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 0
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Icons/warning.png
uploadId: 681981

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,135 @@
fileFormatVersion: 2
guid: d27d359f48fa1a14e9e4f02196589805
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 2
aniso: 0
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 0
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 0
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Icons/warning_d.png
uploadId: 681981

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1b5ff7c95381e82438f6c9dc40069031
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 7a971a9a200a4438945853d71066f16a
timeCreated: 1657617558

View File

@@ -0,0 +1,45 @@
using AssetStoreTools.Validator.Data;
using AssetStoreTools.Validator.TestDefinitions;
namespace AssetStoreTools.Validator.Categories
{
internal class CategoryEvaluator
{
private string _category;
public CategoryEvaluator(string category)
{
_category = category;
}
public void SetCategory(string category)
{
_category = category;
}
public string GetCategory()
{
return _category;
}
public TestResult.ResultStatus Evaluate(ValidationTest validation, bool slugify = false)
{
var result = validation.Result.Result;
if (result != TestResult.ResultStatus.VariableSeverityIssue)
return result;
var category = _category;
if (slugify)
category = validation.Slugify(category);
return validation.CategoryInfo.EvaluateByFilter(category);
}
// Used by ab-builder
public TestResult.ResultStatus EvaluateAndSlugify(ValidationTest validation)
{
return Evaluate(validation, true);
}
}
}

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: eb61fd62b94248e4b5a3a07665b1a2bf
timeCreated: 1661420659
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Categories/CategoryEvaluator.cs
uploadId: 681981

View File

@@ -0,0 +1,38 @@
using AssetStoreTools.Validator.Data;
using System;
using System.Linq;
namespace AssetStoreTools.Validator.Categories
{
[System.Serializable]
internal class ValidatorCategory
{
public bool IsFailFilter = false;
public bool IsInclusiveFilter = true;
public bool AppliesToSubCategories = true;
public string[] Filter = { "Tools", "Art" };
public TestResult.ResultStatus EvaluateByFilter(string category)
{
if (AppliesToSubCategories)
category = category.Split('/')[0];
var isCategoryInFilter = Filter.Any(x => String.Compare(x, category, StringComparison.OrdinalIgnoreCase) == 0);
if (IsInclusiveFilter)
{
if (isCategoryInFilter)
return IsFailFilter ? TestResult.ResultStatus.Fail : TestResult.ResultStatus.Warning;
else
return IsFailFilter ? TestResult.ResultStatus.Warning : TestResult.ResultStatus.Fail;
}
else
{
if (isCategoryInFilter)
return IsFailFilter ? TestResult.ResultStatus.Warning : TestResult.ResultStatus.Fail;
else
return IsFailFilter ? TestResult.ResultStatus.Fail : TestResult.ResultStatus.Warning;
}
}
}
}

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: a5e60d3639f24063a4eabc21ea1a04a9
timeCreated: 1657617578
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Categories/ValidatorCategory.cs
uploadId: 681981

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1c2a38ded8e054c4088aff1db7224f66
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,75 @@
using UnityEditor;
using UnityEngine;
namespace AssetStoreTools.Validator.Data
{
internal interface IMessageAction
{
string ActionTooltip { get; }
void Execute();
}
internal enum ClickActionType
{
None = 0,
HighlightObject = 1,
OpenAsset = 2
}
internal class MessageActionHighlight : IMessageAction
{
private Object _objectToHighlight;
public GlobalObjectId GlobalObjectIdentifier { get; set; }
public string ActionTooltip => "Click to highlight the associated object in Hierarchy/Project view";
public MessageActionHighlight(Object objectToHighlight)
{
this._objectToHighlight = objectToHighlight;
GlobalObjectIdentifier = GlobalObjectId.GetGlobalObjectIdSlow(objectToHighlight);
}
public MessageActionHighlight(string globalObjectId)
{
GlobalObjectId.TryParse(globalObjectId, out GlobalObjectId globalObjectIdentifier);
GlobalObjectIdentifier = globalObjectIdentifier;
}
public void Execute()
{
if(_objectToHighlight == null)
_objectToHighlight = GlobalObjectId.GlobalObjectIdentifierToObjectSlow(GlobalObjectIdentifier);
EditorGUIUtility.PingObject(_objectToHighlight);
}
}
internal class MessageActionOpenAsset : IMessageAction
{
private Object _objectToOpen;
public int LineNumber { get; set; }
public GlobalObjectId GlobalObjectIdentifier { get; set; }
public string ActionTooltip => "Click to open the associated asset";
public MessageActionOpenAsset(Object objectToOpen)
{
this._objectToOpen = objectToOpen;
GlobalObjectIdentifier = GlobalObjectId.GetGlobalObjectIdSlow(objectToOpen);
}
public MessageActionOpenAsset(string globalObjectId)
{
GlobalObjectId.TryParse(globalObjectId, out GlobalObjectId globalObjectIdentifier);
GlobalObjectIdentifier = globalObjectIdentifier;
}
public void Execute()
{
if (_objectToOpen == null)
_objectToOpen = GlobalObjectId.GlobalObjectIdentifierToObjectSlow(GlobalObjectIdentifier);
AssetDatabase.OpenAsset(_objectToOpen, LineNumber);
}
}
}

View File

@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: c6c8b1f23bf5c8841be44b13374e7baf
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Data/MessageActions.cs
uploadId: 681981

View File

@@ -0,0 +1,173 @@
using System.Collections.Generic;
using System;
using UnityEngine;
using UnityEditor;
using Object = UnityEngine.Object;
namespace AssetStoreTools.Validator.Data
{
[Serializable]
internal struct TestResult
{
public ResultStatus Result;
[SerializeField, HideInInspector]
private List<TestResultMessage> Messages;
public int MessageCount => Messages?.Count ?? 0;
public void AddMessage(string msg)
{
AddMessage(msg, null, null);
}
public void AddMessage(string msg, IMessageAction clickAction)
{
AddMessage(msg, clickAction, null);
}
public void AddMessage(string msg, IMessageAction clickAction, params UnityEngine.Object[] messageObjects)
{
if (Messages == null)
Messages = new List<TestResultMessage>();
var message = new TestResultMessage(msg, clickAction);
AddMessageObjects(messageObjects, message);
Messages.Add(message);
}
private void AddMessageObjects(Object[] messageObjects, TestResultMessage message)
{
if (messageObjects == null)
return;
foreach (var obj in messageObjects)
{
#if AB_BUILDER
string path = AssetDatabase.GetAssetPath(obj);
message.AppendText($"\nAsset at: {path}");
#else
message.AddMessageObject(obj);
#endif
}
}
public TestResultMessage GetMessage(int index)
{
if (Messages == null || index >= Messages.Count)
throw new InvalidOperationException();
return Messages[index];
}
public enum ResultStatus
{
Undefined = 0,
Pass = 1,
Fail = 2,
Warning = 3,
VariableSeverityIssue = 4
}
[Serializable]
internal class TestResultMessage : ISerializationCallbackReceiver
{
[SerializeField, HideInInspector]
private string Text;
[SerializeField, HideInInspector]
private List<string> MessageObjects;
// Serialization
[SerializeField, HideInInspector]
private string SerializedClickAction;
private IMessageAction _clickAction;
public IMessageAction ClickAction => _clickAction;
public TestResultMessage() { }
public TestResultMessage(string text)
{
Text = text;
}
public TestResultMessage(string text, IMessageAction clickAction) : this(text)
{
_clickAction = clickAction;
}
public void AddMessageObject(Object obj)
{
if (MessageObjects == null)
MessageObjects = new List<string>();
var globalObjectId = GlobalObjectId.GetGlobalObjectIdSlow(obj).ToString();
if (globalObjectId != "GlobalObjectId_V1-0-00000000000000000000000000000000-0-0")
MessageObjects.Add(GlobalObjectId.GetGlobalObjectIdSlow(obj).ToString());
else
Text += $"\n{obj.name}";
}
public Object[] GetMessageObjects()
{
if (MessageObjects == null)
return Array.Empty<Object>();
var objects = new Object[MessageObjects.Count];
for (int i = 0; i < objects.Length; i++)
{
GlobalObjectId.TryParse(MessageObjects[i], out GlobalObjectId id);
objects[i] = GlobalObjectId.GlobalObjectIdentifierToObjectSlow(id);
}
return objects;
}
public void OnBeforeSerialize()
{
SerializedClickAction = ((int)ClickActionType.None).ToString();
switch (_clickAction)
{
case MessageActionHighlight action:
var objectId = action.GlobalObjectIdentifier.ToString();
SerializedClickAction = $"{(int)ClickActionType.HighlightObject}|{objectId}";
break;
case MessageActionOpenAsset action:
objectId = action.GlobalObjectIdentifier.ToString();
SerializedClickAction = $"{(int)ClickActionType.OpenAsset}|{objectId}|{action.LineNumber}";
break;
}
}
public void OnAfterDeserialize()
{
string[] splitAction = SerializedClickAction.Split('|');
bool parsed = Enum.TryParse(splitAction[0], out ClickActionType clickActionType);
if (!parsed) return;
switch (clickActionType)
{
case ClickActionType.HighlightObject:
_clickAction = new MessageActionHighlight(splitAction[1]);
break;
case ClickActionType.OpenAsset:
_clickAction = new MessageActionOpenAsset(splitAction[1])
{ LineNumber = Convert.ToInt32(splitAction[2]) };
break;
case ClickActionType.None:
break;
default:
throw new ArgumentOutOfRangeException();
}
}
public void AppendText(string value)
{
Text += value;
}
public string GetText()
{
return Text;
}
}
}
}

View File

@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 05d7d92bbda6bf44f8ed5fbd0cde57e6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Data/TestResult.cs
uploadId: 681981

View File

@@ -0,0 +1,31 @@
using AssetStoreTools.Validator.TestDefinitions;
using System.Collections.Generic;
namespace AssetStoreTools.Validator.Data
{
internal enum ValidationStatus
{
NotRun,
RanToCompletion,
Failed,
Cancelled
}
internal class ValidationResult
{
public ValidationStatus Status;
public List<AutomatedTest> AutomatedTests;
public bool HadCompilationErrors;
public string ProjectPath;
public string Error;
public ValidationResult()
{
Status = ValidationStatus.NotRun;
AutomatedTests = new List<AutomatedTest>();
HadCompilationErrors = false;
ProjectPath = string.Empty;
Error = string.Empty;
}
}
}

View File

@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: b15525b8dcf3e654ca2f895472ab7cb1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Data/ValidationResult.cs
uploadId: 681981

View File

@@ -0,0 +1,10 @@
using System.Collections.Generic;
namespace AssetStoreTools.Validator.Data
{
internal class ValidationSettings
{
public List<string> ValidationPaths;
public string Category;
}
}

View File

@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: dd3bbba60e92d4843a393874a9de9a63
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Data/ValidationSettings.cs
uploadId: 681981

View File

@@ -0,0 +1,170 @@
using AssetStoreTools.Utility;
using AssetStoreTools.Utility.Json;
using AssetStoreTools.Validator.Utility;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEngine;
namespace AssetStoreTools.Validator.Data
{
[Serializable]
internal class ValidationStateData
{
public List<string> SerializedValidationPaths;
public string SerializedCategory;
public List<int> SerializedKeys;
public List<TestResultData> SerializedValues;
public bool HasCompilationErrors;
}
[Serializable]
internal class TestResultData
{
public TestResult Result;
}
internal class ValidationState
{
public const string ValidationDataFilename = "AssetStoreValidationState.asset";
public const string PersistentDataLocation = "Library";
public Dictionary<int, TestResultData> TestResults = new Dictionary<int, TestResultData>();
public ValidationStateData ValidationStateData;
public Action OnJsonSave;
private static ValidationState s_instance;
public static ValidationState Instance
{
get
{
if (s_instance == null)
s_instance = new ValidationState();
s_instance.LoadJson();
return s_instance;
}
}
private void LoadJson()
{
if (s_instance.TestResults.Count != 0)
return;
var saveFile = $"{PersistentDataLocation}/{ValidationDataFilename}";
if (!File.Exists(saveFile))
{
s_instance.ValidationStateData = new ValidationStateData
{
SerializedValidationPaths = new List<string>() { "Assets" },
SerializedCategory = ""
};
return;
}
var fileContents = File.ReadAllText(saveFile);
var data = JsonUtility.FromJson<ValidationStateData>(fileContents);
if (data.SerializedValidationPaths.Count == 0)
data.SerializedValidationPaths.Add("Assets");
s_instance.ValidationStateData = data;
var implementedTests = ValidatorUtility.GetAutomatedTestCases();
for (var i = 0; i < s_instance.ValidationStateData.SerializedKeys.Count; i++)
{
// Skip any potential tests that were serialized, but are no longer implemented
if (!implementedTests.Any(x => x.Id == s_instance.ValidationStateData.SerializedKeys[i]))
continue;
s_instance.TestResults.Add(s_instance.ValidationStateData.SerializedKeys[i], s_instance.ValidationStateData.SerializedValues[i]);
}
}
public void SaveJson()
{
var saveFile = $"{PersistentDataLocation}/{ValidationDataFilename}";
if (TestResults.Keys.Count == 0)
return;
ValidationStateData.SerializedKeys = TestResults.Keys.ToList();
ValidationStateData.SerializedValues = TestResults.Values.ToList();
var jsonString = JsonUtility.ToJson(ValidationStateData);
File.WriteAllText(saveFile, jsonString);
OnJsonSave?.Invoke();
}
public static bool GetValidationSummaryJson(ValidationStateData data, out string validationSummaryJson)
{
validationSummaryJson = string.Empty;
try
{
var json = JsonValue.NewDict();
// Construct compilation state
json["has_compilation_errors"] = data.HasCompilationErrors;
// Construct validation paths
var pathsList = JsonValue.NewList();
foreach (var path in data.SerializedValidationPaths)
pathsList.Add(path);
json["validation_paths"] = pathsList;
// Construct validation results
var resultsDict = JsonValue.NewDict();
for (int i = 0; i < data.SerializedKeys.Count; i++)
{
var key = data.SerializedKeys[i].ToString();
var value = JsonValue.NewDict();
value["int"] = (int)data.SerializedValues[i].Result.Result;
value["string"] = data.SerializedValues[i].Result.Result.ToString();
resultsDict[key] = value;
}
json["validation_results"] = resultsDict;
validationSummaryJson = json.ToString();
return true;
}
catch (Exception e)
{
ASDebug.LogError($"Failed to parse a validation summary json:\n{e}");
return false;
}
}
public void CreateTestContainer(int testId)
{
s_instance.TestResults.Add(testId, new TestResultData());
}
public void ChangeResult(int index, TestResult result)
{
if (!s_instance.TestResults.ContainsKey(index))
CreateTestContainer(index);
s_instance.TestResults[index].Result = result;
}
public void SetCompilationState(bool hasCompilationErrors)
{
s_instance.ValidationStateData.HasCompilationErrors = hasCompilationErrors;
}
public void SetValidationPaths(string[] paths)
{
s_instance.ValidationStateData.SerializedValidationPaths = paths.ToList();
}
public void SetCategory(string category)
{
s_instance.ValidationStateData.SerializedCategory = category;
}
}
}

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: bbd993a57160414b93583792dbe5241e
timeCreated: 1653399871
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Data/ValidationState.cs
uploadId: 681981

View File

@@ -0,0 +1,295 @@
using AssetStoreTools.Utility;
using AssetStoreTools.Validator.Categories;
using AssetStoreTools.Validator.Data;
using AssetStoreTools.Validator.TestDefinitions;
using AssetStoreTools.Validator.Utility;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using UnityEditor;
using UnityEngine;
namespace AssetStoreTools.Validator
{
internal class PackageValidator
{
#if UNITY_EDITOR_OSX
private static readonly string UnityPath = Path.Combine(EditorApplication.applicationPath, "Contents", "MacOS", "Unity");
#else // Windows, Linux
private static readonly string UnityPath = EditorApplication.applicationPath;
#endif
private CategoryEvaluator _categoryEvaluator;
public List<AutomatedTest> AutomatedTests { get; private set; }
public string Category => _categoryEvaluator.GetCategory();
private static PackageValidator s_instance;
public static PackageValidator Instance => s_instance ?? (s_instance = new PackageValidator());
private PackageValidator()
{
_categoryEvaluator = new CategoryEvaluator(ValidationState.Instance.ValidationStateData.SerializedCategory);
CreateAutomatedTestCases();
}
private void CreateAutomatedTestCases()
{
var testData = ValidatorUtility.GetAutomatedTestCases(ValidatorUtility.SortType.Alphabetical);
AutomatedTests = new List<AutomatedTest>();
foreach (var t in testData)
{
var test = new AutomatedTest(t);
if (!ValidationState.Instance.TestResults.ContainsKey(test.Id))
ValidationState.Instance.CreateTestContainer(test.Id);
else
test.Result = ValidationState.Instance.TestResults[test.Id].Result;
AutomatedTests.Add(test);
}
}
public static ValidationResult ValidatePackage(ValidationSettings settings)
{
return Instance.RunAllTests(settings);
}
public ValidationResult RunAllTests(ValidationSettings settings)
{
if (settings == null || settings.ValidationPaths == null || settings.ValidationPaths.Count == 0)
return new ValidationResult() { Status = ValidationStatus.Failed, Error = "No validation paths were provided" };
var validationPaths = settings.ValidationPaths.ToArray();
_categoryEvaluator.SetCategory(settings.Category);
var hasCompilationErrors = EditorUtility.scriptCompilationFailed;
ValidationState.Instance.SetCompilationState(hasCompilationErrors);
ValidationState.Instance.SetValidationPaths(validationPaths);
ValidationState.Instance.SetCategory(_categoryEvaluator.GetCategory());
for (int i = 0; i < AutomatedTests.Count; i++)
{
var test = AutomatedTests[i];
EditorUtility.DisplayProgressBar("Validating", $"Running validation: {i + 1} - {test.Title}", (float)i / AutomatedTests.Count);
test.Run(new ValidationTestConfig() { ValidationPaths = validationPaths });
// Adjust result based on categories
var updatedStatus = _categoryEvaluator.Evaluate(test);
test.Result.Result = updatedStatus;
ValidationState.Instance.ChangeResult(test.Id, test.Result);
#if AB_BUILDER
EditorUtility.UnloadUnusedAssetsImmediate();
#endif
}
EditorUtility.UnloadUnusedAssetsImmediate();
EditorUtility.ClearProgressBar();
ValidationState.Instance.SaveJson();
var projectPath = Application.dataPath.Substring(0, Application.dataPath.Length - "/Assets".Length);
var result = new ValidationResult()
{
Status = ValidationStatus.RanToCompletion,
ProjectPath = projectPath,
AutomatedTests = AutomatedTests,
HadCompilationErrors = hasCompilationErrors
};
return result;
}
public static ValidationResult ValidatePreExportedPackage(ValidationSettings settings, bool interactiveMode)
{
var result = new ValidationResult();
if (settings == null || settings.ValidationPaths == null ||
settings.ValidationPaths.Count != 1 || string.IsNullOrEmpty(settings.ValidationPaths[0]))
{
result.Status = ValidationStatus.Failed;
result.Error = "A single package path must be provided";
return result;
}
try
{
// Step 1 - prepare a temporary project
result = PrepareTemporaryValidationProject(settings, result, interactiveMode);
// If preparation was cancelled or setting up project failed - return immediately
if (result.Status == ValidationStatus.Cancelled || result.Status == ValidationStatus.Failed)
return result;
// Step 2 - load the temporary project and validate the package
result = ValidateTemporaryValidationProject(settings, result, interactiveMode);
return result;
}
catch (Exception e)
{
result.Status = ValidationStatus.Failed;
result.Error = e.Message;
return result;
}
finally
{
EditorUtility.ClearProgressBar();
}
}
private static ValidationResult PrepareTemporaryValidationProject(ValidationSettings settings, ValidationResult result, bool interactiveMode)
{
EditorUtility.DisplayProgressBar("Validating...", "Preparing the validation project. This may take a while.", 0.3f);
var rootProjectPath = Application.dataPath.Substring(0, Application.dataPath.Length - "/Assets".Length);
var tempProjectPath = Path.Combine(rootProjectPath, "Temp", GUID.Generate().ToString()).Replace("\\", "/");
result.ProjectPath = tempProjectPath;
if (!Directory.Exists(tempProjectPath))
Directory.CreateDirectory(tempProjectPath);
// Cannot edit a package.json file that does not yet exist - copy over AST instead
var tempPackagesPath = $"{tempProjectPath}/Packages";
if (!Directory.Exists(tempPackagesPath))
Directory.CreateDirectory(tempPackagesPath);
var assetStoreToolsPath = PackageUtility.GetAllPackages().FirstOrDefault(x => x.name == "com.unity.asset-store-tools").resolvedPath.Replace("\\", "/");
FileUtility.CopyDirectory(assetStoreToolsPath, $"{tempPackagesPath}/com.unity.asset-store-tools", true);
var logFilePath = $"{tempProjectPath}/preparation.log";
// Create the temporary project
var processInfo = new System.Diagnostics.ProcessStartInfo()
{
FileName = UnityPath,
Arguments = $"-createProject \"{tempProjectPath}\" -logFile \"{logFilePath}\" -importpackage \"{Path.GetFullPath(settings.ValidationPaths[0])}\" -quit"
};
if (!interactiveMode)
processInfo.Arguments += " -batchmode";
var exitCode = 0;
using (var process = System.Diagnostics.Process.Start(processInfo))
{
while (!process.HasExited)
{
if (EditorUtility.DisplayCancelableProgressBar("Validating...", "Preparing the validation project. This may take a while.", 0.3f))
process.Kill();
Thread.Sleep(10);
}
exitCode = process.ExitCode;
// Windows and MacOS exit codes
if (exitCode == -1 || exitCode == 137)
{
result.Status = ValidationStatus.Cancelled;
return result;
}
}
if (exitCode != 0)
{
result.Status = ValidationStatus.Failed;
result.Error = $"Setting up the temporary project failed (exit code {exitCode})\n\nMore information can be found in the log file: {logFilePath}";
}
else
{
result.Status = ValidationStatus.RanToCompletion;
}
return result;
}
private static ValidationResult ValidateTemporaryValidationProject(ValidationSettings settings, ValidationResult result, bool interactiveMode)
{
EditorUtility.DisplayProgressBar("Validating...", "Performing validation...", 0.6f);
var logFilePath = $"{result.ProjectPath}/validation.log";
var processInfo = new System.Diagnostics.ProcessStartInfo()
{
FileName = UnityPath,
Arguments = $"-projectPath \"{result.ProjectPath}\" -logFile \"{logFilePath}\" -executeMethod AssetStoreTools.Validator.PackageValidator.ValidateProject -category \"{settings.Category}\""
};
if (!interactiveMode)
processInfo.Arguments += " -batchmode -ignorecompilererrors";
var exitCode = 0;
using (var process = System.Diagnostics.Process.Start(processInfo))
{
process.WaitForExit();
exitCode = process.ExitCode;
}
if (exitCode != 0)
{
result.Status = ValidationStatus.Failed;
result.Error = $"Validating the temporary project failed (exit code {exitCode})\n\nMore information can be found in the log file: {logFilePath}";
}
else
{
result.Status = ValidationStatus.RanToCompletion;
}
return result;
}
// Invoked via Command Line Arguments
private static void ValidateProject()
{
var exitCode = 0;
try
{
// Determine whether to validate Assets folder or Packages folders
var validationPaths = new List<string>();
var packageDirectories = Directory.GetDirectories("Packages", "*", SearchOption.TopDirectoryOnly)
.Select(x => x.Replace("\\", "/"))
.Where(x => x != "Packages/com.unity.asset-store-tools").ToArray();
if (packageDirectories.Length > 0)
validationPaths.AddRange(packageDirectories);
else
validationPaths.Add("Assets");
// Parse category
var category = string.Empty;
var args = Environment.GetCommandLineArgs().ToList();
var categoryIndex = args.IndexOf("-category");
if (categoryIndex != -1 && categoryIndex + 1 < args.Count)
category = args[categoryIndex + 1];
// Run validation
var validationSettings = new ValidationSettings()
{
ValidationPaths = validationPaths,
Category = category
};
Instance.RunAllTests(validationSettings);
AssetStoreTools.ShowAssetStoreToolsValidator();
EditorUtility.DisplayDialog("Validation complete", "Package validation complete.\n\nTo resume work in the original project, close this Editor instance", "OK");
}
catch
{
exitCode = 1;
throw;
}
finally
{
if (Application.isBatchMode)
EditorApplication.Exit(exitCode);
}
}
}
}

View File

@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: ce60756ef40c87e4583de0ea0776af7b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/PackageValidator.cs
uploadId: 681981

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 462cf5f916fad974a831f6a44aadcc82
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,47 @@
using AssetStoreTools.Validator.Data;
using System;
using System.Linq;
using UnityEngine;
namespace AssetStoreTools.Validator.TestDefinitions
{
internal class AutomatedTest : ValidationTest
{
public AutomatedTest(ValidationTestScriptableObject source) : base(source) { }
public override void Run(ValidationTestConfig config)
{
Type testClass;
if (TestScript == null || (testClass = TestScript.GetClass()) == null)
{
Debug.LogError($"Cannot run test {Title} - Test Script class was not found");
return;
}
if (!testClass.GetInterfaces().Contains(typeof(ITestScript)))
{
Debug.LogError($"Cannot run test {Title} - Test Script class is not derived from {nameof(ITestScript)}");
return;
}
var testMethod = testClass.GetMethod("Run");
if (testMethod == null)
{
Debug.LogError($"Cannot run test {Title} - Run() method was not found");
return;
}
try
{
Result = (TestResult)testMethod.Invoke(Activator.CreateInstance(testClass), new[] { config });
}
catch (Exception e)
{
var result = new TestResult() { Result = TestResult.ResultStatus.Undefined };
result.AddMessage("An exception was caught when running this test case. See Console for more details");
Debug.LogError($"An exception was caught when running validation for test case '{Title}'\n{e.InnerException}");
Result = result;
}
}
}
}

View File

@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: b284048af6fef0d49b8c3a37f7083d04
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Test Definitions/AutomatedTest.cs
uploadId: 681981

View File

@@ -0,0 +1,9 @@
using AssetStoreTools.Validator.Data;
namespace AssetStoreTools.Validator.TestDefinitions
{
internal interface ITestScript
{
TestResult Run(ValidationTestConfig config);
}
}

View File

@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 839ef1f3e773ab347b66932d3f810aec
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Test Definitions/ITestScript.cs
uploadId: 681981

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d62652f91f698904ea662c6ab252ea59
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,11 @@
#if UNITY_ASTOOLS_DEVELOPMENT
using UnityEngine;
#endif
namespace AssetStoreTools.Validator.TestDefinitions
{
#if UNITY_ASTOOLS_DEVELOPMENT
[CreateAssetMenu(fileName = "AutomatedTest", menuName = "Asset Store Validator/Automated Test")]
#endif
internal class AutomatedTestScriptableObject : ValidationTestScriptableObject { }
}

View File

@@ -0,0 +1,19 @@
fileFormatVersion: 2
guid: d813ff809ae82f643bf975031305d541
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Test Definitions/Scriptable
Objects/AutomatedTestScriptableObject.cs
uploadId: 681981

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 7cd52466a2239344d90c3043b7afc1e4
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,181 @@
using UnityEditor;
using UnityEngine;
using System.Linq;
using AssetStoreTools.Validator.Utility;
using AssetStoreTools.Validator.Data;
namespace AssetStoreTools.Validator.TestDefinitions
{
[CustomEditor(typeof(ValidationTestScriptableObject), true)]
internal class ValidationTestScriptableObjectInspector : UnityEditor.Editor
{
private enum FilterSeverity
{
Warning,
Fail
}
private enum FilterType
{
UseFilter,
ExcludeFilter
}
private ValidationTestScriptableObject _data;
private ValidationTestScriptableObject[] _allObjects;
private SerializedProperty _script;
private SerializedProperty _testScript;
private SerializedProperty _category;
private SerializedProperty _failFilterProperty;
private SerializedProperty _isInclusiveProperty;
private SerializedProperty _appliesToSubCategories;
private SerializedProperty _categoryFilter;
private bool _hadChanges;
private void OnEnable()
{
if (target == null) return;
_data = target as ValidationTestScriptableObject;
_script = serializedObject.FindProperty("m_Script");
_testScript = serializedObject.FindProperty(nameof(ValidationTestScriptableObject.TestScript));
_category = serializedObject.FindProperty(nameof(ValidationTestScriptableObject.CategoryInfo));
_failFilterProperty = _category.FindPropertyRelative(nameof(ValidationTestScriptableObject.CategoryInfo.IsFailFilter));
_isInclusiveProperty = _category.FindPropertyRelative(nameof(ValidationTestScriptableObject.CategoryInfo.IsInclusiveFilter));
_appliesToSubCategories = _category.FindPropertyRelative(nameof(ValidationTestScriptableObject.CategoryInfo.AppliesToSubCategories));
_categoryFilter = _category.FindPropertyRelative(nameof(ValidationTestScriptableObject.CategoryInfo.Filter));
_allObjects = ValidatorUtility.GetAutomatedTestCases(ValidatorUtility.SortType.Id);
_hadChanges = false;
}
public override void OnInspectorGUI()
{
serializedObject.Update();
EditorGUILayout.LabelField(GetInspectorTitle(), new GUIStyle(EditorStyles.centeredGreyMiniLabel) {fontSize = 24}, GUILayout.MinHeight(50));
EditorGUI.BeginDisabledGroup(true);
EditorGUILayout.PropertyField(_script);
EditorGUI.BeginChangeCheck();
// ID field
EditorGUILayout.IntField("Test Id", _data.Id);
if (!ValidateID())
EditorGUILayout.HelpBox("ID is already in use", MessageType.Warning);
EditorGUI.EndDisabledGroup();
// Other fields
_data.Title = EditorGUILayout.TextField("Title", _data.Title);
if (string.IsNullOrEmpty(_data.Title))
EditorGUILayout.HelpBox("Title cannot be empty", MessageType.Warning);
EditorGUILayout.LabelField("Description");
GUIStyle myTextAreaStyle = new GUIStyle(EditorStyles.textArea) { wordWrap = true };
_data.Description = EditorGUILayout.TextArea(_data.Description, myTextAreaStyle);
EditorGUILayout.PropertyField(_testScript);
if (_testScript.objectReferenceValue != null)
{
var generatedScriptType = (_testScript.objectReferenceValue as MonoScript).GetClass();
if (generatedScriptType == null || !generatedScriptType.GetInterfaces().Contains(typeof(ITestScript)))
EditorGUILayout.HelpBox($"Test Script does not derive from {nameof(ITestScript)}. Test execution will fail", MessageType.Warning);
}
else if (!string.IsNullOrEmpty(_data.Title))
{
var generatedScriptName = GenerateTestScriptName();
EditorGUILayout.LabelField($"Proposed script name: <i>{generatedScriptName}.cs</i>", new GUIStyle("Label") { richText = true });
EditorGUILayout.Space();
EditorGUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
if (GUILayout.Button("Generate Test Method Script", GUILayout.MaxWidth(200f)))
{
var generatedScript = ValidatorUtility.GenerateTestScript(generatedScriptName);
_testScript.objectReferenceValue = generatedScript;
}
EditorGUILayout.EndHorizontal();
}
// Category Filter Options
EditorGUILayout.Space(30);
var filterSeverity = (FilterSeverity)EditorGUILayout.EnumPopup("Fail Type", _failFilterProperty.boolValue ? FilterSeverity.Fail : FilterSeverity.Warning);
_failFilterProperty.boolValue = filterSeverity == FilterSeverity.Fail ? true : false;
var filterType = (FilterType)EditorGUILayout.EnumPopup("Filtering rule", _isInclusiveProperty.boolValue ? FilterType.UseFilter : FilterType.ExcludeFilter);
_isInclusiveProperty.boolValue = filterType == FilterType.UseFilter ? true : false;
EditorGUILayout.PropertyField(_appliesToSubCategories);
EditorGUILayout.Space(10);
EditorGUILayout.BeginHorizontal(GUI.skin.FindStyle("HelpBox"));
EditorGUILayout.LabelField(GetFilterDescription(_failFilterProperty.boolValue, _isInclusiveProperty.boolValue), new GUIStyle(GUI.skin.label) { wordWrap = true, richText = true });
EditorGUILayout.EndHorizontal();
EditorGUILayout.Space(10);
EditorGUILayout.PropertyField(_categoryFilter);
if (EditorGUI.EndChangeCheck())
{
EditorUtility.SetDirty(target);
_hadChanges = true;
}
_hadChanges = serializedObject.ApplyModifiedProperties() || _hadChanges;
}
private string GetInspectorTitle()
{
switch (_data)
{
case AutomatedTestScriptableObject _:
return "Automated Test";
default:
return "Miscellaneous Test";
}
}
private string GenerateTestScriptName()
{
var name = _data.Title.Replace(" ", "");
return name;
}
private string GetFilterDescription(bool isFailFilter, bool isInclusive)
{
string text = $"When a <i>{TestResult.ResultStatus.VariableSeverityIssue}</i> result type is returned from the test method:\n\n";
if(isFailFilter)
{
if(isInclusive)
return text + "• <b>Categories IN the filter</b> will result in a <color=red>FAIL</color>.\n• <b>Categories NOT in the filter</b> will result in a <color=yellow>WARNING</color>";
else
return text + "• <b>Categories NOT in the filter</b> will result in a <color=red>FAIL</color>.\n• <b>Categories IN the filter</b> will result in a <color=yellow>WARNING</color>";
}
else
{
if (isInclusive)
return text + "• <b>Categories IN the filter</b> will result in a <color=yellow>WARNING</color>.\n• <b>Categories NOT in the filter</b> will result in a <color=red>FAIL</color>";
else
return text + "• <b>Categories NOT in the filter</b> will result in a <color=yellow>WARNING</color>.\n• <b>Categories IN the filter</b> will result in a <color=red>FAIL</color>";
}
}
private bool ValidateID()
{
return !_allObjects.Any(x => x.Id == _data.Id && x != _data);
}
private void OnDisable()
{
if (!_hadChanges) return;
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
}
}

View File

@@ -0,0 +1,19 @@
fileFormatVersion: 2
guid: 06d76b0e6df91eb43ac956f883c4a2da
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Test Definitions/Scriptable
Objects/Editor/ValidationTestScriptableObjectInspector.cs
uploadId: 681981

View File

@@ -0,0 +1,33 @@
using AssetStoreTools.Validator.Categories;
using AssetStoreTools.Validator.Utility;
using UnityEditor;
using UnityEngine;
namespace AssetStoreTools.Validator.TestDefinitions
{
internal abstract class ValidationTestScriptableObject : ScriptableObject
{
[SerializeField, HideInInspector]
private bool HasBeenInitialized;
public int Id;
public string Title;
public string Description;
public ValidatorCategory CategoryInfo;
public MonoScript TestScript;
private void OnEnable()
{
// To do: maybe replace with Custom Inspector
if (HasBeenInitialized)
return;
var existingTestCases = ValidatorUtility.GetAutomatedTestCases(ValidatorUtility.SortType.Id);
if (existingTestCases.Length > 0)
Id = existingTestCases[existingTestCases.Length - 1].Id + 1;
else
Id = 1;
HasBeenInitialized = true;
}
}
}

View File

@@ -0,0 +1,19 @@
fileFormatVersion: 2
guid: 11c2422f057b75a458e184d169a00eb6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Test Definitions/Scriptable
Objects/ValidationTestScriptableObject.cs
uploadId: 681981

View File

@@ -0,0 +1,36 @@
using AssetStoreTools.Validator.Categories;
using AssetStoreTools.Validator.Data;
using UnityEditor;
namespace AssetStoreTools.Validator.TestDefinitions
{
internal abstract class ValidationTest
{
public int Id;
public string Title;
public string Description;
public MonoScript TestScript;
public ValidatorCategory CategoryInfo;
public TestResult Result;
protected ValidationTest(ValidationTestScriptableObject source)
{
Id = source.Id;
Title = source.Title;
Description = source.Description;
TestScript = source.TestScript;
CategoryInfo = source.CategoryInfo;
Result = new TestResult();
}
public abstract void Run(ValidationTestConfig config);
public string Slugify(string value)
{
string newValue = value.Replace(' ', '-').ToLower();
return newValue;
}
}
}

View File

@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 095d629656748914bb6202598876fdf4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Test Definitions/ValidationTest.cs
uploadId: 681981

View File

@@ -0,0 +1,7 @@
namespace AssetStoreTools.Validator.TestDefinitions
{
public class ValidationTestConfig
{
public string[] ValidationPaths;
}
}

View File

@@ -0,0 +1,18 @@
fileFormatVersion: 2
guid: 42aa5ee716f3fc340a5055b4c42a0b55
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Test Definitions/ValidationTestConfig.cs
uploadId: 681981

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 82d68ee644bbbb44183019f731e9f205
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,26 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check Animation Clips
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 31
Title: Check Animation Clips
Description: Animation Clips should not have the default name 'Take 001'. This
could lead to confusion when filtering assets by animation clips.
CategoryInfo:
IsFailFilter: 0
IsInclusiveFilter: 0
AppliesToSubCategories: 1
Filter:
- Animation
TestScript: {fileID: 11500000, guid: 7a28985886f182c4bacc89a44777c742, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: e0426dd01b5136a4ca1d42d312e12fad
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
Animation Clips.asset
uploadId: 681981

View File

@@ -0,0 +1,32 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check Audio Clipping
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 27
Title: Check Audio Clipping
Description: 'Audio files should not peak above the defined dB threshold of -0.3db
Please
note that lossless audio files that are imported into Unity with their Compression
Format set to anything other than PCM can still fail the Validator. If such cases
arise, please export your audio files with extra headroom, or set the Compression
Format to PCM if applicable.'
CategoryInfo:
IsFailFilter: 1
IsInclusiveFilter: 1
AppliesToSubCategories: 1
Filter:
- Audio
TestScript: {fileID: 11500000, guid: f604db0353da0cb46bb048f5cd37186f, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 03c6cd398931b3e41b0784e8589e153f
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
Audio Clipping.asset
uploadId: 681981

View File

@@ -0,0 +1,26 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check Colliders
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 4
Title: Check Colliders
Description: Prefabs with meshes inside them have to have colliders applied to
them, if the Prefabs are marked as Static. Please make sure you have appropriately
sized colliders applied to your prefabs.
CategoryInfo:
IsFailFilter: 1
IsInclusiveFilter: 1
AppliesToSubCategories: 1
Filter: []
TestScript: {fileID: 11500000, guid: 308b3d7b7a883b949a14f47cfd5c7ebe, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 28ab5af444cf3c849800ed0d8f4a3102
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
Colliders.asset
uploadId: 681981

View File

@@ -0,0 +1,31 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check Compressed Files
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 22
Title: Check Compressed Files
Description: "Package should not contain nested .unitypackage or archive files
that obscure most of, or the entirety of the content.\n\n.unitypackage files
are acceptable for including setup preferences, settings, supplemental files
for other Asset Store products, or alternative render pipeline content\n\n.zip
files are acceptable if they are compressing files that do not natively function
in the Unity Editor. (For example, Blender, HTML Documentation, or Visual Studio
Projects). Such files should include 'source' in the file name (e.g. \"Blender_source.zip\"
or \"PSDSource.zip\")."
CategoryInfo:
IsFailFilter: 1
IsInclusiveFilter: 1
AppliesToSubCategories: 1
Filter: []
TestScript: {fileID: 11500000, guid: 84b23febe0d923842aef73b95da5f25b, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 53189e6e51235b14192c4d5b3145dd27
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
Compressed Files.asset
uploadId: 681981

View File

@@ -0,0 +1,33 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check Demo Scenes
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 1
Title: Check Demo Scenes
Description: If your product has content to show off, it should be displayed in
a demo scene. Please provide a practical demo with all of your assets set up.
If your asset is based on scripting or Editor extensions, please consider adding
a demo scene showcasing the asset or showing setup steps in the scene.
CategoryInfo:
IsFailFilter: 1
IsInclusiveFilter: 1
AppliesToSubCategories: 1
Filter:
- 3D
- 2D
- Animation
- Essentials
- Templates
- VFX
TestScript: {fileID: 11500000, guid: f844c2dfa4669ff4eacf5591b544edaf, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: f108107be07f69045813d69eff580078
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
Demo Scenes.asset
uploadId: 681981

View File

@@ -0,0 +1,31 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check Documentation
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 6
Title: Check Documentation
Description: If your asset contains any code (scripts, shaders) - we ask that you
include offline documentation in the format of pdf or rtf with your submission,
as it is mandatory for all packages that include scripts or other components
that require set up. Your documentation must be organized with a table of contents
and numbered, written in English and have no grammar mistakes. Create a setup
guide with a step-by-step tutorial (pdf or video), as well as a script reference
if users will need to do any coding. If your asset contains art (3D models, sprites)
and you used code to set up a demo scene, you may skip this step.
CategoryInfo:
IsFailFilter: 1
IsInclusiveFilter: 1
AppliesToSubCategories: 1
Filter: []
TestScript: {fileID: 11500000, guid: 3c8425198983eda4c9b35aa0d59ea33c, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: b03433f7977b29e4ca7e8d76393a6c26
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
Documentation.asset
uploadId: 681981

View File

@@ -0,0 +1,31 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check Empty Prefabs
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 5
Title: Check Empty Prefabs
Description: Prefabs cannot be empty, please make sure that you set up your prefabs.
correctly.
CategoryInfo:
IsFailFilter: 1
IsInclusiveFilter: 1
AppliesToSubCategories: 1
Filter:
- 2D
- 3D
- Animation
- Essentials
- Templates
- VFX
TestScript: {fileID: 11500000, guid: 8055bed9373283e4793463b90b42f08f, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 08790ea0ed0fd274fb1df75ccc32d415
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
Empty Prefabs.asset
uploadId: 681981

View File

@@ -0,0 +1,26 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check File Menu Names
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 21
Title: Check File Menu Names
Description: File menus should be placed under an existing menu, such as "Window/<PackageName>".
If no existing menus are a good fit, they should be placed under a custom menu
called "Tools".
CategoryInfo:
IsFailFilter: 1
IsInclusiveFilter: 1
AppliesToSubCategories: 1
Filter: []
TestScript: {fileID: 11500000, guid: d8e3b12ecc1fcd74d9a9f8d2b549fc63, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: eaf232919893db04b8e05e91f6815424
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
File Menu Names.asset
uploadId: 681981

View File

@@ -0,0 +1,33 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check LODs
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 17
Title: Check LODs
Description: 'Prefabs containing meshes with ''LOD'' in their name must meet the
following requirements:
- LOD Mesh must be referenced by an LOD Group Component
-
LOD Mesh GameObject must be a child of an LOD Group Component.'
CategoryInfo:
IsFailFilter: 1
IsInclusiveFilter: 1
AppliesToSubCategories: 1
Filter:
- 3D
- Essentials
- Templates
TestScript: {fileID: 11500000, guid: 43b2158602f87704fa7b91561cfc8678, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: ad52ffa05767e9d4bb4d92093ad68b03
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
LODs.asset
uploadId: 681981

View File

@@ -0,0 +1,26 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check Line Endings
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 20
Title: Check Line Endings
Description: Inconsistent line endings in scripts might lead to incorrect line
numbers in stacktraces and compiler errors. Many text editors can fix this using
Convert Line Endings menu commands.
CategoryInfo:
IsFailFilter: 1
IsInclusiveFilter: 1
AppliesToSubCategories: 1
Filter: []
TestScript: {fileID: 11500000, guid: 85885005d1c594f42826de3555e98365, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 1e7b5480c1d8bda43ab4fa945939e243
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
Line Endings.asset
uploadId: 681981

View File

@@ -0,0 +1,26 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check Mesh Prefabs
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 2
Title: Check Mesh Prefabs
Description: Each mesh should have a corresponding prefab set up with all variations
of the texture/mesh/material that you are providing. Please create prefabs for
all of your imported objects.
CategoryInfo:
IsFailFilter: 1
IsInclusiveFilter: 1
AppliesToSubCategories: 1
Filter: []
TestScript: {fileID: 11500000, guid: 3c3d0d642ac6a6a48aa124a93dae3734, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 03b362b67028eb443b7ba8b84aedd5f2
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
Mesh Prefabs.asset
uploadId: 681981

View File

@@ -0,0 +1,25 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check Missing Components in Assets
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 9
Title: Check Missing Components in Assets
Description: We do not allow missing or broken material/texture/prefab/script connections
in your package. Please make sure none of your assets have missing components.
CategoryInfo:
IsFailFilter: 1
IsInclusiveFilter: 1
AppliesToSubCategories: 1
Filter: []
TestScript: {fileID: 11500000, guid: 22d8f814e2363e34ea220736a4042728, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 1a3d0b3827fc16347867bee335e8f4ea
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
Missing Components in Assets.asset
uploadId: 681981

View File

@@ -0,0 +1,25 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check Missing Components in Scenes
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 10
Title: Check Missing Components in Scenes
Description: We do not allow missing or broken material/texture/prefab/script connections
in your package. Please make sure none of your scene objects have missing components.
CategoryInfo:
IsFailFilter: 1
IsInclusiveFilter: 1
AppliesToSubCategories: 1
Filter: []
TestScript: {fileID: 11500000, guid: 511e76d0ebcb23d40a7b49dda0e2980f, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: bc2cb4e6635aa334ea4a52e2e3ce57c8
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
Missing Components in Scenes.asset
uploadId: 681981

View File

@@ -0,0 +1,29 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check Model Import Logs
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 32
Title: Check Model Import Logs
Description: Model assets should work without issues. Please make sure that there
are no errors or warnings when these models are imported.
CategoryInfo:
IsFailFilter: 1
IsInclusiveFilter: 1
AppliesToSubCategories: 1
Filter:
- 3D
- Animation
- Essentials
- Templates
TestScript: {fileID: 11500000, guid: 98f3ec209166855408eaf4abe5bff591, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: c889cdd91c2f41941a14363dad7a1a38
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
Model Import Logs.asset
uploadId: 681981

View File

@@ -0,0 +1,25 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check Model Orientation
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 7
Title: Check Model Orientation
Description: 'Meshes should be facing the correct way. The proper facing is: Z
vector is forward, Y vector is up, X vector is right.'
CategoryInfo:
IsFailFilter: 1
IsInclusiveFilter: 1
AppliesToSubCategories: 1
Filter: []
TestScript: {fileID: 11500000, guid: 56cdcdc41a80fbc46b5b2b83ec8d66d7, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 45b2b11da67e8864aacc62d928524b4c
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
Model Orientation.asset
uploadId: 681981

View File

@@ -0,0 +1,24 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check Model Types
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 23
Title: Check Model Types
Description: Mesh assets must be either .fbx, .dae, .abc, or .obj file types.
CategoryInfo:
IsFailFilter: 0
IsInclusiveFilter: 1
AppliesToSubCategories: 1
Filter: []
TestScript: {fileID: 11500000, guid: 428b1fb838e6f5a469bbfd26ca3fbfd2, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: ffef800a102b0e04cae1a3b98549ef1b
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
Model Types.asset
uploadId: 681981

View File

@@ -0,0 +1,25 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check Normal Map Textures
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 26
Title: Check Normal Map Textures
Description: Textures that are assigned to Materials as Normal Maps should have
their import Texture Type set to 'Normal Map'
CategoryInfo:
IsFailFilter: 0
IsInclusiveFilter: 1
AppliesToSubCategories: 1
Filter: []
TestScript: {fileID: 11500000, guid: d55cea510248f814eb2194c2b53f88d2, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 241ad0174fcadb64da867011d196acbb
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
Normal Map Textures.asset
uploadId: 681981

View File

@@ -0,0 +1,24 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check Package Size
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 30
Title: Check Package Size
Description: Package submissions should not be more than 6 GB in size
CategoryInfo:
IsFailFilter: 0
IsInclusiveFilter: 0
AppliesToSubCategories: 1
Filter: []
TestScript: {fileID: 11500000, guid: ee88143d11c82ff498e8318602cf22f8, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 5da4c440d3728ba40b183c1de4a1c384
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
Package Size.asset
uploadId: 681981

View File

@@ -0,0 +1,25 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check Particle Systems
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 25
Title: Check Particle Systems
Description: All Particle Systems should be saved as Prefabs
CategoryInfo:
IsFailFilter: 1
IsInclusiveFilter: 1
AppliesToSubCategories: 1
Filter:
- VFX
TestScript: {fileID: 11500000, guid: 6a623f7988c75884bb17b169ccd3e993, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 87da7eaed3cee0d4b8ada0b500e3a958
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
Particle Systems.asset
uploadId: 681981

View File

@@ -0,0 +1,25 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check Path Lengths
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 28
Title: Check Path Lengths
Description: Package content file paths should not be excessively lengthened. File
paths for assets must be under 140 characters
CategoryInfo:
IsFailFilter: 1
IsInclusiveFilter: 1
AppliesToSubCategories: 1
Filter: []
TestScript: {fileID: 11500000, guid: ae379305e9165e84584373a8272c09e7, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 21f8ec0602ffac045b1f4a93f8a9b555
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
Path Lengths.asset
uploadId: 681981

View File

@@ -0,0 +1,28 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check Prefab Transforms
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 3
Title: Check Prefab Transforms
Description: Prefabs must have their position/rotation set to 0, and their scale
set to 1.
CategoryInfo:
IsFailFilter: 1
IsInclusiveFilter: 1
AppliesToSubCategories: 1
Filter:
- 3D
- Essentials
- Templates
TestScript: {fileID: 11500000, guid: f712c17a60bf2d049a4e61c8f79e56c2, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 700026f446833f649a3c63b33a90a295
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
Prefab Transforms.asset
uploadId: 681981

View File

@@ -0,0 +1,25 @@
%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: d813ff809ae82f643bf975031305d541, type: 3}
m_Name: Check Script Compilation
m_EditorClassIdentifier:
HasBeenInitialized: 1
Id: 29
Title: Check Script Compilation
Description: Scripts in the package must compile successfully and not result in
compilation errors
CategoryInfo:
IsFailFilter: 1
IsInclusiveFilter: 1
AppliesToSubCategories: 1
Filter: []
TestScript: {fileID: 11500000, guid: 59db88f43969db8499299bce7f4fb967, type: 3}

View File

@@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 339e21c955642a04289482aa923e10b6
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 115
packageName: Asset Store Publishing Tools
packageVersion: 11.4.3
assetPath: Packages/com.unity.asset-store-tools/Editor/Validator/Scripts/Tests/Check
Script Compilation.asset
uploadId: 681981

Some files were not shown because too many files have changed in this diff Show More