Skip to content

Commit 030fdfd

Browse files
author
Takashi Matsuo
committed
Added tests, correct style checks.
Change-Id: Ib568b0ae397501f4b437478b2f6c1564fb50e0b1
1 parent aaedf38 commit 030fdfd

File tree

13 files changed

+590
-19
lines changed

13 files changed

+590
-19
lines changed

appengine/search/google-checks.xml

+223
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
<?xml version="1.0"?>
2+
<!DOCTYPE module PUBLIC
3+
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
4+
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
5+
<!--
6+
Copyright 2016 Google Inc. All Rights Reserved.
7+
8+
Licensed under the Apache License, Version 2.0 (the "License");
9+
you may not use this file except in compliance with the License.
10+
You may obtain a copy of the License at
11+
12+
http://www.apache.org/licenses/LICENSE-2.0
13+
14+
Unless required by applicable law or agreed to in writing, software
15+
distributed under the License is distributed on an "AS IS" BASIS,
16+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17+
See the License for the specific language governing permissions and
18+
limitations under the License.
19+
-->
20+
21+
<!--
22+
Checkstyle configuration that checks the Google coding conventions from:
23+
24+
- Google Java Style
25+
https://google-styleguide.googlecode.com/svn-history/r130/trunk/javaguide.html
26+
27+
Checkstyle is very configurable. Be sure to read the documentation at
28+
http://checkstyle.sf.net (or in your downloaded distribution).
29+
Most Checks are configurable, be sure to consult the documentation.
30+
To completely disable a check, just comment it out or delete it from the file.
31+
Authors: Max Vetrenko, Ruslan Diachenko, Roman Ivanov.
32+
-->
33+
<module name = "Checker">
34+
<property name="charset" value="UTF-8"/>
35+
36+
<property name="severity" value="error"/>
37+
38+
<property name="fileExtensions" value="java, properties, xml"/>
39+
<!-- Checks for whitespace -->
40+
<!-- See http://checkstyle.sf.net/config_whitespace.html -->
41+
<module name="FileTabCharacter">
42+
<property name="eachLine" value="true"/>
43+
</module>
44+
45+
<module name="TreeWalker">
46+
<!-- Make @SuppressWarnings available to checkstyle http://stackoverflow.com/a/22556386/101923 -->
47+
<module name="SuppressWarningsHolder" />
48+
<module name="UnusedImports"/>
49+
<module name="OuterTypeFilename"/>
50+
<module name="IllegalTokenText">
51+
<property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
52+
<property name="format" value="\\u00(08|09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/>
53+
<property name="message" value="Avoid using corresponding octal or Unicode escape."/>
54+
</module>
55+
<module name="AvoidEscapedUnicodeCharacters">
56+
<property name="allowEscapesForControlCharacters" value="true"/>
57+
<property name="allowByTailComment" value="true"/>
58+
<property name="allowNonPrintableEscapes" value="true"/>
59+
</module>
60+
<module name="LineLength">
61+
<property name="max" value="100"/>
62+
<property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
63+
</module>
64+
<module name="AvoidStarImport"/>
65+
<module name="OneTopLevelClass"/>
66+
<module name="NoLineWrap"/>
67+
<module name="EmptyBlock">
68+
<property name="option" value="TEXT"/>
69+
<property name="tokens" value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
70+
</module>
71+
<module name="NeedBraces"/>
72+
<module name="LeftCurly">
73+
<property name="maxLineLength" value="100"/>
74+
</module>
75+
<module name="RightCurly"/>
76+
<module name="RightCurly">
77+
<property name="option" value="alone"/>
78+
<property name="tokens" value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO, STATIC_INIT, INSTANCE_INIT"/>
79+
</module>
80+
<module name="WhitespaceAround">
81+
<property name="allowEmptyConstructors" value="true"/>
82+
<property name="allowEmptyMethods" value="true"/>
83+
<property name="allowEmptyTypes" value="true"/>
84+
<property name="allowEmptyLoops" value="true"/>
85+
<message key="ws.notFollowed"
86+
value="WhitespaceAround: ''{0}'' is not followed by whitespace. Empty blocks may only be represented as '{}' when not part of a multi-block statement (4.1.3)"/>
87+
<message key="ws.notPreceded"
88+
value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/>
89+
</module>
90+
<module name="OneStatementPerLine"/>
91+
<module name="MultipleVariableDeclarations"/>
92+
<module name="ArrayTypeStyle"/>
93+
<module name="MissingSwitchDefault"/>
94+
<module name="FallThrough"/>
95+
<module name="UpperEll"/>
96+
<module name="ModifierOrder"/>
97+
<module name="EmptyLineSeparator">
98+
<property name="allowNoEmptyLineBetweenFields" value="true"/>
99+
<property name="tokens" value="CLASS_DEF, ENUM_DEF, INTERFACE_DEF, CTOR_DEF, METHOD_DEF, STATIC_INIT, INSTANCE_INIT, VARIABLE_DEF" />
100+
</module>
101+
<module name="SeparatorWrap">
102+
<property name="tokens" value="DOT"/>
103+
<property name="option" value="nl"/>
104+
</module>
105+
<module name="SeparatorWrap">
106+
<property name="tokens" value="COMMA"/>
107+
<property name="option" value="EOL"/>
108+
</module>
109+
<module name="PackageName">
110+
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
111+
<message key="name.invalidPattern"
112+
value="Package name ''{0}'' must match pattern ''{1}''."/>
113+
</module>
114+
<module name="TypeName">
115+
<message key="name.invalidPattern"
116+
value="Type name ''{0}'' must match pattern ''{1}''."/>
117+
</module>
118+
<module name="MemberName">
119+
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
120+
<message key="name.invalidPattern"
121+
value="Member name ''{0}'' must match pattern ''{1}''."/>
122+
</module>
123+
<module name="ParameterName">
124+
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
125+
<message key="name.invalidPattern"
126+
value="Parameter name ''{0}'' must match pattern ''{1}''."/>
127+
</module>
128+
<module name="LocalVariableName">
129+
<property name="tokens" value="VARIABLE_DEF"/>
130+
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
131+
<property name="allowOneCharVarInForLoop" value="true"/>
132+
<message key="name.invalidPattern"
133+
value="Local variable name ''{0}'' must match pattern ''{1}''."/>
134+
</module>
135+
<module name="ClassTypeParameterName">
136+
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
137+
<message key="name.invalidPattern"
138+
value="Class type name ''{0}'' must match pattern ''{1}''."/>
139+
</module>
140+
<module name="MethodTypeParameterName">
141+
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
142+
<message key="name.invalidPattern"
143+
value="Method type name ''{0}'' must match pattern ''{1}''."/>
144+
</module>
145+
<module name="NoFinalizer"/>
146+
<module name="GenericWhitespace">
147+
<message key="ws.followed"
148+
value="GenericWhitespace ''{0}'' is followed by whitespace."/>
149+
<message key="ws.preceded"
150+
value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
151+
<message key="ws.illegalFollow"
152+
value="GenericWhitespace ''{0}'' should followed by whitespace."/>
153+
<message key="ws.notPreceded"
154+
value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
155+
</module>
156+
<module name="Indentation">
157+
<property name="basicOffset" value="2"/>
158+
<property name="braceAdjustment" value="0"/>
159+
<property name="caseIndent" value="2"/>
160+
<property name="throwsIndent" value="4"/>
161+
<property name="lineWrappingIndentation" value="4"/>
162+
<property name="arrayInitIndent" value="2"/>
163+
</module>
164+
<module name="AbbreviationAsWordInName">
165+
<property name="ignoreFinal" value="false"/>
166+
<property name="allowedAbbreviationLength" value="1"/>
167+
</module>
168+
<module name="OverloadMethodsDeclarationOrder"/>
169+
<module name="CustomImportOrder">
170+
<property name="specialImportsRegExp" value="^javax\."/>
171+
<property name="sortImportsInGroupAlphabetically" value="true"/>
172+
<property name="customImportOrderRules" value="STATIC###SAME_PACKAGE(2)###THIRD_PARTY_PACKAGE###STANDARD_JAVA_PACKAGE###SPECIAL_IMPORTS"/>
173+
</module>
174+
<module name="MethodParamPad"/>
175+
<module name="OperatorWrap">
176+
<property name="option" value="NL"/>
177+
<property name="tokens" value="BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR, LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR "/>
178+
</module>
179+
<module name="AnnotationLocation">
180+
<property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"/>
181+
</module>
182+
<module name="AnnotationLocation">
183+
<property name="tokens" value="VARIABLE_DEF"/>
184+
<property name="allowSamelineMultipleAnnotations" value="true"/>
185+
</module>
186+
<module name="NonEmptyAtclauseDescription"/>
187+
<module name="JavadocTagContinuationIndentation"/>
188+
<module name="SummaryJavadocCheck">
189+
<property name="forbiddenSummaryFragments" value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"/>
190+
</module>
191+
<module name="AtclauseOrder">
192+
<property name="tagOrder" value="@param, @return, @throws, @deprecated"/>
193+
<property name="target" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
194+
</module>
195+
<module name="JavadocMethod">
196+
<property name="scope" value="public"/>
197+
<property name="allowMissingJavadoc" value="true"/>
198+
<property name="allowMissingParamTags" value="true"/>
199+
<property name="allowMissingThrowsTags" value="true"/>
200+
<property name="allowMissingReturnTag" value="true"/>
201+
<property name="minLineCount" value="2"/>
202+
<property name="allowedAnnotations" value="Override, Test"/>
203+
<property name="allowThrowsTagsForSubclasses" value="true"/>
204+
</module>
205+
<module name="MethodName">
206+
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$"/>
207+
<message key="name.invalidPattern"
208+
value="Method name ''{0}'' must match pattern ''{1}''."/>
209+
</module>
210+
<module name="SingleLineJavadoc">
211+
<property name="ignoreInlineTags" value="false"/>
212+
</module>
213+
<module name="EmptyCatchBlock">
214+
<property name="exceptionVariableName" value="expected"/>
215+
</module>
216+
<module name="FileContentsHolder"/>
217+
</module>
218+
219+
<!-- Allow silencing rules with annotations http://stackoverflow.com/a/22556386/101923 -->
220+
<module name="SuppressWarningsFilter" />
221+
<!-- Allow silencing with comment http://stackoverflow.com/questions/4023185 -->
222+
<module name="SuppressionCommentFilter" />
223+
</module>

appengine/search/pom.xml

+22
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,33 @@ Copyright 2015 Google Inc. All Rights Reserved.
7070
<version>${appengine.sdk.version}</version>
7171
<scope>test</scope>
7272
</dependency>
73+
<dependency>
74+
<groupId>com.google.truth</groupId>
75+
<artifactId>truth</artifactId>
76+
<version>0.28</version>
77+
<scope>test</scope>
78+
</dependency>
7379
</dependencies>
7480
<build>
7581
<!-- for hot reload of the web application -->
7682
<outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
7783
<plugins>
84+
<plugin>
85+
<groupId>org.apache.maven.plugins</groupId>
86+
<artifactId>maven-checkstyle-plugin</artifactId>
87+
<version>2.17</version>
88+
<configuration>
89+
<configLocation>google-checks.xml</configLocation>
90+
<consoleOutput>true</consoleOutput>
91+
<failOnViolation>true</failOnViolation>
92+
<failsOnError>true</failsOnError>
93+
<includeTestSourceDirectory>true</includeTestSourceDirectory>
94+
<suppressionsLocation>suppressions.xml</suppressionsLocation>
95+
</configuration>
96+
<executions>
97+
<execution><goals><goal>check</goal></goals></execution>
98+
</executions>
99+
</plugin>
78100
<plugin>
79101
<groupId>org.apache.maven.plugins</groupId>
80102
<version>3.3</version>

appengine/search/src/main/java/com/example/appengine/search/DeleteServlet.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,23 @@
2323
import com.google.appengine.api.search.GetResponse;
2424
// [END delete_import]
2525

26+
//CHECKSTYLE:OFF
2627
import com.google.appengine.api.search.Field;
2728
import com.google.appengine.api.search.Index;
2829
import com.google.appengine.api.search.IndexSpec;
2930
import com.google.appengine.api.search.SearchServiceFactory;
3031
// @formatter:on
32+
//CHECKSTYLE:ON
3133

32-
import javax.servlet.http.HttpServlet;
33-
import javax.servlet.http.HttpServletRequest;
34-
import javax.servlet.http.HttpServletResponse;
3534
import java.io.IOException;
3635
import java.io.PrintWriter;
3736
import java.util.ArrayList;
3837
import java.util.List;
3938
import java.util.logging.Level;
4039
import java.util.logging.Logger;
40+
import javax.servlet.http.HttpServlet;
41+
import javax.servlet.http.HttpServletRequest;
42+
import javax.servlet.http.HttpServletResponse;
4143

4244
/**
4345
* Code snippet for deleting documents from an Index.

appengine/search/src/main/java/com/example/appengine/search/DocumentServlet.java

+11-7
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,23 @@
2323
import com.google.appengine.api.users.UserServiceFactory;
2424
// [END document_import]
2525

26-
import javax.servlet.http.HttpServlet;
27-
import javax.servlet.http.HttpServletRequest;
28-
import javax.servlet.http.HttpServletResponse;
2926
import java.io.IOException;
3027
import java.io.PrintWriter;
3128
import java.util.Date;
29+
import javax.servlet.http.HttpServlet;
30+
import javax.servlet.http.HttpServletRequest;
31+
import javax.servlet.http.HttpServletResponse;
3232

33-
33+
/**
34+
* A servlet for creating Search API Document.
35+
*/
3436
@SuppressWarnings("serial")
3537
public class DocumentServlet extends HttpServlet {
3638

39+
/**
40+
* Code snippet for creating a Document.
41+
* @return Document Created document.
42+
*/
3743
public Document createDocument() {
3844
// [START create_document]
3945
User currentUser = UserServiceFactory.getUserService().getCurrentUser();
@@ -56,13 +62,11 @@ public Document createDocument() {
5662
@Override
5763
public void doGet(HttpServletRequest req, HttpServletResponse resp)
5864
throws IOException {
59-
// Just to make sure the method works when deployed/dev_appserver.
60-
createDocument();
6165
PrintWriter out = resp.getWriter();
6266
Document document = Document.newBuilder()
6367
.addField(Field.newBuilder().setName("coverLetter").setText("CoverLetter"))
6468
.addField(Field.newBuilder().setName("resume").setHTML("<html></html>"))
65-
.addField(Field.newBuilder().setName("fullName").setAtom("Atom"))
69+
.addField(Field.newBuilder().setName("fullName").setAtom("Foo Bar"))
6670
.addField(Field.newBuilder().setName("submissionDate").setDate(new Date()))
6771
.build();
6872
// [START access_document]

appengine/search/src/main/java/com/example/appengine/search/IndexServlet.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,19 @@
2323
import com.google.appengine.api.search.IndexSpec;
2424
import com.google.appengine.api.search.SearchServiceFactory;
2525

26+
//CHECKSTYLE:OFF
2627
// [START get_document_import]
2728
import com.google.appengine.api.search.GetRequest;
2829
import com.google.appengine.api.search.GetResponse;
2930
// [END get_document_import]
3031
// @formatter:on
32+
//CHECKSTYLE:ON
3133

34+
import java.io.IOException;
35+
import java.io.PrintWriter;
3236
import javax.servlet.http.HttpServlet;
3337
import javax.servlet.http.HttpServletRequest;
3438
import javax.servlet.http.HttpServletResponse;
35-
import java.io.IOException;
36-
import java.io.PrintWriter;
3739

3840

3941
/**

appengine/search/src/main/java/com/example/appengine/search/SearchServlet.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,18 @@
2626
import com.google.appengine.api.search.StatusCode;
2727
// [END search_document_import]
2828

29+
//CHECKSTYLE:OFF
2930
import com.google.appengine.api.search.Index;
3031
import com.google.appengine.api.search.IndexSpec;
3132
import com.google.appengine.api.search.SearchServiceFactory;
3233
// @formatter:on
34+
//CHECKSTYLE:ON
3335

36+
import java.io.IOException;
37+
import java.io.PrintWriter;
3438
import javax.servlet.http.HttpServlet;
3539
import javax.servlet.http.HttpServletRequest;
3640
import javax.servlet.http.HttpServletResponse;
37-
import java.io.IOException;
38-
import java.io.PrintWriter;
3941

4042

4143

@@ -69,7 +71,7 @@ public void doGet(HttpServletRequest req, HttpServletResponse resp)
6971
final int maxRetry = 3;
7072
int attempts = 0;
7173
int delay = 2;
72-
while(true) {
74+
while (true) {
7375
try {
7476
String queryString = "product: piano AND price < 5000";
7577
Results<ScoredDocument> results = getIndex().search(queryString);

0 commit comments

Comments
 (0)