From 5576a22a3af101d520ec3a0b1ebb2e2ebbaa0991 Mon Sep 17 00:00:00 2001 From: "alexander.a.kuznetsov" Date: Sun, 12 Apr 2009 18:45:52 +0000 Subject: [PATCH] test for decoder git-svn-id: https://russianmorphology.googlecode.com/svn/trunk@8 d817d54c-26ab-11de-abc9-2f7d1455ff7a --- .../RussianSuffixDecoderEncoder.java | 5 +-- .../morphology/SuffixToLongException.java | 12 +++++++ .../morphology/WrongCharaterException.java | 11 ++++++ .../RussianSuffixDecoderEncoderTest.java | 34 +++++++++++++++++++ src/test/resources/decoder-test-data.txt | 4 +++ 5 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/apache/lucene/russian/morphology/SuffixToLongException.java create mode 100644 src/main/java/org/apache/lucene/russian/morphology/WrongCharaterException.java create mode 100644 src/test/resources/decoder-test-data.txt diff --git a/src/main/java/org/apache/lucene/russian/morphology/RussianSuffixDecoderEncoder.java b/src/main/java/org/apache/lucene/russian/morphology/RussianSuffixDecoderEncoder.java index 2f9ca5e..936c24b 100644 --- a/src/main/java/org/apache/lucene/russian/morphology/RussianSuffixDecoderEncoder.java +++ b/src/main/java/org/apache/lucene/russian/morphology/RussianSuffixDecoderEncoder.java @@ -16,14 +16,15 @@ public class RussianSuffixDecoderEncoder { static public Long encode(String string) { - if (string.length() > 12) throw new RuntimeException("suffix to long"); + if (string.length() > 12) throw new SuffixToLongException("Suffix length should not be greater then " + 12); long result = 0L; for (int i = 0; i < string.length(); i++) { int c = 0 + string.charAt(i) - RUSSIAN_SMALL_LETTER_OFFSET; - if (c < 0) { + if (c == 45 - RUSSIAN_SMALL_LETTER_OFFSET) { c = DASH_CODE; } if (c == EE_CHAR) c = E_CHAR; + if (c < 0 || c > 33) throw new WrongCharaterException(); result = result * 35L + c; } return result; diff --git a/src/main/java/org/apache/lucene/russian/morphology/SuffixToLongException.java b/src/main/java/org/apache/lucene/russian/morphology/SuffixToLongException.java new file mode 100644 index 0000000..eaaebfe --- /dev/null +++ b/src/main/java/org/apache/lucene/russian/morphology/SuffixToLongException.java @@ -0,0 +1,12 @@ +package org.apache.lucene.russian.morphology; + + +public class SuffixToLongException extends RuntimeException { + + public SuffixToLongException() { + } + + public SuffixToLongException(String message) { + super(message); + } +} diff --git a/src/main/java/org/apache/lucene/russian/morphology/WrongCharaterException.java b/src/main/java/org/apache/lucene/russian/morphology/WrongCharaterException.java new file mode 100644 index 0000000..830fb4b --- /dev/null +++ b/src/main/java/org/apache/lucene/russian/morphology/WrongCharaterException.java @@ -0,0 +1,11 @@ +package org.apache.lucene.russian.morphology; + + +public class WrongCharaterException extends RuntimeException{ + public WrongCharaterException() { + } + + public WrongCharaterException(String message) { + super(message); + } +} diff --git a/src/test/java/org/apache/lucene/russian/morphology/RussianSuffixDecoderEncoderTest.java b/src/test/java/org/apache/lucene/russian/morphology/RussianSuffixDecoderEncoderTest.java index c343d34..d6be88f 100644 --- a/src/test/java/org/apache/lucene/russian/morphology/RussianSuffixDecoderEncoderTest.java +++ b/src/test/java/org/apache/lucene/russian/morphology/RussianSuffixDecoderEncoderTest.java @@ -1,5 +1,39 @@ package org.apache.lucene.russian.morphology; +import org.junit.Test; +import static org.junit.Assert.assertThat; +import static org.hamcrest.core.IsEqual.equalTo; +import org.apache.lucene.russian.morphology.SuffixToLongException; + +import java.io.InputStream; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.IOException; + public class RussianSuffixDecoderEncoderTest { + + @Test + public void testShouldCorretDecodeEncode() throws IOException { + InputStream stream = this.getClass().getResourceAsStream("/decoder-test-data.txt"); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream)); + String s = bufferedReader.readLine(); + while(s != null){ + String[] qa = s.trim().split(" "); + Long ecodedSuffix = RussianSuffixDecoderEncoder.encode(qa[0]); + assertThat(RussianSuffixDecoderEncoder.decode(ecodedSuffix),equalTo(qa[1])); + s = bufferedReader.readLine(); + } + } + + @Test(expected = SuffixToLongException.class) + public void shouldThrownExeptionIfSuffixToLong(){ + RussianSuffixDecoderEncoder.encode("1234567890123"); + } + + @Test(expected = WrongCharaterException.class) + public void shouldThrownExeptionIfSuffixContainWrongCharater(){ + RussianSuffixDecoderEncoder.encode("1"); + } + } diff --git a/src/test/resources/decoder-test-data.txt b/src/test/resources/decoder-test-data.txt new file mode 100644 index 0000000..53157c3 --- /dev/null +++ b/src/test/resources/decoder-test-data.txt @@ -0,0 +1,4 @@ +тест тест +ёж еж +тестера тестера +что-то что-то \ No newline at end of file