mockito new tutorial
This commit is contained in:
parent
cf73a09b62
commit
ab9969a393
|
@ -0,0 +1,36 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<classpath>
|
||||||
|
<classpathentry kind="src" output="target/classes" path="src/main/java">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="optional" value="true"/>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="optional" value="true"/>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="maven.pomderived" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="output" path="target/classes"/>
|
||||||
|
</classpath>
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType">
|
||||||
|
<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_BUILDER_ENABLED" value="false"/>
|
||||||
|
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_DISABLED_BUILDER" value="org.eclipse.wst.jsdt.core.javascriptValidator"/>
|
||||||
|
<mapAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS"/>
|
||||||
|
<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
|
||||||
|
</launchConfiguration>
|
|
@ -0,0 +1,13 @@
|
||||||
|
*.class
|
||||||
|
|
||||||
|
#folders#
|
||||||
|
/target
|
||||||
|
/neoDb*
|
||||||
|
/data
|
||||||
|
/src/main/webapp/WEB-INF/classes
|
||||||
|
*/META-INF/*
|
||||||
|
|
||||||
|
# Packaged files #
|
||||||
|
*.jar
|
||||||
|
*.war
|
||||||
|
*.ear
|
|
@ -0,0 +1,36 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>mockito</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.wst.common.project.facet.core.builder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.wst.validation.validationbuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.m2e.core.maven2Builder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
|
||||||
|
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
|
||||||
|
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||||
|
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
||||||
|
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<classpath>
|
||||||
|
<classpathentry kind="src" path="src/main/webapp"/>
|
||||||
|
<classpathentry kind="output" path=""/>
|
||||||
|
</classpath>
|
|
@ -0,0 +1,95 @@
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
|
||||||
|
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
|
||||||
|
org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
|
||||||
|
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||||
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
|
||||||
|
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||||
|
org.eclipse.jdt.core.compiler.compliance=1.7
|
||||||
|
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||||
|
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||||
|
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||||
|
org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.deadCode=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.deprecation=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.fieldHiding=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.localVariableHiding=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.nullReference=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedImport=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
|
||||||
|
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
|
||||||
|
org.eclipse.jdt.core.compiler.source=1.7
|
|
@ -0,0 +1,55 @@
|
||||||
|
#Sat Jan 21 23:04:06 EET 2012
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
|
||||||
|
sp_cleanup.add_default_serial_version_id=true
|
||||||
|
sp_cleanup.add_generated_serial_version_id=false
|
||||||
|
sp_cleanup.add_missing_annotations=true
|
||||||
|
sp_cleanup.add_missing_deprecated_annotations=true
|
||||||
|
sp_cleanup.add_missing_methods=false
|
||||||
|
sp_cleanup.add_missing_nls_tags=false
|
||||||
|
sp_cleanup.add_missing_override_annotations=true
|
||||||
|
sp_cleanup.add_missing_override_annotations_interface_methods=true
|
||||||
|
sp_cleanup.add_serial_version_id=false
|
||||||
|
sp_cleanup.always_use_blocks=true
|
||||||
|
sp_cleanup.always_use_parentheses_in_expressions=true
|
||||||
|
sp_cleanup.always_use_this_for_non_static_field_access=false
|
||||||
|
sp_cleanup.always_use_this_for_non_static_method_access=false
|
||||||
|
sp_cleanup.convert_to_enhanced_for_loop=true
|
||||||
|
sp_cleanup.correct_indentation=true
|
||||||
|
sp_cleanup.format_source_code=true
|
||||||
|
sp_cleanup.format_source_code_changes_only=true
|
||||||
|
sp_cleanup.make_local_variable_final=true
|
||||||
|
sp_cleanup.make_parameters_final=true
|
||||||
|
sp_cleanup.make_private_fields_final=false
|
||||||
|
sp_cleanup.make_type_abstract_if_missing_method=false
|
||||||
|
sp_cleanup.make_variable_declarations_final=true
|
||||||
|
sp_cleanup.never_use_blocks=false
|
||||||
|
sp_cleanup.never_use_parentheses_in_expressions=false
|
||||||
|
sp_cleanup.on_save_use_additional_actions=true
|
||||||
|
sp_cleanup.organize_imports=true
|
||||||
|
sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
|
||||||
|
sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
|
||||||
|
sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
|
||||||
|
sp_cleanup.qualify_static_member_accesses_with_declaring_class=true
|
||||||
|
sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
|
||||||
|
sp_cleanup.remove_private_constructors=true
|
||||||
|
sp_cleanup.remove_trailing_whitespaces=true
|
||||||
|
sp_cleanup.remove_trailing_whitespaces_all=true
|
||||||
|
sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
|
||||||
|
sp_cleanup.remove_unnecessary_casts=true
|
||||||
|
sp_cleanup.remove_unnecessary_nls_tags=false
|
||||||
|
sp_cleanup.remove_unused_imports=true
|
||||||
|
sp_cleanup.remove_unused_local_variables=false
|
||||||
|
sp_cleanup.remove_unused_private_fields=true
|
||||||
|
sp_cleanup.remove_unused_private_members=false
|
||||||
|
sp_cleanup.remove_unused_private_methods=true
|
||||||
|
sp_cleanup.remove_unused_private_types=true
|
||||||
|
sp_cleanup.sort_members=false
|
||||||
|
sp_cleanup.sort_members_all=false
|
||||||
|
sp_cleanup.use_blocks=false
|
||||||
|
sp_cleanup.use_blocks_only_for_return_and_throw=false
|
||||||
|
sp_cleanup.use_parentheses_in_expressions=false
|
||||||
|
sp_cleanup.use_this_for_non_static_field_access=true
|
||||||
|
sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
|
||||||
|
sp_cleanup.use_this_for_non_static_method_access=true
|
||||||
|
sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
|
|
@ -0,0 +1,4 @@
|
||||||
|
activeProfiles=
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
resolveWorkspaceProjects=true
|
||||||
|
version=1
|
|
@ -0,0 +1,2 @@
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.m2e.wtp.enabledProjectSpecificPrefs=false
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
|
||||||
|
<wb-module deploy-name="spring-rest">
|
||||||
|
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
|
||||||
|
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
|
||||||
|
<property name="context-root" value="spring-rest"/>
|
||||||
|
<property name="java-output-path" value="/spring-rest/target/classes"/>
|
||||||
|
</wb-module>
|
||||||
|
</project-modules>
|
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<faceted-project>
|
||||||
|
<installed facet="java" version="1.7"/>
|
||||||
|
</faceted-project>
|
|
@ -0,0 +1 @@
|
||||||
|
org.eclipse.wst.jsdt.launching.baseBrowserLibrary
|
|
@ -0,0 +1 @@
|
||||||
|
Window
|
|
@ -0,0 +1,14 @@
|
||||||
|
DELEGATES_PREFERENCE=delegateValidatorList
|
||||||
|
USER_BUILD_PREFERENCE=enabledBuildValidatorListorg.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;
|
||||||
|
USER_MANUAL_PREFERENCE=enabledManualValidatorListorg.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;
|
||||||
|
USER_PREFERENCE=overrideGlobalPreferencestruedisableAllValidationfalseversion1.2.303.v201202090300
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
override=true
|
||||||
|
suspend=false
|
||||||
|
vals/org.eclipse.jst.jsf.ui.JSFAppConfigValidator/global=FF01
|
||||||
|
vals/org.eclipse.jst.jsp.core.JSPBatchValidator/global=FF01
|
||||||
|
vals/org.eclipse.jst.jsp.core.JSPContentValidator/global=FF01
|
||||||
|
vals/org.eclipse.jst.jsp.core.TLDValidator/global=FF01
|
||||||
|
vals/org.eclipse.wst.dtd.core.dtdDTDValidator/global=FF01
|
||||||
|
vals/org.eclipse.wst.jsdt.web.core.JsBatchValidator/global=TF02
|
||||||
|
vf.version=3
|
|
@ -0,0 +1,2 @@
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.wst.ws.service.policy.projectEnabled=false
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<beansProjectDescription>
|
||||||
|
<version>1</version>
|
||||||
|
<pluginVersion><![CDATA[3.3.0.201307091516-RELEASE]]></pluginVersion>
|
||||||
|
<configSuffixes>
|
||||||
|
<configSuffix><![CDATA[xml]]></configSuffix>
|
||||||
|
</configSuffixes>
|
||||||
|
<enableImports><![CDATA[false]]></enableImports>
|
||||||
|
<configs>
|
||||||
|
<config>src/main/webapp/WEB-INF/api-servlet.xml</config>
|
||||||
|
</configs>
|
||||||
|
<configSets>
|
||||||
|
</configSets>
|
||||||
|
</beansProjectDescription>
|
|
@ -0,0 +1,8 @@
|
||||||
|
=========
|
||||||
|
|
||||||
|
## Guava Cookbooks and Examples
|
||||||
|
|
||||||
|
|
||||||
|
### Relevant Articles:
|
||||||
|
- [Guava Collections Cookbook](http://www.baeldung.com/guava-collections)
|
||||||
|
|
|
@ -0,0 +1,110 @@
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>org.baeldung</groupId>
|
||||||
|
<artifactId>spring-rest</artifactId>
|
||||||
|
<version>0.1-SNAPSHOT</version>
|
||||||
|
|
||||||
|
<name>spring-rest</name>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
|
||||||
|
<!-- utils -->
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.guava</groupId>
|
||||||
|
<artifactId>guava</artifactId>
|
||||||
|
<version>15.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- web -->
|
||||||
|
|
||||||
|
<!-- test scoped -->
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit-dep</artifactId>
|
||||||
|
<version>${junit.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.hamcrest</groupId>
|
||||||
|
<artifactId>hamcrest-core</artifactId>
|
||||||
|
<version>${org.hamcrest.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.hamcrest</groupId>
|
||||||
|
<artifactId>hamcrest-library</artifactId>
|
||||||
|
<version>${org.hamcrest.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mockito</groupId>
|
||||||
|
<artifactId>mockito-core</artifactId>
|
||||||
|
<version>${mockito.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<finalName>spring-rest</finalName>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/resources</directory>
|
||||||
|
<filtering>true</filtering>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
|
||||||
|
<plugins>
|
||||||
|
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<version>${maven-surefire-plugin.version}</version>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
</plugins>
|
||||||
|
|
||||||
|
</build>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<!-- Spring -->
|
||||||
|
<org.springframework.version>3.2.4.RELEASE</org.springframework.version>
|
||||||
|
<org.springframework.security.version>3.1.4.RELEASE</org.springframework.security.version>
|
||||||
|
|
||||||
|
<!-- persistence -->
|
||||||
|
<hibernate.version>4.2.4.Final</hibernate.version>
|
||||||
|
<mysql-connector-java.version>5.1.26</mysql-connector-java.version>
|
||||||
|
|
||||||
|
<!-- logging -->
|
||||||
|
<org.slf4j.version>1.7.5</org.slf4j.version>
|
||||||
|
<logback.version>1.0.11</logback.version>
|
||||||
|
|
||||||
|
<!-- various -->
|
||||||
|
<hibernate-validator.version>5.0.1.Final</hibernate-validator.version>
|
||||||
|
|
||||||
|
<!-- util -->
|
||||||
|
<guava.version>15.0</guava.version>
|
||||||
|
<commons-lang3.version>3.1</commons-lang3.version>
|
||||||
|
|
||||||
|
<!-- testing -->
|
||||||
|
<org.hamcrest.version>1.3</org.hamcrest.version>
|
||||||
|
<junit.version>4.11</junit.version>
|
||||||
|
<mockito.version>1.9.5</mockito.version>
|
||||||
|
|
||||||
|
<httpcore.version>4.2.4</httpcore.version>
|
||||||
|
<httpclient.version>4.2.5</httpclient.version>
|
||||||
|
|
||||||
|
<rest-assured.version>1.8.1</rest-assured.version>
|
||||||
|
<groovy.version>1.8.9</groovy.version>
|
||||||
|
|
||||||
|
<!-- Maven plugins -->
|
||||||
|
<cargo-maven2-plugin.version>1.4.3</cargo-maven2-plugin.version>
|
||||||
|
<maven-surefire-plugin.version>2.16</maven-surefire-plugin.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,20 @@
|
||||||
|
<configuration>
|
||||||
|
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>web - %date [%thread] %-5level %logger{36} - %message%n
|
||||||
|
</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<logger name="org.springframework" level="WARN" />
|
||||||
|
<logger name="org.springframework.transaction" level="WARN" />
|
||||||
|
|
||||||
|
<!-- in order to debug some marshalling issues, this needs to be TRACE -->
|
||||||
|
<logger name="org.springframework.web.servlet.mvc" level="WARN" />
|
||||||
|
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
|
||||||
|
</configuration>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd" >
|
||||||
|
|
||||||
|
</beans>
|
|
@ -0,0 +1,42 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
|
||||||
|
xsi:schemaLocation="
|
||||||
|
http://java.sun.com/xml/ns/javaee
|
||||||
|
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
|
||||||
|
id="WebApp_ID" version="3.0">
|
||||||
|
|
||||||
|
<display-name>Spring MVC Application</display-name>
|
||||||
|
|
||||||
|
<!-- Spring root -->
|
||||||
|
<context-param>
|
||||||
|
<param-name>contextClass</param-name>
|
||||||
|
<param-value>
|
||||||
|
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
|
||||||
|
</param-value>
|
||||||
|
</context-param>
|
||||||
|
<context-param>
|
||||||
|
<param-name>contextConfigLocation</param-name>
|
||||||
|
<param-value>org.baeldung.config</param-value>
|
||||||
|
</context-param>
|
||||||
|
|
||||||
|
<listener>
|
||||||
|
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
|
||||||
|
</listener>
|
||||||
|
|
||||||
|
<!-- Spring child -->
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>api</servlet-name>
|
||||||
|
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
|
||||||
|
<load-on-startup>1</load-on-startup>
|
||||||
|
</servlet>
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>api</servlet-name>
|
||||||
|
<url-pattern>/</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
|
<welcome-file-list>
|
||||||
|
<welcome-file />
|
||||||
|
</welcome-file-list>
|
||||||
|
|
||||||
|
</web-app>
|
|
@ -0,0 +1,189 @@
|
||||||
|
package org.baeldung.guava;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertNull;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.NoSuchElementException;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.google.common.base.Function;
|
||||||
|
import com.google.common.base.Predicate;
|
||||||
|
import com.google.common.base.Predicates;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
import com.google.common.collect.Iterables;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
import com.google.common.collect.Sets;
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public class GuavaCollectionsExamplesTest {
|
||||||
|
|
||||||
|
// tests
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenDowncastingGenerifiedCollectionToNewGenerifiedCollection_thenCastIsOK() {
|
||||||
|
final class CastFunction<F, T extends F> implements Function<F, T> {
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public final T apply(final F from) {
|
||||||
|
return (T) from;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final List<Number> originalList = Lists.newArrayList();
|
||||||
|
final List<Integer> selectedProducts = Lists.transform(originalList, new CastFunction<Number, Integer>());
|
||||||
|
System.out.println(selectedProducts);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings({ "unchecked" })
|
||||||
|
@Test
|
||||||
|
public final void whenDowncastingGenerifiedCollectionToNewGenerifiedCollection_thenCastIsOK2() {
|
||||||
|
final List<Number> originalList = Lists.newArrayList();
|
||||||
|
final List<Integer> selectedProducts = (List<Integer>) (List<? extends Number>) originalList;
|
||||||
|
System.out.println(selectedProducts);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenAddingAnIterableToACollection_thenAddedOK() {
|
||||||
|
final Iterable<String> iter = Lists.newArrayList();
|
||||||
|
final Collection<String> collector = Lists.newArrayList();
|
||||||
|
Iterables.addAll(collector, iter);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenCheckingIfCollectionContainsElementsByCustomMatch1_thenContains() {
|
||||||
|
final Iterable<String> theCollection = Lists.newArrayList("a", "bc", "def");
|
||||||
|
final boolean contains = Iterables.any(theCollection, new Predicate<String>() {
|
||||||
|
@Override
|
||||||
|
public final boolean apply(final String input) {
|
||||||
|
return input.length() == 1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
assertTrue(contains);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenCheckingIfCollectionContainsElementsByCustomMatch2_thenContains() {
|
||||||
|
final Set<String> theCollection = Sets.newHashSet("a", "bc", "def");
|
||||||
|
|
||||||
|
final boolean contains = !Sets.filter(theCollection, new Predicate<String>() {
|
||||||
|
@Override
|
||||||
|
public final boolean apply(final String input) {
|
||||||
|
return input.length() == 1;
|
||||||
|
}
|
||||||
|
}).isEmpty();
|
||||||
|
|
||||||
|
assertTrue(contains);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenCheckingIfCollectionContainsElementsByCustomMatch3_thenContains() {
|
||||||
|
final Iterable<String> theCollection = Sets.newHashSet("a", "bc", "def");
|
||||||
|
|
||||||
|
final boolean contains = Iterables.find(theCollection, new Predicate<String>() {
|
||||||
|
@Override
|
||||||
|
public final boolean apply(final String input) {
|
||||||
|
return input.length() == 1;
|
||||||
|
}
|
||||||
|
}) != null;
|
||||||
|
|
||||||
|
assertTrue(contains);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
@Test(expected = NoSuchElementException.class)
|
||||||
|
public final void givenNoSearchResult_whenFindingElementInIterable_thenException() {
|
||||||
|
final Iterable<String> theCollection = Sets.newHashSet("abcd", "efgh", "ijkl");
|
||||||
|
|
||||||
|
final String found = Iterables.find(theCollection, new Predicate<String>() {
|
||||||
|
@Override
|
||||||
|
public final boolean apply(final String input) {
|
||||||
|
return input.length() == 1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
assertNull(found);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void givenNoSearchResult_whenFindingElementInIterableWithSpecifiedReturn_thenNoException() {
|
||||||
|
final Iterable<String> theCollection = Sets.newHashSet("abcd", "efgh", "ijkl");
|
||||||
|
|
||||||
|
final Predicate<String> inputOfLengthOne = new Predicate<String>() {
|
||||||
|
@Override
|
||||||
|
public final boolean apply(final String input) {
|
||||||
|
return input.length() == 1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
final String found = Iterables.find(theCollection, inputOfLengthOne, null);
|
||||||
|
|
||||||
|
assertNull(found);
|
||||||
|
}
|
||||||
|
|
||||||
|
// purge of nulls
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void givenListContainsNulls_whenPurgedOfNulls_thenNoLongerContainsNulls() {
|
||||||
|
final List<String> values = Lists.newArrayList("a", null, "b", "c");
|
||||||
|
final Iterable<String> withoutNulls = Iterables.filter(values, Predicates.notNull());
|
||||||
|
System.out.println(withoutNulls);
|
||||||
|
}
|
||||||
|
|
||||||
|
// immutable collections
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenCreatingImuutableCollections_thenNoExceptions() {
|
||||||
|
final ImmutableList<String> immutableList = ImmutableList.of("a", "b", "c");
|
||||||
|
final ImmutableSet<String> immutableSet = ImmutableSet.of("a", "b", "c");
|
||||||
|
final ImmutableMap<String, String> imuttableMap = ImmutableMap.of("k1", "v1", "k2", "v2", "k3", "v3");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenTransformingCollectionsToImmutable_thenNoExceptions() {
|
||||||
|
final List<String> muttableList = Lists.newArrayList();
|
||||||
|
final ImmutableList<String> immutableList = ImmutableList.copyOf(muttableList);
|
||||||
|
|
||||||
|
final Set<String> muttableSet = Sets.newHashSet();
|
||||||
|
final ImmutableSet<String> immutableSet = ImmutableSet.copyOf(muttableSet);
|
||||||
|
|
||||||
|
final Map<String, String> muttableMap = Maps.newHashMap();
|
||||||
|
final ImmutableMap<String, String> imuttableMap = ImmutableMap.copyOf(muttableMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenTransformingCollectionsToImmutableViaBuilders_thenNoExceptions() {
|
||||||
|
final List<String> muttableList = Lists.newArrayList();
|
||||||
|
final ImmutableList<String> immutableList = ImmutableList.<String> builder().addAll(muttableList).build();
|
||||||
|
|
||||||
|
final Set<String> muttableSet = Sets.newHashSet();
|
||||||
|
final ImmutableSet<String> immutableSet = ImmutableSet.<String> builder().addAll(muttableSet).build();
|
||||||
|
|
||||||
|
final Map<String, String> muttableMap = Maps.newHashMap();
|
||||||
|
final ImmutableMap<String, String> imuttableMap = ImmutableMap.<String, String> builder().putAll(muttableMap).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
// unmodifiable
|
||||||
|
|
||||||
|
@Test(expected = UnsupportedOperationException.class)
|
||||||
|
public final void givenUnmodifiableViewOverIterable_whenTryingToRemove_thenNotAllowed() {
|
||||||
|
final List<Integer> numbers = Lists.newArrayList(1, 2, 3);
|
||||||
|
final Iterable<Integer> unmodifiableIterable = Iterables.unmodifiableIterable(numbers);
|
||||||
|
final Iterator<Integer> iterator = unmodifiableIterable.iterator();
|
||||||
|
if (iterator.hasNext()) {
|
||||||
|
iterator.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,186 @@
|
||||||
|
package org.baeldung.guava;
|
||||||
|
|
||||||
|
import static org.hamcrest.Matchers.contains;
|
||||||
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
|
import static org.hamcrest.Matchers.lessThan;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.google.common.base.Function;
|
||||||
|
import com.google.common.base.Functions;
|
||||||
|
import com.google.common.base.Predicate;
|
||||||
|
import com.google.common.base.Predicates;
|
||||||
|
import com.google.common.collect.Collections2;
|
||||||
|
import com.google.common.collect.FluentIterable;
|
||||||
|
import com.google.common.collect.Iterables;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
import com.google.common.collect.Ordering;
|
||||||
|
import com.google.common.collect.Sets;
|
||||||
|
|
||||||
|
public class GuavaFunctionalExamplesTest {
|
||||||
|
|
||||||
|
// tests
|
||||||
|
|
||||||
|
// predicates - filtering
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenFilteringNumbersAccordingToACondition_thenCorrectResults() {
|
||||||
|
final List<Integer> numbers = Lists.newArrayList(1, 2, 3, 6, 8, 10, 34, 57, 89);
|
||||||
|
final Predicate<Integer> acceptEvenNumber = new Predicate<Integer>() {
|
||||||
|
@Override
|
||||||
|
public final boolean apply(final Integer number) {
|
||||||
|
return (number % 2) == 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
final List<Integer> evenNumbers = Lists.newArrayList(Collections2.filter(numbers, acceptEvenNumber));
|
||||||
|
|
||||||
|
final Integer found = Collections.binarySearch(evenNumbers, 57);
|
||||||
|
assertThat(found, lessThan(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void givenCollectionContainsNulls_whenNullsAreFilteredOut_thenResultingCollectionsHasNoNulls() {
|
||||||
|
final List<String> withNulls = Lists.newArrayList("a", "bc", null, "def");
|
||||||
|
final Iterable<String> withoutNuls = Iterables.filter(withNulls, Predicates.notNull());
|
||||||
|
|
||||||
|
assertTrue(Iterables.all(withoutNuls, Predicates.notNull()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// predicates - checking
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void givenEvenNumbers_whenCheckingIfAllSatisfyTheEvenPredicate_thenYes() {
|
||||||
|
final List<Integer> evenNumbers = Lists.newArrayList(2, 6, 8, 10, 34, 90);
|
||||||
|
final Predicate<Integer> acceptEvenNumber = new Predicate<Integer>() {
|
||||||
|
@Override
|
||||||
|
public final boolean apply(final Integer number) {
|
||||||
|
return (number % 2) == 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
assertTrue(Iterables.all(evenNumbers, acceptEvenNumber));
|
||||||
|
}
|
||||||
|
|
||||||
|
// negating a predicate
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void givenCollectionOfEvenNumbers_whenCheckingThatCollectionContainsNoOddNumber_thenTrue() {
|
||||||
|
final List<Integer> evenNumbers = Lists.newArrayList(2, 6, 8, 10, 34, 90);
|
||||||
|
final Predicate<Integer> acceptOddNumber = new Predicate<Integer>() {
|
||||||
|
@Override
|
||||||
|
public final boolean apply(final Integer number) {
|
||||||
|
return (number % 2) != 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
assertTrue(Iterables.all(evenNumbers, Predicates.not(acceptOddNumber)));
|
||||||
|
}
|
||||||
|
|
||||||
|
// other predicates
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void when_thenCorrect() {
|
||||||
|
// CharMatcher.forPredicate(predicate)
|
||||||
|
}
|
||||||
|
|
||||||
|
// functions
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenApplyingSimpleFunctionToInputs_thenCorrectlyTransformed() {
|
||||||
|
final List<Integer> numbers = Lists.newArrayList(1, 2, 3);
|
||||||
|
final List<String> numbersAsStrings = Lists.transform(numbers, Functions.toStringFunction());
|
||||||
|
assertThat(numbersAsStrings, contains("1", "2", "3"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenUsingAnIntermediaryFunctionToOrder_thenCorerctlyOrderedInAlphabeticalOrder() {
|
||||||
|
final List<Integer> numbersToSort = Arrays.asList(2, 1, 11, 100, 8, 14);
|
||||||
|
final Ordering<Object> ordering = Ordering.natural().onResultOf(Functions.toStringFunction());
|
||||||
|
final List<Integer> inAlphabeticalOrder = ordering.sortedCopy(numbersToSort);
|
||||||
|
|
||||||
|
final List<Integer> correctAlphabeticalOrder = Lists.newArrayList(1, 100, 11, 14, 2, 8);
|
||||||
|
assertThat(correctAlphabeticalOrder, equalTo(inAlphabeticalOrder));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenChainingPredicatesAndFunctions_thenCorrectResults() {
|
||||||
|
final List<Integer> numbers = Arrays.asList(2, 1, 11, 100, 8, 14);
|
||||||
|
final Predicate<Integer> acceptEvenNumber = new Predicate<Integer>() {
|
||||||
|
@Override
|
||||||
|
public final boolean apply(final Integer number) {
|
||||||
|
return (number % 2) == 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
final Function<Integer, Integer> powerOfTwo = new Function<Integer, Integer>() {
|
||||||
|
@Override
|
||||||
|
public final Integer apply(final Integer input) {
|
||||||
|
return (int) Math.pow(input, 2);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
final FluentIterable<Integer> powerOfTwoOnlyForEvenNumbers = FluentIterable.from(numbers).filter(acceptEvenNumber).transform(powerOfTwo);
|
||||||
|
assertThat(powerOfTwoOnlyForEvenNumbers, contains(4, 10000, 64, 196));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenUsingFunctionComposition_thenCorrectResults() {
|
||||||
|
final List<Integer> numbers = Arrays.asList(2, 3);
|
||||||
|
final Function<Integer, Integer> powerOfTwo = new Function<Integer, Integer>() {
|
||||||
|
@Override
|
||||||
|
public final Integer apply(final Integer input) {
|
||||||
|
return (int) Math.pow(input, 2);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
final List<Integer> result = Lists.transform(numbers, Functions.compose(powerOfTwo, powerOfTwo));
|
||||||
|
assertThat(result, contains(16, 81));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set+Function => Map
|
||||||
|
|
||||||
|
/**
|
||||||
|
* - see: http://code.google.com/p/guava-libraries/issues/detail?id=56
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public final void whenMapIsBackedBySetAndFunction_thenCorrect() {
|
||||||
|
final Function<Integer, Integer> powerOfTwo = new Function<Integer, Integer>() {
|
||||||
|
@Override
|
||||||
|
public final Integer apply(final Integer input) {
|
||||||
|
return (int) Math.pow(input, 2);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
final Set<Integer> lowNumbers = Sets.newHashSet(2, 3, 4);
|
||||||
|
|
||||||
|
final Map<Integer, Integer> numberToPowerOfTwoMuttable = Maps.asMap(lowNumbers, powerOfTwo);
|
||||||
|
final Map<Integer, Integer> numberToPowerOfTwoImuttable = Maps.toMap(lowNumbers, powerOfTwo);
|
||||||
|
assertThat(numberToPowerOfTwoMuttable.get(2), equalTo(4));
|
||||||
|
assertThat(numberToPowerOfTwoImuttable.get(2), equalTo(4));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Predicate => Function
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenConvertingPredicateToFunction_thenCorrect() {
|
||||||
|
final List<Integer> numbers = Lists.newArrayList(1, 2, 3, 6);
|
||||||
|
final Predicate<Integer> acceptEvenNumber = new Predicate<Integer>() {
|
||||||
|
@Override
|
||||||
|
public final boolean apply(final Integer number) {
|
||||||
|
return (number % 2) == 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
final Function<Integer, Boolean> isEventNumberFunction = Functions.forPredicate(acceptEvenNumber);
|
||||||
|
final List<Boolean> areNumbersEven = Lists.transform(numbers, isEventNumberFunction);
|
||||||
|
|
||||||
|
assertThat(areNumbersEven, contains(false, true, false, true));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,179 @@
|
||||||
|
package org.baeldung.guava;
|
||||||
|
|
||||||
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
|
import static org.hamcrest.Matchers.nullValue;
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.google.common.base.Functions;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import com.google.common.collect.Ordering;
|
||||||
|
import com.google.common.primitives.Ints;
|
||||||
|
|
||||||
|
public class GuavaOrderingExamplesTest {
|
||||||
|
|
||||||
|
private final class OrderingByLenght extends Ordering<String> {
|
||||||
|
@Override
|
||||||
|
public final int compare(final String s1, final String s2) {
|
||||||
|
return Ints.compare(s1.length(), s2.length());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// tests
|
||||||
|
|
||||||
|
// dealing with null
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void givenCollectionWithNulls_whenSortingWithNullsLast_thenNullsAreLast() {
|
||||||
|
final List<Integer> toSort = Arrays.asList(3, 5, 4, null, 1, 2);
|
||||||
|
Collections.sort(toSort, Ordering.natural().nullsLast());
|
||||||
|
assertThat(toSort.get(toSort.size() - 1), nullValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void givenCollectionWithNulls_whenSortingWithNullsFirst_thenNullsAreFirst() {
|
||||||
|
final List<Integer> toSort = Arrays.asList(3, 5, 4, null, 1, 2);
|
||||||
|
Collections.sort(toSort, Ordering.natural().nullsFirst());
|
||||||
|
assertThat(toSort.get(0), nullValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenCollectionIsSortedNullsLastReversed_thenNullAreFirst() {
|
||||||
|
final List<Integer> toSort = Arrays.asList(3, 5, 4, null, 1, 2);
|
||||||
|
Collections.sort(toSort, Ordering.natural().nullsLast().reverse());
|
||||||
|
assertThat(toSort.get(0), nullValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
// natural ordering
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenSortingWithNaturalOrdering_thenCorectlySorted() {
|
||||||
|
final List<Integer> toSort = Arrays.asList(3, 5, 4, 1, 2);
|
||||||
|
Collections.sort(toSort, Ordering.natural());
|
||||||
|
|
||||||
|
assertTrue(Ordering.natural().isOrdered(toSort));
|
||||||
|
}
|
||||||
|
|
||||||
|
// checking string ordering
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void givenCollectionContainsDuplicates_whenCheckingStringOrdering_thenNo() {
|
||||||
|
final List<Integer> toSort = Arrays.asList(3, 5, 4, 2, 1, 2);
|
||||||
|
Collections.sort(toSort, Ordering.natural());
|
||||||
|
|
||||||
|
assertFalse(Ordering.natural().isStrictlyOrdered(toSort));
|
||||||
|
}
|
||||||
|
|
||||||
|
// custom - by length
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void givenCollectionIsSorted_whenUsingOrderingApiToCheckOrder_thenCheckCanBePerformed() {
|
||||||
|
final List<String> toSort = Arrays.asList("zz", "aa", "b", "ccc");
|
||||||
|
final Ordering<String> byLength = new OrderingByLenght();
|
||||||
|
Collections.sort(toSort, byLength);
|
||||||
|
|
||||||
|
final Ordering<String> expectedOrder = Ordering.explicit(Lists.newArrayList("b", "zz", "aa", "ccc"));
|
||||||
|
assertTrue(expectedOrder.isOrdered(toSort));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenSortingCollectionsOfStringsByLenght_thenCorrectlySorted() {
|
||||||
|
final List<String> toSort = Arrays.asList("zz", "aa", "b", "ccc");
|
||||||
|
final Ordering<String> byLength = new OrderingByLenght();
|
||||||
|
|
||||||
|
Collections.sort(toSort, byLength);
|
||||||
|
|
||||||
|
final Ordering<String> expectedOrder = Ordering.explicit(Lists.newArrayList("b", "zz", "aa", "ccc"));
|
||||||
|
assertTrue(expectedOrder.isOrdered(toSort));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenSortingCollectionsOfStringsByLenghtWithSecondaryNaturalOrdering_thenCorrectlySorted() {
|
||||||
|
final List<String> toSort = Arrays.asList("zz", "aa", "b", "ccc");
|
||||||
|
final Ordering<String> byLength = new OrderingByLenght();
|
||||||
|
|
||||||
|
Collections.sort(toSort, byLength.compound(Ordering.natural()));
|
||||||
|
|
||||||
|
final Ordering<String> expectedOrder = Ordering.explicit(Lists.newArrayList("b", "aa", "zz", "ccc"));
|
||||||
|
assertTrue(expectedOrder.isOrdered(toSort));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenSortingCollectionsWithComplexOrderingExample_thenCorrectlySorted() {
|
||||||
|
final List<String> toSort = Arrays.asList("zz", "aa", null, "b", "ccc");
|
||||||
|
|
||||||
|
Collections.sort(toSort, new OrderingByLenght().reverse().compound(Ordering.natural()).nullsLast());
|
||||||
|
System.out.println(toSort);
|
||||||
|
}
|
||||||
|
|
||||||
|
// sorted copy
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void givenUnorderdList_whenRetrievingSortedCopy_thenSorted() {
|
||||||
|
final List<String> toSort = Arrays.asList("aa", "b", "ccc");
|
||||||
|
final List<String> sortedCopy = new OrderingByLenght().sortedCopy(toSort);
|
||||||
|
|
||||||
|
final Ordering<String> expectedOrder = Ordering.explicit(Lists.newArrayList("b", "aa", "ccc"));
|
||||||
|
assertFalse(expectedOrder.isOrdered(toSort));
|
||||||
|
assertTrue(expectedOrder.isOrdered(sortedCopy));
|
||||||
|
}
|
||||||
|
|
||||||
|
// to string
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void givenUnorderdList_whenUsingToStringForSortingObjects_thenSortedWithToString() {
|
||||||
|
final List<Integer> toSort = Arrays.asList(1, 2, 11);
|
||||||
|
Collections.sort(toSort, Ordering.usingToString());
|
||||||
|
|
||||||
|
final Ordering<Integer> expectedOrder = Ordering.explicit(Lists.newArrayList(1, 11, 2));
|
||||||
|
assertTrue(expectedOrder.isOrdered(toSort));
|
||||||
|
}
|
||||||
|
|
||||||
|
// binary search
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenPerformingBinarySearch_thenFound() {
|
||||||
|
final List<Integer> toSort = Arrays.asList(1, 2, 11);
|
||||||
|
Collections.sort(toSort, Ordering.usingToString());
|
||||||
|
final int found = Ordering.usingToString().binarySearch(toSort, 2);
|
||||||
|
|
||||||
|
System.out.println(found);
|
||||||
|
}
|
||||||
|
|
||||||
|
// min/max without actually sorting
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenFindingTheMinimalElementWithoutSorting_thenFound() {
|
||||||
|
final List<Integer> toSort = Arrays.asList(2, 1, 11, 100, 8, 14);
|
||||||
|
final int found = Ordering.natural().min(toSort);
|
||||||
|
assertThat(found, equalTo(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenFindingTheFirstFewElements_thenCorrect() {
|
||||||
|
final List<Integer> toSort = Arrays.asList(2, 1, 11, 100, 8, 14);
|
||||||
|
final List<Integer> leastOf = Ordering.natural().leastOf(toSort, 3);
|
||||||
|
final List<Integer> expected = Lists.newArrayList(1, 2, 8);
|
||||||
|
assertThat(expected, equalTo(leastOf));
|
||||||
|
}
|
||||||
|
|
||||||
|
// order the results of a Function
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void givenListOfNumbers_whenRunningAToStringFunctionThenSorting_thenCorrect() {
|
||||||
|
final List<Integer> toSort = Arrays.asList(2, 1, 11, 100, 8, 14);
|
||||||
|
final Ordering<Object> ordering = Ordering.natural().onResultOf(Functions.toStringFunction());
|
||||||
|
final List<Integer> sortedCopy = ordering.sortedCopy(toSort);
|
||||||
|
|
||||||
|
final List<Integer> expected = Lists.newArrayList(1, 100, 11, 14, 2, 8);
|
||||||
|
assertThat(expected, equalTo(sortedCopy));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,97 @@
|
||||||
|
package org.baeldung.hamcrest;
|
||||||
|
|
||||||
|
import static org.hamcrest.Matchers.contains;
|
||||||
|
import static org.hamcrest.Matchers.containsInAnyOrder;
|
||||||
|
import static org.hamcrest.Matchers.empty;
|
||||||
|
import static org.hamcrest.Matchers.emptyArray;
|
||||||
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
|
import static org.hamcrest.Matchers.everyItem;
|
||||||
|
import static org.hamcrest.Matchers.greaterThan;
|
||||||
|
import static org.hamcrest.Matchers.hasItem;
|
||||||
|
import static org.hamcrest.Matchers.hasItems;
|
||||||
|
import static org.hamcrest.Matchers.hasSize;
|
||||||
|
import static org.hamcrest.Matchers.not;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.hamcrest.Matchers;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
|
||||||
|
public class HamcrestExamplesTest {
|
||||||
|
|
||||||
|
// tests
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenVerifyingSingleElementIsPartOfCollection_thenCorrect() {
|
||||||
|
final List<String> collection = Lists.newArrayList("ab", "cd", "ef");
|
||||||
|
assertThat(collection, hasItem("cd"));
|
||||||
|
assertThat(collection, not(hasItem("zz")));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenVerifyingMultipleElementsArePartOfCollection_thenCorrect1() {
|
||||||
|
final List<String> collection = Lists.newArrayList("ab", "cd", "ef");
|
||||||
|
assertThat(collection, hasItems("ef", "cd"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenVerifyingMultipleElementsArePartOfCollectionInStrictOrder_thenCorrect2() {
|
||||||
|
final List<String> collection = Lists.newArrayList("ab", "cd", "ef");
|
||||||
|
assertThat(collection, contains("ab", "cd", "ef"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenVerifyingMultipleElementsArePartOfCollectionInAnyOrder_thenCorrect2() {
|
||||||
|
final List<String> collection = Lists.newArrayList("ab", "cd", "ef");
|
||||||
|
assertThat(collection, containsInAnyOrder("cd", "ab", "ef"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void givenCollectionIsEmpty_whenChecking_thenEmpty() {
|
||||||
|
final List<String> collection = Lists.newArrayList();
|
||||||
|
assertThat(collection, empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void givenCollectionIsNotEmpty_whenChecking_thenNotEmpty() {
|
||||||
|
final List<String> collection = Lists.newArrayList("a");
|
||||||
|
assertThat(collection, not(empty()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void givenMapIsEmpty_whenChecking_thenEmpty() {
|
||||||
|
final Map<String, String> collection = Maps.newHashMap();
|
||||||
|
assertThat(collection, equalTo(Collections.EMPTY_MAP));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void givenArrayIsEmpty_whenChecking_thenEmpty() {
|
||||||
|
final String[] array = new String[] { "ab" };
|
||||||
|
assertThat(array, not(emptyArray()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenCollectionSizeIsChecked_thenCorrect() {
|
||||||
|
final List<String> collection = Lists.newArrayList("ab", "cd", "ef");
|
||||||
|
assertThat(collection, hasSize(3));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenIterableSizeIsChecked_thenCorrect() {
|
||||||
|
final Iterable<String> collection = Lists.newArrayList("ab", "cd", "ef");
|
||||||
|
assertThat(collection, Matchers.<String> iterableWithSize(3));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public final void whenCheckingConditionOverEachItem_thenCorrect() {
|
||||||
|
final List<Integer> collection = Lists.newArrayList(15, 20, 25, 30);
|
||||||
|
assertThat(collection, everyItem(greaterThan(10)));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
*.class
|
||||||
|
|
||||||
|
#folders#
|
||||||
|
/target
|
||||||
|
/neoDb*
|
||||||
|
/data
|
||||||
|
/src/main/webapp/WEB-INF/classes
|
||||||
|
*/META-INF/*
|
||||||
|
|
||||||
|
# Packaged files #
|
||||||
|
*.jar
|
||||||
|
*.war
|
||||||
|
*.ear
|
Loading…
Reference in New Issue