Skip to content

Instantly share code, notes, and snippets.

@fabien0102
Last active June 6, 2016 10:09
Show Gist options
  • Save fabien0102/aa5e0a6cc07b788f760ac7ba7a395690 to your computer and use it in GitHub Desktop.
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).
#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