You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2016/08/16 12:12:22 UTC
wicket git commit: WICKET-6227 CharSequenceResource calculates wrong
length when there are unicode symbols
Repository: wicket
Updated Branches:
refs/heads/wicket-6.x fb0d87b7a -> e3f1b4e39
WICKET-6227 CharSequenceResource calculates wrong length when there are unicode symbols
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/e3f1b4e3
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/e3f1b4e3
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/e3f1b4e3
Branch: refs/heads/wicket-6.x
Commit: e3f1b4e394d1fa4948e387573cd94833bd673200
Parents: fb0d87b
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Tue Aug 16 14:11:36 2016 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Tue Aug 16 14:11:36 2016 +0200
----------------------------------------------------------------------
.../request/resource/CharSequenceResource.java | 29 ++++++++++-
.../resource/CharSequenceResourceTest.java | 53 ++++++++++++++++++++
.../org/apache/wicket/util/string/Strings.java | 5 +-
3 files changed, 82 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/e3f1b4e3/wicket-core/src/main/java/org/apache/wicket/request/resource/CharSequenceResource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/CharSequenceResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/CharSequenceResource.java
index eeb9055..f590289 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/CharSequenceResource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/CharSequenceResource.java
@@ -16,7 +16,10 @@
*/
package org.apache.wicket.request.resource;
+import java.nio.charset.Charset;
+
import org.apache.wicket.request.Response;
+import org.apache.wicket.util.string.Strings;
/**
* An {@link org.apache.wicket.request.resource.IResource} for CharSequences.
@@ -27,6 +30,9 @@ public class CharSequenceResource extends BaseDataResource<CharSequence>
{
private static final long serialVersionUID = 1L;
+ /** Charset name for resource */
+ private String charsetName;
+
/**
* Creates a {@link org.apache.wicket.request.resource.CharSequenceResource} which will provide its data dynamically with
* {@link #getData(org.apache.wicket.request.resource.IResource.Attributes)}
@@ -76,6 +82,27 @@ public class CharSequenceResource extends BaseDataResource<CharSequence>
@Override
protected Long getLength(CharSequence data)
{
- return (long) data.length();
+ return (long) Strings.lengthInBytes(data.toString(), getCharset());
+ }
+
+ /**
+ * @return Charset for resource
+ */
+ protected Charset getCharset()
+ {
+ return (charsetName != null) ? Charset.forName(charsetName) : null;
}
+
+ /**
+ * Sets the character set used for reading this resource.
+ *
+ * @param charset
+ * Charset for component
+ */
+ public void setCharset(final Charset charset)
+ {
+ // java.nio.Charset itself is not serializable so we can only store the name
+ charsetName = (charset != null) ? charset.name() : null;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/wicket/blob/e3f1b4e3/wicket-core/src/test/java/org/apache/wicket/request/resource/CharSequenceResourceTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/request/resource/CharSequenceResourceTest.java b/wicket-core/src/test/java/org/apache/wicket/request/resource/CharSequenceResourceTest.java
new file mode 100644
index 0000000..0fdbb00
--- /dev/null
+++ b/wicket-core/src/test/java/org/apache/wicket/request/resource/CharSequenceResourceTest.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.wicket.request.resource;
+
+import static org.hamcrest.Matchers.is;
+
+import java.nio.charset.Charset;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Tests for {@link CharSequenceResource}
+ */
+public class CharSequenceResourceTest extends Assert
+{
+ @Test
+ public void getLength_whenNoUnicodeSymbols_thenReturnTheStringLength() throws Exception
+ {
+ CharSequenceResource resource = new CharSequenceResource("plain/text");
+ assertThat(resource.getLength("abcd"), is(4L));
+ }
+
+ @Test
+ public void getLength_UTF8_whenUnicodeSymbols_thenReturnTheBytesLength() throws Exception
+ {
+ CharSequenceResource resource = new CharSequenceResource("plain/text");
+ resource.setCharset(Charset.forName("UTF-8"));
+ assertThat(resource.getLength("a\u1234d"), is(5L));
+ }
+
+ @Test
+ public void getLength_UTF16_whenUnicodeSymbols_thenReturnTheBytesLength() throws Exception
+ {
+ CharSequenceResource resource = new CharSequenceResource("plain/text");
+ resource.setCharset(Charset.forName("UTF-16"));
+ assertThat(resource.getLength("a\u1234d"), is(8L));
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/e3f1b4e3/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java b/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java
index 2db74b6..e9aba96 100755
--- a/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java
@@ -1312,10 +1312,7 @@ public final class Strings
*/
public static int lengthInBytes(final String string, final Charset charset)
{
- if (string == null)
- {
- throw new NullPointerException("Argument `string` cannot be null");
- }
+ Args.notNull(string, "string");
if (charset != null)
{
try