// Path: src/test/java/at/pollux/thymeleaf/shiro/test/user/TestUsers.java
// public enum TestUsers {
//     ALICE(new TestUser("u1", "p1", Sets.newHashSet(
//             TestRoles.ROLE_A, TestRoles.ROLE_D
//     ))),
//     BOB(new TestUser("u2", "p2", Sets.newHashSet(
//             TestRoles.ROLE_B, TestRoles.ROLE_C
//     ))),
//     CAESAR(new TestUser("u3", "p3", Sets.newHashSet(
//             TestRoles.ROLE_C, TestRoles.ROLE_E
//     )));
// 
//     private static Joiner comaJoiner = Joiner.on(",");
// 
//     private final TestUser delegate;
// 
//     TestUsers(TestUser user) {
//         this.delegate = user;
//     }
// 
//     public String email() {
//         return delegate.getEmail();
//     }
// 
//     public String password() {
//         return delegate.getPassword();
//     }
// 
//     public String roles() {
//         return comaJoiner.join(
//                 delegate.getPassword(), comaJoiner.join(
//                         Collections2.transform(delegate.getRoles(), new Function<TestRoles, String>() {
//                             public String apply(TestRoles input) {
//                                 return input.label();
//                             }
//                         }))
//         );
//     }
// 
//     public Collection<String> permissions() {
//         return Collections2.transform(delegate.getRoles(), new Function<TestRoles, String>() {
//             public String apply(TestRoles input) {
//                 return input.permissions();
//             }
//         });
//     }
// }
// 
// Path: src/test/java/at/pollux/thymeleaf/shiro/test/user/TestUsers.java
// public enum TestUsers {
//     ALICE(new TestUser("u1", "p1", Sets.newHashSet(
//             TestRoles.ROLE_A, TestRoles.ROLE_D
//     ))),
//     BOB(new TestUser("u2", "p2", Sets.newHashSet(
//             TestRoles.ROLE_B, TestRoles.ROLE_C
//     ))),
//     CAESAR(new TestUser("u3", "p3", Sets.newHashSet(
//             TestRoles.ROLE_C, TestRoles.ROLE_E
//     )));
// 
//     private static Joiner comaJoiner = Joiner.on(",");
// 
//     private final TestUser delegate;
// 
//     TestUsers(TestUser user) {
//         this.delegate = user;
//     }
// 
//     public String email() {
//         return delegate.getEmail();
//     }
// 
//     public String password() {
//         return delegate.getPassword();
//     }
// 
//     public String roles() {
//         return comaJoiner.join(
//                 delegate.getPassword(), comaJoiner.join(
//                         Collections2.transform(delegate.getRoles(), new Function<TestRoles, String>() {
//                             public String apply(TestRoles input) {
//                                 return input.label();
//                             }
//                         }))
//         );
//     }
// 
//     public Collection<String> permissions() {
//         return Collections2.transform(delegate.getRoles(), new Function<TestRoles, String>() {
//             public String apply(TestRoles input) {
//                 return input.permissions();
//             }
//         });
//     }
// }


import at.pollux.thymeleaf.shiro.test.user.TestUsers;
import com.google.common.collect.Sets;
import org.thymeleaf.context.Context;
import static at.pollux.thymeleaf.shiro.test.user.TestUsers.*;
import static junitparams.JUnitParamsRunner.$;
package at.pollux.thymeleaf.shiro.test.mother;



/**
 * Created by tbk.
 */
public class PermissionsMother {

    private static Context contextWithPermission(Object permissions) {
        final Context context = new Context();
        context.setVariable("permissions", permissions);
        return context;
    }

    public static class HasAnyPermissions {

        public static class ShouldRenderForUser {
            public static Object[] provideAlice() {
                return $(ALICE);
            }

            public static Object[] provideBob() {
                return $(BOB);
            }
        }

        public static class ShouldNotRenderForUser {
            public static Object[] provideGuest() {
                return new Object[]{null};
            }

            public static Object[] provideCaesar() {
                return $(CAESAR);
            }
        }

        public static class ShouldRenderExpression {
// Path: src/test/java/at/pollux/thymeleaf/shiro/test/user/TestUsers.java
// public enum TestUsers {
//     ALICE(new TestUser("u1", "p1", Sets.newHashSet(
//             TestRoles.ROLE_A, TestRoles.ROLE_D
//     ))),
//     BOB(new TestUser("u2", "p2", Sets.newHashSet(
//             TestRoles.ROLE_B, TestRoles.ROLE_C
//     ))),
//     CAESAR(new TestUser("u3", "p3", Sets.newHashSet(
//             TestRoles.ROLE_C, TestRoles.ROLE_E
//     )));
// 
//     private static Joiner comaJoiner = Joiner.on(",");
// 
//     private final TestUser delegate;
// 
//     TestUsers(TestUser user) {
//         this.delegate = user;
//     }
// 
//     public String email() {
//         return delegate.getEmail();
//     }
// 
//     public String password() {
//         return delegate.getPassword();
//     }
// 
//     public String roles() {
//         return comaJoiner.join(
//                 delegate.getPassword(), comaJoiner.join(
//                         Collections2.transform(delegate.getRoles(), new Function<TestRoles, String>() {
//                             public String apply(TestRoles input) {
//                                 return input.label();
//                             }
//                         }))
//         );
//     }
// 
//     public Collection<String> permissions() {
//         return Collections2.transform(delegate.getRoles(), new Function<TestRoles, String>() {
//             public String apply(TestRoles input) {
//                 return input.permissions();
//             }
//         });
//     }
// }
// 
// Path: src/test/java/at/pollux/thymeleaf/shiro/test/user/TestUsers.java
// public enum TestUsers {
//     ALICE(new TestUser("u1", "p1", Sets.newHashSet(
//             TestRoles.ROLE_A, TestRoles.ROLE_D
//     ))),
//     BOB(new TestUser("u2", "p2", Sets.newHashSet(
//             TestRoles.ROLE_B, TestRoles.ROLE_C
//     ))),
//     CAESAR(new TestUser("u3", "p3", Sets.newHashSet(
//             TestRoles.ROLE_C, TestRoles.ROLE_E
//     )));
// 
//     private static Joiner comaJoiner = Joiner.on(",");
// 
//     private final TestUser delegate;
// 
//     TestUsers(TestUser user) {
//         this.delegate = user;
//     }
// 
//     public String email() {
//         return delegate.getEmail();
//     }
// 
//     public String password() {
//         return delegate.getPassword();
//     }
// 
//     public String roles() {
//         return comaJoiner.join(
//                 delegate.getPassword(), comaJoiner.join(
//                         Collections2.transform(delegate.getRoles(), new Function<TestRoles, String>() {
//                             public String apply(TestRoles input) {
//                                 return input.label();
//                             }
//                         }))
//         );
//     }
// 
//     public Collection<String> permissions() {
//         return Collections2.transform(delegate.getRoles(), new Function<TestRoles, String>() {
//             public String apply(TestRoles input) {
//                 return input.permissions();
//             }
//         });
//     }
// }


// Path: src/test/java/at/pollux/thymeleaf/shiro/test/mother/PermissionsMother.java
import at.pollux.thymeleaf.shiro.test.user.TestUsers;
import com.google.common.collect.Sets;
import org.thymeleaf.context.Context;
import static at.pollux.thymeleaf.shiro.test.user.TestUsers.*;
import static junitparams.JUnitParamsRunner.$;

package at.pollux.thymeleaf.shiro.test.mother;



/**
 * Created by tbk.
 */
public class PermissionsMother {

    private static Context contextWithPermission(Object permissions) {
        final Context context = new Context();
        context.setVariable("permissions", permissions);
        return context;
    }

    public static class HasAnyPermissions {

        public static class ShouldRenderForUser {
            public static Object[] provideAlice() {
                return $(ALICE);
            }

            public static Object[] provideBob() {
                return $(BOB);
            }
        }

        public static class ShouldNotRenderForUser {
            public static Object[] provideGuest() {
                return new Object[]{null};
            }

            public static Object[] provideCaesar() {
                return $(CAESAR);
            }
        }

        public static class ShouldRenderExpression {
            private static Object[] paramsForUser(TestUsers user) {