public void GetFirstOrNew()
        {
            RemoveAllGenericTypeAssets();

            //make sure that there is more asset of that type on the project
            string[] allGUIDs = AssetDatabase.FindAssets("t:" + typeof(UnitTestGenericType));
            Assert.IsTrue(allGUIDs == null || allGUIDs.Length == 0);

            //the function will create a new asset with the type passed in the generic parameter
            UnitTestGenericType unitTestGenericType = PolyEditorUtility.GetFirstOrNew <UnitTestGenericType>();

            //test it again, should return 1 value
            allGUIDs = AssetDatabase.FindAssets("t:" + typeof(UnitTestGenericType));
            Assert.IsTrue(allGUIDs != null && allGUIDs.Length == 1);
            UnitTestGenericType result = AssetDatabase.LoadAssetAtPath <UnitTestGenericType>(AssetDatabase.GUIDToAssetPath(allGUIDs[0]));

            Assert.IsNotNull(result);

            //call it one more time, ensure it will return the same result
            UnitTestGenericType secondResult = AssetDatabase.LoadAssetAtPath <UnitTestGenericType>(AssetDatabase.GUIDToAssetPath(allGUIDs[0]));

            Assert.AreEqual(result, secondResult);

            //cleanup
            AssetDatabase.DeleteAsset(AssetDatabase.GUIDToAssetPath(allGUIDs[0]));
        }