Last active
June 6, 2016 10:09
-
-
Save fabien0102/aa5e0a6cc07b788f760ac7ba7a395690 to your computer and use it in GitHub Desktop.
Unit tests for photoshop. Example from Hidden Object Game naming rules (1 folder per object with 4 specifics layers).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#target photoshop | |
var document = app.activeDocument; | |
var itemsTypes = "obscured,hotspot,whole,shadow"; | |
var output = ""; | |
for ( var i = 0; i < document.layerSets.length; i++) { | |
validateLayerSet(document.layerSets[i]); | |
}; | |
if (output === "") { | |
alert( "No error ;)" ); | |
}else { | |
output += "\n\n Tips: You can filter layer name with `[Error]` value ;)"; | |
alert( output, "Some errors detected", true ); | |
} | |
function validateLayerSet ( layerSet ) { | |
// Take only layerSet without children | |
for ( var i = 0; i < layerSet.layerSets.length; i++ ) validateLayerSet( layerSet.layerSets[i] ); | |
if ( layerSet.typename != "LayerSet" || layerSet.layerSets.length > 0 ) return; | |
// Ensure layer name is without `[Error]` prefix | |
if ( layerSet.name.indexOf( "[Error]" ) !== -1 ) layerSet.name = layerSet.name.slice( 8 ); | |
// Parse layer name | |
var decomposedName = layerSet.name.split( ":" ); | |
var type = decomposedName[0]; | |
var name = decomposedName[1]; | |
// check if layerSet is on format `type:name` or `type:name:specialType` | |
if ( decomposedName.length < 2 || decomposedName.length > 3 ) markLayer( layerSet, "format must be `type:name` or `type:name:specialType`" ); | |
// check if name is in PascalCase | |
if ( name.indexOf( " " ) !== -1 ) markLayer(layerSet, "item name must be in PascalCase" ); | |
if ( name.indexOf( "-" ) !== -1 ) markLayer(layerSet, "item name must be in PascalCase" ); | |
if ( name.indexOf( "_" ) !== -1 ) markLayer(layerSet, "item name must be in PascalCase" ); | |
if ( name[0] !== name[0].toUpperCase() ) markLayer(layerSet, "item name must be in PascalCase" ); | |
// check layers names | |
var itemLayers = {obscured:0, hotspot: 0, whole: 0, shadow: 0}; | |
for ( var i = 0; i < layerSet.layers.length; i++) validateLayerName( type, layerSet.layers[i], itemLayers ); | |
// check item layers type | |
if ( type === "item" ) { | |
if ( itemLayers.whole === 0 ) markLayer( layerSet, "missing whole layer" ); | |
if ( itemLayers.whole > 1 ) markLayer( layerSet, "to many whole layers" ); | |
if ( itemLayers.obscured > 1 ) markLayer( layerSet, "to many obscured layers" ); | |
if ( itemLayers.hotspot > 1 ) markLayer( layerSet, "to many hotspot layers" ); | |
if ( itemLayers.shadow > 1 ) markLayer( layerSet, "to many shadow layers" ); | |
} | |
} | |
function validateLayerName ( type, layer, itemLayers ) { | |
if ( type === "item" ) { | |
if (itemsTypes.indexOf(layer.name) === -1) markLayer( layer, "item layer must have`obscured`, `hotspot`, `whole` or `shadow` name" ); | |
itemLayers[layer.name] += 1; | |
} | |
} | |
function markLayer ( layer, debugMessage ) { | |
$.writeln(layer.name + " -> " + debugMessage ); | |
output += layer.name + " -> " + debugMessage + "\n"; | |
layer.name = "[Error] " + layer.name; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment