/* * Copyright 2015, The Querydsl Team (http://www.querydsl.com/team) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.querydsl.core.types.dsl; import static org.junit.Assert.*; import java.sql.Time; import java.util.Date; import java.util.Map; import org.junit.Test; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.util.BeanMap; public class PathBuilderTest { @Test public void getEnum() { PathBuilder<User> entityPath = new PathBuilder<User>(User.class, "entity"); EnumPath<Gender> enumPath = entityPath.getEnum("gender", Gender.class); assertNotNull(enumPath.ordinal()); assertEquals(enumPath, entityPath.get(enumPath)); } @Test public void getByExample() { User user = new User(); user.setFirstName("firstName"); user.setLastName("lastName"); String byExample = getByExample(user).toString(); assertTrue(byExample.contains("entity.lastName = lastName")); assertTrue(byExample.contains("entity.firstName = firstName")); } @Test public void getArray() { PathBuilder<User> entityPath = new PathBuilder<User>(User.class, "entity"); ArrayPath<String[], String> array = entityPath.getArray("array", String[].class); assertEquals(String[].class, array.getType()); assertEquals(String.class, array.getElementType()); } @Test public void getList() { PathBuilder<User> entityPath = new PathBuilder<User>(User.class, "entity"); entityPath.getList("list", String.class, StringPath.class).get(0).lower(); entityPath.getList("list", String.class).get(0); } @Test public void getMap() { PathBuilder<User> entityPath = new PathBuilder<User>(User.class, "entity"); entityPath.getMap("map", String.class, String.class, StringPath.class).get("").lower(); entityPath.getMap("map", String.class, String.class).get(""); } @SuppressWarnings("unchecked") private <T> BooleanBuilder getByExample(T entity) { PathBuilder<T> entityPath = new PathBuilder<T>((Class<T>) entity.getClass(), "entity"); BooleanBuilder conditions = new BooleanBuilder(); Map<String, Object> beanMap = new BeanMap(entity); for (Map.Entry<String, Object> entry : beanMap.entrySet()) { if (!entry.getKey().equals("class")) { if (entry.getValue() != null) { conditions.and(entityPath.get(entry.getKey()).eq(entry.getValue())); } } } return conditions; } @Test public void get() { PathBuilder<User> entity = new PathBuilder<User>(User.class, "entity"); NumberPath<Integer> intPath = new NumberPath<Integer>(Integer.class, "int"); StringPath strPath = new StringPath("str"); BooleanPath booleanPath = new BooleanPath("boolean"); assertEquals("entity.int", entity.get(intPath).toString()); assertEquals("entity.str", entity.get(strPath).toString()); assertEquals("entity.boolean", entity.get(booleanPath).toString()); assertEquals("entity.int", entity.get(entity.get(intPath)).toString()); } @Test public void various() { PathBuilder<User> entity = new PathBuilder<User>(User.class, "entity"); entity.getBoolean("boolean"); entity.getCollection("col", User.class); entity.getComparable("comparable", Comparable.class); entity.getDate("date", Date.class); entity.getDateTime("dateTime", Date.class); entity.getList("list", User.class); entity.getMap("map", String.class, User.class); entity.getNumber("number", Integer.class); entity.getSet("set", User.class); entity.getSimple("simple", Object.class); entity.getString("string"); entity.getTime("time", Time.class); } @Test public void calling_get_with_the_same_name_and_different_types_returns_correct_type() { PathBuilder<User> entity = new PathBuilder<User>(User.class, "entity"); String pathName = "some_path"; assertEquals(Object.class, entity.get(pathName).getType()); assertEquals(Integer.class, entity.get(pathName, Integer.class).getType()); assertEquals(User.class, entity.get(pathName, User.class).getType()); } @Test public void calling_get_with_the_same_name_and_different_types_returns_specific_type_when_validating() { PathBuilder<User> entity = new PathBuilder<User>(User.class, "entity", PathBuilderValidator.FIELDS); String pathName = "username"; assertEquals(String.class, entity.get(pathName).getType()); assertEquals(String.class, entity.get(pathName, Comparable.class).getType()); assertEquals(String.class, entity.get(pathName, Object.class).getType()); } }