OSDN Git Service

JSON入出力部をJovsonzプロジェクトに分離。
authorOlyutorskii <olyutorskii@users.osdn.me>
Mon, 16 May 2011 02:43:27 +0000 (11:43 +0900)
committerOlyutorskii <olyutorskii@users.osdn.me>
Mon, 16 May 2011 02:43:27 +0000 (11:43 +0900)
32 files changed:
CHANGELOG.txt
pom.xml
src/main/java/jp/sourceforge/jindolf/AppSetting.java
src/main/java/jp/sourceforge/jindolf/ConfigFile.java
src/main/java/jp/sourceforge/jindolf/FindPanel.java
src/main/java/jp/sourceforge/jindolf/FontInfo.java
src/main/java/jp/sourceforge/jindolf/ProxyInfo.java
src/main/java/jp/sourceforge/jindolf/RegexPattern.java
src/main/java/jp/sourceforge/jindolf/TalkPreview.java
src/main/java/jp/sourceforge/jindolf/json/AbstractJsValue.java [deleted file]
src/main/java/jp/sourceforge/jindolf/json/JsArray.java [deleted file]
src/main/java/jp/sourceforge/jindolf/json/JsBoolean.java [deleted file]
src/main/java/jp/sourceforge/jindolf/json/JsNull.java [deleted file]
src/main/java/jp/sourceforge/jindolf/json/JsNumber.java [deleted file]
src/main/java/jp/sourceforge/jindolf/json/JsObject.java [deleted file]
src/main/java/jp/sourceforge/jindolf/json/JsPair.java [deleted file]
src/main/java/jp/sourceforge/jindolf/json/JsParseException.java [deleted file]
src/main/java/jp/sourceforge/jindolf/json/JsString.java [deleted file]
src/main/java/jp/sourceforge/jindolf/json/JsValue.java [deleted file]
src/main/java/jp/sourceforge/jindolf/json/JsVisitException.java [deleted file]
src/main/java/jp/sourceforge/jindolf/json/Json.java [deleted file]
src/main/java/jp/sourceforge/jindolf/json/JsonAppender.java [deleted file]
src/main/java/jp/sourceforge/jindolf/json/JsonReader.java [deleted file]
src/main/java/jp/sourceforge/jindolf/json/ValueVisitor.java [deleted file]
src/main/java/jp/sourceforge/jindolf/json/package-info.java [deleted file]
src/test/java/jp/sourceforge/jindolf/json/JsArrayTest.java [deleted file]
src/test/java/jp/sourceforge/jindolf/json/JsBooleanTest.java [deleted file]
src/test/java/jp/sourceforge/jindolf/json/JsNullTest.java [deleted file]
src/test/java/jp/sourceforge/jindolf/json/JsNumberTest.java [deleted file]
src/test/java/jp/sourceforge/jindolf/json/JsObjectTest.java [deleted file]
src/test/java/jp/sourceforge/jindolf/json/JsPairTest.java [deleted file]
src/test/java/jp/sourceforge/jindolf/json/JsStringTest.java [deleted file]

index 315ce66..c357f5a 100644 (file)
@@ -4,6 +4,9 @@
 Jindolf 変更履歴
 
 
+3.206.5-SNAPSHOT (20XX-XX-XX)
+    ・JSON入出力処理を Jovsonz プロジェクトへ分離。
+
 3.206.4 (2011-05-10)
     ・10億をこえる発言番号へのアンカー参照を抑止。(バグ報告#24477,#24946)
 
diff --git a/pom.xml b/pom.xml
index d33eb70..17b1a26 100644 (file)
--- a/pom.xml
+++ b/pom.xml
             <scope>compile</scope>
         </dependency>
 
+        <dependency>
+            <groupId>jp.sourceforge.jovsonz</groupId>
+            <artifactId>jovsonz</artifactId>
+            <version>1.101.2</version>
+            <scope>compile</scope>
+        </dependency>
+
     </dependencies>
 
     <repositories/>
index 655768a..f69b5d5 100644 (file)
@@ -10,10 +10,10 @@ package jp.sourceforge.jindolf;
 import java.awt.Font;
 import java.awt.font.FontRenderContext;
 import java.io.File;
-import jp.sourceforge.jindolf.json.JsBoolean;
-import jp.sourceforge.jindolf.json.JsObject;
-import jp.sourceforge.jindolf.json.JsPair;
-import jp.sourceforge.jindolf.json.JsValue;
+import jp.sourceforge.jovsonz.JsBoolean;
+import jp.sourceforge.jovsonz.JsObject;
+import jp.sourceforge.jovsonz.JsPair;
+import jp.sourceforge.jovsonz.JsValue;
 
 /**
  * アプリケーションの各種設定。
index 7e34b6c..06ef92d 100644 (file)
@@ -31,9 +31,10 @@ import javax.swing.JButton;
 import javax.swing.JDialog;
 import javax.swing.JOptionPane;
 import javax.swing.JRadioButton;
-import jp.sourceforge.jindolf.json.JsParseException;
-import jp.sourceforge.jindolf.json.JsValue;
-import jp.sourceforge.jindolf.json.Json;
+import jp.sourceforge.jovsonz.JsComposition;
+import jp.sourceforge.jovsonz.JsParseException;
+import jp.sourceforge.jovsonz.JsVisitException;
+import jp.sourceforge.jovsonz.Json;
 
 /**
  * Jindolf設定格納ディレクトリに関するあれこれ。
@@ -576,7 +577,7 @@ public final class ConfigFile{
      * もしくはJSONファイルが存在しない、
      * もしくは入力エラーがあればnull
      */
-    public static JsValue loadJson(File file){
+    public static JsComposition loadJson(File file){
         AppSetting setting = Jindolf.getAppSetting();
         if( ! setting.useConfigPath() ) return null;
 
@@ -602,9 +603,9 @@ public final class ConfigFile{
 
         Reader reader = new InputStreamReader(istream, CHARSET_JSON);
 
-        JsValue value;
+        JsComposition root;
         try{
-            value = Json.parseValue(reader);
+            root = Json.parseJson(reader);
         }catch(IOException e){
             Jindolf.logger().fatal(
                     "JSONファイル["
@@ -629,17 +630,17 @@ public final class ConfigFile{
             }
         }
 
-        return value;
+        return root;
     }
 
     /**
      * 設定ディレクトリ上のJSONファイルに書き込む。
      * @param file JSONファイルの相対パス
-     * @param value JSON objectまたはarray
+     * @param root JSON objectまたはarray
      * @return 正しくセーブが行われればtrue。
      * 何らかの理由でセーブが完了できなければfalse
      */
-    public static boolean saveJson(File file, JsValue value){
+    public static boolean saveJson(File file, JsComposition root){
         AppSetting setting = Jindolf.getAppSetting();
         if( ! setting.useConfigPath() ) return false;
         File configPath = setting.getConfigPath();
@@ -669,7 +670,13 @@ public final class ConfigFile{
         Writer writer = new OutputStreamWriter(ostream, CHARSET_JSON);
 
         try{
-            Json.writeJsonTop(writer, value);
+            Json.dumpJson(writer, root);
+        }catch(JsVisitException e){
+            Jindolf.logger().fatal(
+                    "JSONファイル["
+                    + absFile.getPath()
+                    + "]の出力処理で支障がありました。", e);
+            return false;
         }catch(IOException e){
             Jindolf.logger().fatal(
                     "JSONファイル["
index df6e80f..bbedf4a 100644 (file)
@@ -51,9 +51,9 @@ import javax.swing.event.EventListenerList;
 import javax.swing.event.ListDataEvent;
 import javax.swing.event.ListDataListener;
 import javax.swing.text.JTextComponent;
-import jp.sourceforge.jindolf.json.JsArray;
-import jp.sourceforge.jindolf.json.JsObject;
-import jp.sourceforge.jindolf.json.JsValue;
+import jp.sourceforge.jovsonz.JsArray;
+import jp.sourceforge.jovsonz.JsObject;
+import jp.sourceforge.jovsonz.JsValue;
 
 /**
  * 検索パネルGUI。
index a93c67b..5ed23a5 100644 (file)
@@ -12,12 +12,12 @@ import java.awt.font.FontRenderContext;
 import java.awt.font.GlyphVector;
 import java.awt.geom.AffineTransform;
 import java.text.CharacterIterator;
-import jp.sourceforge.jindolf.json.JsBoolean;
-import jp.sourceforge.jindolf.json.JsNumber;
-import jp.sourceforge.jindolf.json.JsObject;
-import jp.sourceforge.jindolf.json.JsPair;
-import jp.sourceforge.jindolf.json.JsString;
-import jp.sourceforge.jindolf.json.JsValue;
+import jp.sourceforge.jovsonz.JsBoolean;
+import jp.sourceforge.jovsonz.JsNumber;
+import jp.sourceforge.jovsonz.JsObject;
+import jp.sourceforge.jovsonz.JsPair;
+import jp.sourceforge.jovsonz.JsString;
+import jp.sourceforge.jovsonz.JsValue;
 
 /**
  * フォント描画に関する各種設定。
index 16ad769..26bd245 100644 (file)
@@ -10,11 +10,11 @@ package jp.sourceforge.jindolf;
 import java.net.InetSocketAddress;
 import java.net.Proxy;
 import java.net.SocketAddress;
-import jp.sourceforge.jindolf.json.JsNumber;
-import jp.sourceforge.jindolf.json.JsObject;
-import jp.sourceforge.jindolf.json.JsPair;
-import jp.sourceforge.jindolf.json.JsString;
-import jp.sourceforge.jindolf.json.JsValue;
+import jp.sourceforge.jovsonz.JsNumber;
+import jp.sourceforge.jovsonz.JsObject;
+import jp.sourceforge.jovsonz.JsPair;
+import jp.sourceforge.jovsonz.JsString;
+import jp.sourceforge.jovsonz.JsValue;
 
 /**
  * プロクシ情報。
index 14587f5..9e76af5 100644 (file)
@@ -9,11 +9,11 @@ package jp.sourceforge.jindolf;
 
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
-import jp.sourceforge.jindolf.json.JsBoolean;
-import jp.sourceforge.jindolf.json.JsObject;
-import jp.sourceforge.jindolf.json.JsPair;
-import jp.sourceforge.jindolf.json.JsString;
-import jp.sourceforge.jindolf.json.JsValue;
+import jp.sourceforge.jovsonz.JsBoolean;
+import jp.sourceforge.jovsonz.JsObject;
+import jp.sourceforge.jovsonz.JsPair;
+import jp.sourceforge.jovsonz.JsString;
+import jp.sourceforge.jovsonz.JsValue;
 
 /**
  * 正規表現。
index 448b05f..fae79c1 100644 (file)
@@ -35,10 +35,10 @@ import javax.swing.border.TitledBorder;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 import javax.swing.text.JTextComponent;
-import jp.sourceforge.jindolf.json.JsArray;
-import jp.sourceforge.jindolf.json.JsObject;
-import jp.sourceforge.jindolf.json.JsString;
-import jp.sourceforge.jindolf.json.JsValue;
+import jp.sourceforge.jovsonz.JsArray;
+import jp.sourceforge.jovsonz.JsObject;
+import jp.sourceforge.jovsonz.JsString;
+import jp.sourceforge.jovsonz.JsValue;
 
 /**
  * 発言エディットパネル。
diff --git a/src/main/java/jp/sourceforge/jindolf/json/AbstractJsValue.java b/src/main/java/jp/sourceforge/jindolf/json/AbstractJsValue.java
deleted file mode 100644 (file)
index 7fed800..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * JSON abstract value
- *
- * License : The MIT License
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-/**
- * JSON 各種Value共通実装。
- * 継承必須。
- */
-public class AbstractJsValue implements JsValue{
-
-    /**
-     * コンストラクタ。
-     */
-    protected AbstractJsValue(){
-        super();
-        return;
-    }
-
-    /**
-     * {@inheritDoc}
-     * @param visitor {@inheritDoc}
-     * @throws JsVisitException {@inheritDoc}
-     */
-    @Override
-    public void traverse(ValueVisitor visitor)
-            throws JsVisitException{
-        visitor.visitValue(this);
-        return;
-    }
-
-    /**
-     * {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public boolean hasChanged(){
-        return false;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void setUnchanged(){
-        return;
-    }
-
-}
diff --git a/src/main/java/jp/sourceforge/jindolf/json/JsArray.java b/src/main/java/jp/sourceforge/jindolf/json/JsArray.java
deleted file mode 100644 (file)
index 93c3aee..0000000
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * JSON array value
- *
- * License : The MIT License
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * JSON 配列Value。
- */
-public class JsArray
-        extends AbstractJsValue
-        implements Iterable<JsValue> {
-
-    private final List<JsValue> valueList = new ArrayList<JsValue>();
-    private boolean changed = false;
-
-
-    /**
-     * コンストラクタ。
-     */
-    public JsArray(){
-        super();
-        return;
-    }
-
-
-    /**
-     * JSON Arrayを文字ストリームからパースする。
-     * @param reader 文字入力
-     * @return JSON Array。入力終了ならnull
-     * @throws IOException 入力エラー
-     * @throws JsParseException パースエラー
-     */
-    static JsArray parseArray(JsonReader reader)
-            throws IOException,
-                   JsParseException {
-        int chData;
-
-        Json.skipWhiteSpace(reader);
-        chData = reader.read();
-        if(chData < '\u0000') return null;
-        if(chData != '[') throw new JsParseException();
-
-        JsArray result = new JsArray();
-
-        for(;;){
-            Json.skipWhiteSpace(reader);
-            chData = reader.read();
-            if(chData < '\u0000') throw new JsParseException();
-            if(chData == ']') break;
-
-            if(result.size() <= 0){
-                reader.unread(chData);
-            }else{
-                if(chData != ',') throw new JsParseException();
-                Json.skipWhiteSpace(reader);
-            }
-
-            JsValue value = Json.parseValue(reader);
-            if(value == null){
-                throw new JsParseException();
-            }
-
-            result.add(value);
-        }
-
-        return result;
-    }
-
-
-    /**
-     * JSON Valueを追加する。
-     * @param value JSON Value
-     */
-    public void add(JsValue value){
-        this.valueList.add(value);
-        this.changed = true;
-        return;
-    }
-
-    /**
-     * 指定された位置のValueを返す。
-     * @param index 0で始まる位置
-     * @return Value
-     * @throws IndexOutOfBoundsException 不正な位置指定
-     */
-    public JsValue get(int index) throws IndexOutOfBoundsException{
-        return this.valueList.get(index);
-    }
-
-    /**
-     * 空にする。
-     */
-    public void clear(){
-        if(this.valueList.size() > 0) this.changed = true;
-        this.valueList.clear();
-        return;
-    }
-
-    /**
-     * JSON Valueを削除する。
-     * @param value JSON Value
-     * @return 既存のValueが削除されたならtrue
-     */
-    public boolean remove(JsValue value){
-        boolean removed = this.valueList.remove(value);
-        if(removed) this.changed = true;
-        return removed;
-    }
-
-    /**
-     * Value総数を返す。
-     * @return 総数
-     */
-    public int size(){
-        return this.valueList.size();
-    }
-
-    /**
-     * Valueにアクセスするための反復子を提供する。
-     * この反復子での削除作業はできない。
-     * @return 反復子イテレータ
-     */
-    public Iterator<JsValue> iterator(){
-        Collection<JsValue> unmodColl =
-                Collections.unmodifiableCollection(this.valueList);
-        return unmodColl.iterator();
-    }
-
-    /**
-     * {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public int hashCode(){
-        return this.valueList.hashCode();
-    }
-
-    /**
-     * {@inheritDoc}
-     * @param obj {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public boolean equals(Object obj){
-        if(obj == null) return false;
-        if(this == obj) return true;
-
-        if( ! (obj instanceof JsArray) ) return false;
-        JsArray array = (JsArray) obj;
-
-        return this.valueList.equals(array.valueList);
-    }
-
-    /**
-     * {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public String toString(){
-        StringBuilder text = new StringBuilder();
-
-        text.append("[");
-        boolean hasElem = false;
-        for(JsValue value : this.valueList){
-            if(hasElem) text.append(',');
-            text.append(value);
-            hasElem = true;
-        }
-        text.append("]");
-
-        return text.toString();
-    }
-
-    /**
-     * {@inheritDoc}
-     * @param visitor {@inheritDoc}
-     * @throws JsVisitException {@inheritDoc}
-     */
-    @Override
-    public void traverse(ValueVisitor visitor) throws JsVisitException{
-        visitor.visitValue(this);
-
-        for(JsValue value : this.valueList){
-            value.traverse(visitor);
-        }
-
-        visitor.visitCollectionClose(this);
-
-        return;
-    }
-
-    /**
-     * {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public boolean hasChanged(){
-        if(this.changed) return true;
-
-        for(JsValue value : this.valueList){
-            if(value.hasChanged()) return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void setUnchanged(){
-        this.changed = false;
-
-        for(JsValue value : this.valueList){
-            value.setUnchanged();
-        }
-
-        return;
-    }
-
-}
diff --git a/src/main/java/jp/sourceforge/jindolf/json/JsBoolean.java b/src/main/java/jp/sourceforge/jindolf/json/JsBoolean.java
deleted file mode 100644 (file)
index 6bda497..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * JSON boolean value
- *
- * License : The MIT License
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-/**
- * JSON 真偽Value。
- */
-public final class JsBoolean
-        extends AbstractJsValue
-        implements Comparable<JsBoolean> {
-
-    /** 真。 */
-    public static final JsBoolean TRUE  = new JsBoolean();
-    /** 偽。 */
-    public static final JsBoolean FALSE = new JsBoolean();
-
-
-    /**
-     * コンストラクタ。
-     * 2回しか呼ばれないはず。
-     */
-    private JsBoolean(){
-        super();
-        return;
-    }
-
-
-    /**
-     * boolean値から真偽Valueを返す。
-     * @param bool boolean値
-     * @return TRUEかFALSE
-     */
-    public static JsBoolean valueOf(boolean bool){
-        if(bool) return TRUE;
-        return FALSE;
-    }
-
-    /**
-     * boolean値を返す。
-     * @return boolean値
-     */
-    public boolean booleanValue(){
-        if(this == TRUE) return true;
-        return false;
-    }
-
-    /**
-     * 真か判定する。
-     * @return 真ならtrue
-     */
-    public boolean isTrue(){
-        if(this == TRUE) return true;
-        return false;
-    }
-
-    /**
-     * 偽か判定する。
-     * @return 偽ならtrue
-     */
-    public boolean isFalse(){
-        if(this == FALSE) return true;
-        return false;
-    }
-
-    /**
-     * {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public int hashCode(){
-        if(this.isTrue()) return Boolean.TRUE.hashCode();
-        return Boolean.FALSE.hashCode();
-    }
-
-    /**
-     * {@inheritDoc}
-     * @param obj {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public boolean equals(Object obj){
-        if(obj == null) return false;
-        if(this == obj) return true;
-
-        if( ! (obj instanceof JsBoolean) ) return false;
-
-        return false;
-    }
-
-    /**
-     * {@inheritDoc}
-     * @param value {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public int compareTo(JsBoolean value){
-        if(value == null) throw new NullPointerException();
-        if(this == value) return 0;
-
-        if     (this.isTrue()  && value.isFalse()) return -1;
-        else if(this.isFalse() && value.isTrue() ) return +1;
-
-        return 0;
-    }
-
-    /**
-     * {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public String toString(){
-        if(this.isTrue()) return "true";
-        return "false";
-    }
-
-}
diff --git a/src/main/java/jp/sourceforge/jindolf/json/JsNull.java b/src/main/java/jp/sourceforge/jindolf/json/JsNull.java
deleted file mode 100644 (file)
index f3aa8bb..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * JSON null value
- *
- * License : The MIT License
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-/**
- * JSON Null Value。
- * その実体はシングルトン
- */
-public final class JsNull
-        extends AbstractJsValue
-        implements Comparable<JsNull> {
-
-    /** ただ唯一のインスタンス。 */
-    public static final JsNull NULL = new JsNull();
-
-    /**
-     * 隠しコンストラクタ。
-     * 1回しか呼ばれないはず
-     */
-    private JsNull(){
-        super();
-        return;
-    }
-
-    /**
-     * {@inheritDoc}
-     * @param value {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public int compareTo(JsNull value){
-        if(value == null) throw new NullPointerException();
-        return 0;
-    }
-
-    /**
-     * {@inheritDoc}
-     * @param obj {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public boolean equals(Object obj){
-        if( ! (obj instanceof JsNull) ) return false;
-        if(obj != this) return false;
-        return true;
-    }
-
-    /**
-     * {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public int hashCode(){
-        return 7777;
-    }
-
-    /**
-     * {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public String toString(){
-        return "null";
-    }
-
-}
diff --git a/src/main/java/jp/sourceforge/jindolf/json/JsNumber.java b/src/main/java/jp/sourceforge/jindolf/json/JsNumber.java
deleted file mode 100644 (file)
index 5d75e69..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
- * JSON number value
- *
- * License : The MIT License
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/**
- * JSON 数値Value。
- * 10を基数としたjava.math.BigDecimalを実装ベースとする
- * IEEE754浮動小数ではない。
- */
-public class JsNumber
-        extends AbstractJsValue
-        implements Comparable<JsNumber> {
-
-    private BigDecimal decimal;
-
-
-    /**
-     * コンストラクタ。
-     * @param val 初期数値
-     */
-    public JsNumber(long val){
-        this(BigDecimal.valueOf(val));
-        return;
-    }
-
-    /**
-     * コンストラクタ。
-     * @param val 初期数値
-     */
-    public JsNumber(double val){
-        this(BigDecimal.valueOf(val));
-        return;
-    }
-
-    /**
-     * コンストラクタ。
-     * @param val 初期数値
-     */
-    public JsNumber(BigInteger val){
-        this(new BigDecimal(val));
-        return;
-    }
-
-    /**
-     * コンストラクタ。
-     * 書式はjava.math.BigDecinal#BigDecimal(String)に準ずる。
-     * @param val 初期数値の文字列表記
-     * @throws NumberFormatException 不正な数値表記
-     */
-    public JsNumber(CharSequence val) throws NumberFormatException{
-        this(new BigDecimal(val.toString()));
-        return;
-    }
-
-    /**
-     * コンストラクタ。
-     * @param val 初期数値
-     * @throws NullPointerException 引数がnull
-     */
-    public JsNumber(BigDecimal val) throws NullPointerException{
-        super();
-        if(val == null) throw new NullPointerException();
-        this.decimal = val;
-        return;
-    }
-
-
-    /**
-     * 文字ストリームから符号付きの数字並びを読み込む。
-     * +符号は読み飛ばされる。
-     * 冒頭の連続する0はそのまま読まれる。
-     * @param reader 文字入力
-     * @param app 出力先
-     * @param allowZeroTrail 冒頭の2つ以上連続するゼロを許すならtrue
-     * @return 引数と同じ出力先
-     * @throws IOException 入出力エラー
-     * @throws JsParseException パースエラーもしくは入力終了
-     */
-    private static Appendable appendDigitText(JsonReader reader,
-                                                Appendable app,
-                                                boolean allowZeroTrail)
-            throws IOException, JsParseException{
-        int chData;
-
-        chData = reader.read();
-        if     (chData < '\u0000') throw new JsParseException();
-        else if(chData == '-') app.append('-');
-        else if(chData != '+') reader.unread(chData);
-
-        boolean hasAppended = false;
-        boolean zeroStarted = false;
-        for(;;){
-            chData = reader.read();
-            if(chData < '\u0000') throw new JsParseException();
-
-            if('0' <= chData && chData <= '9'){
-                app.append((char)chData);
-
-                if(zeroStarted && ! allowZeroTrail){
-                    throw new JsParseException();
-                }
-
-                if(chData == '0' &&  ! hasAppended ){
-                    zeroStarted = true;
-                }
-
-                hasAppended = true;
-            }else{
-                if( ! hasAppended ) throw new JsParseException();
-                reader.unread(chData);
-                break;
-            }
-        }
-
-        return app;
-    }
-
-    /**
-     * 文字ストリームから符号付きの数字並びを読み込む。
-     * +符号はパースエラーとなる。
-     * @param reader 文字入力
-     * @param app 出力先
-     * @return 引数と同じ出力先
-     * @throws IOException 入出力エラー
-     * @throws JsParseException パースエラーもしくは入力終了
-     */
-    private static Appendable appendIntegerPart(JsonReader reader,
-                                                  Appendable app )
-            throws IOException, JsParseException{
-        int chData;
-
-        chData = reader.read();
-        if(chData < '\u0000') throw new JsParseException();
-        if(chData == '+') throw new JsParseException();
-        reader.unread(chData);
-
-        appendDigitText(reader, app, false);
-
-        return app;
-    }
-
-    /**
-     * 文字ストリームから「.」で始まる小数部を読み込む。
-     * 小数部がなければなにもせずに戻る。
-     * @param reader 文字入力
-     * @param app 出力先
-     * @return 引数と同じ出力先
-     * @throws IOException 入出力エラー
-     * @throws JsParseException パースエラーもしくは入力終了
-     */
-    private static Appendable appendFractionPart(JsonReader reader,
-                                                    Appendable app )
-            throws IOException, JsParseException{
-        int chData;
-
-        chData = reader.read();
-        if(chData < '\u0000') throw new JsParseException();
-        if(chData != '.'){
-            reader.unread(chData);
-            return app;
-        }
-
-        app.append(".");
-
-        boolean hasAppended = false;
-        for(;;){
-            chData = reader.read();
-            if(chData < '\u0000') throw new JsParseException();
-
-            if('0' <= chData && chData <= '9'){
-                app.append((char)chData);
-                hasAppended = true;
-            }else{
-                if( ! hasAppended ) throw new JsParseException();
-                reader.unread(chData);
-                break;
-            }
-        }
-
-        return app;
-    }
-
-    /**
-     * 文字ストリームから「e」もしくは「E」で始まる指数部を読み込む。
-     * 指数部がなければなにもせずに戻る。
-     * @param reader 文字入力
-     * @param app 出力先
-     * @return 引数と同じ出力先
-     * @throws IOException 入出力エラー
-     * @throws JsParseException パースエラーもしくは入力終了
-     */
-    private static Appendable appendExpPart(JsonReader reader,
-                                              Appendable app )
-            throws IOException, JsParseException{
-        int chData;
-
-        chData = reader.read();
-        if(chData < '\u0000') throw new JsParseException();
-        if(chData != 'e' && chData != 'E'){
-            reader.unread(chData);
-            return app;
-        }
-
-        app.append('E');
-
-        appendDigitText(reader, app, true);
-
-        return app;
-    }
-
-    /**
-     * 文字ストリームからJSON数値Valueを読み込む。
-     * @param reader 文字入力
-     * @return 数値Value
-     * @throws IOException 入力エラー
-     * @throws JsParseException パースエラーもしくは入力終了
-     */
-    static JsNumber parseNumber(JsonReader reader)
-            throws IOException, JsParseException{
-        Json.skipWhiteSpace(reader);
-
-        StringBuilder numText = new StringBuilder();
-        appendIntegerPart (reader, numText);
-        appendFractionPart(reader, numText);
-        appendExpPart     (reader, numText);
-        JsNumber result = new JsNumber(numText);
-
-        return result;
-    }
-
-    /**
-     * BigDecimal型の数値を返す。
-     * @return BigDecimal型数値
-     */
-    public BigDecimal getBigDecimal(){
-        return this.decimal;
-    }
-
-    /**
-     * int型の数値を返す。
-     * @return int型数値
-     */
-    public int intValue(){
-        return this.decimal.intValue();
-    }
-
-    /**
-     * long型の数値を返す。
-     * @return long型数値
-     */
-    public long longValue(){
-        return this.decimal.longValue();
-    }
-
-    /**
-     * float型の数値を返す。
-     * @return float型数値
-     */
-    public float floatValue(){
-        return this.decimal.floatValue();
-    }
-
-    /**
-     * double型の数値を返す。
-     * @return double型数値
-     */
-    public double doubleValue(){
-        return this.decimal.doubleValue();
-    }
-
-    /**
-     * {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public int hashCode(){
-        return this.decimal.hashCode();
-    }
-
-    /**
-     * {@inheritDoc}
-     * 「1.2」と「0.12E+1」など、スケールの一致しない値は異なる値と見なされる。
-     * @param obj {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public boolean equals(Object obj){
-        if(obj == null) return false;
-        if(this == obj) return true;
-        if( ! (obj instanceof JsNumber) ) return false;
-        JsNumber number = (JsNumber) obj;
-        return this.decimal.equals(number.decimal);
-    }
-
-    /**
-     * {@inheritDoc}
-     * 「1.2」と「0.12E+1」など、スケールが異なっても値が同じであれば
-     * 等しいと見なされる。
-     * @param value {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public int compareTo(JsNumber value){
-        if(this == value) return 0;
-        return this.decimal.compareTo(value.decimal);
-    }
-
-    /**
-     * {@inheritDoc}
-     * java.math.BigDecimal#toString()に準ずる。
-     * ※ JSON規格のパーサで解釈できるはず。
-     * @return {@inheritDoc}
-     */
-    @Override
-    public String toString(){
-        return this.decimal.toString();
-    }
-
-}
diff --git a/src/main/java/jp/sourceforge/jindolf/json/JsObject.java b/src/main/java/jp/sourceforge/jindolf/json/JsObject.java
deleted file mode 100644 (file)
index fc4744a..0000000
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * JSON object value
- *
- * License : The MIT License
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-
-/**
- * JSON オブジェクト Value。
- */
-public class JsObject
-        extends AbstractJsValue
-        implements Iterable<JsPair> {
-
-    private final Map<String, JsValue> valueMap =
-            new TreeMap<String, JsValue>();
-    private boolean changed = false;
-
-
-    /**
-     * コンストラクタ。
-     */
-    public JsObject(){
-        super();
-        return;
-    }
-
-
-    /**
-     * JSON Objectを文字ストリームからパースする。
-     * @param reader 文字入力
-     * @return JSON Object。入力終了ならnull
-     * @throws IOException 入力エラー
-     * @throws JsParseException パースエラー
-     */
-    static JsObject parseObject(JsonReader reader)
-            throws IOException, JsParseException{
-        int chData;
-
-        Json.skipWhiteSpace(reader);
-        chData = reader.read();
-        if(chData < '\u0000') return null;
-        if(chData != '{') throw new JsParseException();
-
-        JsObject result = new JsObject();
-
-        for(;;){
-            Json.skipWhiteSpace(reader);
-            chData = reader.read();
-            if(chData < '\u0000') throw new JsParseException();
-            if(chData == '}') break;
-
-            if(result.size() <= 0){
-                reader.unread(chData);
-            }else{
-                if(chData != ',') throw new JsParseException();
-                Json.skipWhiteSpace(reader);
-            }
-
-            JsString name = JsString.parseString(reader);
-            if(name == null){
-                throw new JsParseException();
-            }
-
-            Json.skipWhiteSpace(reader);
-            chData = reader.read();
-            if(chData < '\u0000') throw new JsParseException();
-            if(chData != ':') throw new JsParseException();
-            Json.skipWhiteSpace(reader);
-
-            JsValue value = Json.parseValue(reader);
-            if(value == null){
-                throw new JsParseException();
-            }
-
-            result.putValue(name.toRawString(), value);
-        }
-
-        return result;
-    }
-
-
-    /**
-     * 名前とValueからpairを登録する。
-     * @param name 名前
-     * @param value Value
-     * @return 旧Value。同じ内容のpairがすでに存在していたらnull
-     * @throws NullPointerException 引数のいずれかがnull
-     */
-    public JsValue putValue(String name, JsValue value)
-            throws NullPointerException{
-        if(name  == null) throw new NullPointerException();
-        if(value == null) throw new NullPointerException();
-
-        JsValue oldValue = this.valueMap.get(name);
-        if(value.equals(oldValue)) return null;
-
-        JsValue old = this.valueMap.put(name, value);
-        this.changed = true;
-        return old;
-    }
-
-    /**
-     * 名前からValueを取得する。
-     * @param name 名前
-     * @return 対応するValue。見つからなければnull
-     */
-    public JsValue getValue(String name){
-        return this.valueMap.get(name);
-    }
-
-    /**
-     * JSON pairを追加する。
-     * @param pair JSON pair
-     */
-    public void putPair(JsPair pair){
-        putValue(pair.getName(), pair.getValue());
-        return;
-    }
-
-    /**
-     * 名前からJSON pairを返す。
-     * @param name 名前
-     * @return JSON Pair。見つからなければnull
-     */
-    public JsPair getPair(String name){
-        JsValue value = getValue(name);
-        if(value == null) return null;
-
-        return new JsPair(name, value);
-    }
-
-    /**
-     * 空にする。
-     */
-    public void clear(){
-        if(this.valueMap.size() > 0) this.changed = true;
-        this.valueMap.clear();
-        return;
-    }
-
-    /**
-     * 指定した名前のpairを削除する。
-     * @param name pairの名前
-     * @return 消されたValue。該当するpairがなければnull
-     */
-    public JsValue remove(String name){
-        JsValue old = this.valueMap.remove(name);
-        if(old != null) this.changed = true;
-        return old;
-    }
-
-    /**
-     * 保持する全pairの名前の集合を返す。
-     * @return すべての名前
-     */
-    public Set<String> nameSet(){
-        return this.valueMap.keySet();
-    }
-
-    /**
-     * pairのリストを返す。
-     * 格納順は名前順。
-     * @return pairリスト
-     */
-    public List<JsPair> getPairList(){
-        List<JsPair> result = new ArrayList<JsPair>();
-
-        for(String name : nameSet()){
-            JsPair pair = getPair(name);
-            result.add(pair);
-        }
-
-        return result;
-    }
-
-    /**
-     * pairにアクセスするための反復子を提供する。
-     * この反復子での削除作業はできない。
-     * @return 反復子イテレータ
-     */
-    public Iterator<JsPair> iterator(){
-        return getPairList().iterator();
-    }
-
-    /**
-     * pair総数を返す。
-     * @return pair総数
-     */
-    public int size(){
-        return this.valueMap.size();
-    }
-
-    /**
-     * {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public int hashCode(){
-        return this.valueMap.hashCode();
-    }
-
-    /**
-     * {@inheritDoc}
-     * @param obj {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public boolean equals(Object obj){
-        if(obj == null) return false;
-        if(this == obj) return true;
-
-        if( ! (obj instanceof JsObject) ) return false;
-        JsObject composit = (JsObject) obj;
-
-        return this.valueMap.equals(composit.valueMap);
-    }
-
-    /**
-     * {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public String toString(){
-        StringBuilder text = new StringBuilder();
-
-        text.append("{");
-        boolean hasElem = false;
-        for(JsPair pair : this){
-            if(hasElem) text.append(',');
-            try{
-                JsString.writeText(text, pair.getName());
-            }catch(IOException e){
-                assert false;
-            }
-            text.append(':')
-                .append(pair.getValue());
-            hasElem = true;
-        }
-        text.append("}");
-
-        return text.toString();
-    }
-
-    /**
-     * {@inheritDoc}
-     * @param visitor {@inheritDoc}
-     * @throws JsVisitException {@inheritDoc}
-     */
-    @Override
-    public void traverse(ValueVisitor visitor) throws JsVisitException{
-        visitor.visitValue(this);
-
-        for(JsPair pair : this){
-            String name   = pair.getName();
-            JsValue value = pair.getValue();
-            visitor.visitPairName(name);
-            value.traverse(visitor);
-        }
-
-        visitor.visitCollectionClose(this);
-
-        return;
-    }
-
-    /**
-     * {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public boolean hasChanged(){
-        if(this.changed) return true;
-
-        for(JsValue value : this.valueMap.values()){
-            if(value.hasChanged()) return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void setUnchanged(){
-        this.changed = false;
-
-        for(JsValue value : this.valueMap.values()){
-            value.setUnchanged();
-        }
-
-        return;
-    }
-
-}
diff --git a/src/main/java/jp/sourceforge/jindolf/json/JsPair.java b/src/main/java/jp/sourceforge/jindolf/json/JsPair.java
deleted file mode 100644 (file)
index 7962a0f..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * JSON pair in object
- *
- * License : The MIT License
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-import java.io.IOException;
-
-/**
- * JSON オブジェクトValue内に列挙される、名前の付いたValueとの組。
- * 後での変更は不可能。
- */
-public class JsPair{
-
-    private final String name;
-    private final JsValue value;
-
-    /**
-     * コンストラクタ。
-     * @param name 名前
-     * @param value JSON Value
-     * @throws NullPointerException 名前もしくはValueがnull
-     */
-    public JsPair(String name, JsValue value)
-            throws NullPointerException{
-        super();
-
-        if(name  == null || value == null) throw new NullPointerException();
-
-        this.name = name;
-        this.value = value;
-
-        return;
-    }
-
-    /**
-     * コンストラクタ。
-     * @param name 名前
-     * @param text 文字列
-     * @throws NullPointerException 名前がnull
-     */
-    public JsPair(String name, CharSequence text)
-            throws NullPointerException{
-        this(name, (JsValue) new JsString(text) );
-        return;
-    }
-
-    /**
-     * コンストラクタ。
-     * @param name 名前
-     * @param bool 真偽
-     * @throws NullPointerException 名前がnull
-     */
-    public JsPair(String name, boolean bool)
-            throws NullPointerException{
-        this(name, JsBoolean.valueOf(bool));
-        return;
-    }
-
-    /**
-     * コンストラクタ。
-     * @param name 名前
-     * @param number 数値
-     * @throws NullPointerException 名前がnull
-     */
-    public JsPair(String name, long number)
-            throws NullPointerException{
-        this(name, new JsNumber(number));
-        return;
-    }
-
-    /**
-     * コンストラクタ。
-     * @param name 名前
-     * @param number 数値
-     * @throws NullPointerException 名前がnull
-     */
-    public JsPair(String name, double number)
-            throws NullPointerException{
-        this(name, new JsNumber(number));
-        return;
-    }
-
-    /**
-     * 名前を返す。
-     * @return 名前
-     */
-    public String getName(){
-        return this.name;
-    }
-
-    /**
-     * JSON Valueを返す。
-     * @return JSON Value
-     */
-    public JsValue getValue(){
-        return this.value;
-    }
-
-    /**
-     * {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public String toString(){
-        StringBuilder text = new StringBuilder();
-
-        try{
-            JsString.writeText(text, this.name);
-        }catch(IOException e){
-            assert false; // NEVER!
-        }
-
-        text.append(':')
-            .append(this.value);
-
-        return text.toString();
-    }
-
-}
diff --git a/src/main/java/jp/sourceforge/jindolf/json/JsParseException.java b/src/main/java/jp/sourceforge/jindolf/json/JsParseException.java
deleted file mode 100644 (file)
index 9716ced..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * JSON parse error information
- *
- * License : The MIT License
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-/**
- * JSON パースの異常系情報。
- */
-@SuppressWarnings("serial")
-public class JsParseException extends Exception{
-
-    /**
-     * コンストラクタ。
-     */
-    public JsParseException(){
-        super();
-        return;
-    }
-
-    /**
-     * コンストラクタ。
-     * @param th 原因となった例外
-     */
-    public JsParseException(Throwable th){
-        super(th);
-        return;
-    }
-
-}
diff --git a/src/main/java/jp/sourceforge/jindolf/json/JsString.java b/src/main/java/jp/sourceforge/jindolf/json/JsString.java
deleted file mode 100644 (file)
index b8fb391..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * JSON string value
- *
- * License : The MIT License
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-import java.io.IOException;
-
-/**
- * JSON 文字列Value。
- */
-public class JsString
-        extends AbstractJsValue
-        implements CharSequence, Comparable<JsString> {
-
-    private final String text;
-
-
-    /**
-     * コンストラクタ。
-     * 空文字が設定される。
-     */
-    public JsString(){
-        this(null);
-        return;
-    }
-
-    /**
-     * コンストラクタ。
-     * 引数はJSON書式ではない。
-     * @param seq 文字列。nullなら空文字が設定される。
-     */
-    public JsString(CharSequence seq){
-        super();
-        if(seq == null){
-            this.text = "";
-        }else{
-            this.text = seq.toString();
-        }
-        return;
-    }
-
-
-    /**
-     * FFFF形式4桁で16進エスケープされた文字列を読み、
-     * 1文字にデコードする。
-     * @param reader 文字入力
-     * @return 文字
-     * @throws IOException 入力エラー
-     * @throws JsParseException パースエラーもしくは入力終了
-     */
-    static char parseHexChar(JsonReader reader)
-            throws IOException, JsParseException{
-        int hex1 = reader.read();
-        int hex2 = reader.read();
-        int hex3 = reader.read();
-        int hex4 = reader.read();
-        if(hex4 < '\u0000') throw new JsParseException();
-
-        char hex1Ch = (char) hex1;
-        char hex2Ch = (char) hex2;
-        char hex3Ch = (char) hex3;
-        char hex4Ch = (char) hex4;
-
-        int digit1 = Character.digit(hex1Ch, 16);
-        int digit2 = Character.digit(hex2Ch, 16);
-        int digit3 = Character.digit(hex3Ch, 16);
-        int digit4 = Character.digit(hex4Ch, 16);
-
-        if(digit1 < 0) throw new JsParseException();
-        if(digit2 < 0) throw new JsParseException();
-        if(digit3 < 0) throw new JsParseException();
-        if(digit4 < 0) throw new JsParseException();
-
-        int digit = 0;
-        digit += digit1;
-        digit <<= 4;
-        digit += digit2;
-        digit <<= 4;
-        digit += digit3;
-        digit <<= 4;
-        digit += digit4;
-
-        char result = (char) digit;
-
-        return result;
-    }
-
-    /**
-     * ダブルクォーテーションで囲まれた文字列を読み込む。
-     * @param reader 文字入力
-     * @return 文字列Value
-     * @throws IOException 入力エラー
-     * @throws JsParseException パースエラーもしくは入力終了
-     */
-    static JsString parseString(JsonReader reader)
-            throws IOException, JsParseException{
-        int chData;
-
-        Json.skipWhiteSpace(reader);
-        chData = reader.read();
-        if(chData < '\u0000') return null;
-        if(chData != '"') throw new JsParseException();
-
-        StringBuilder text = new StringBuilder();
-
-        for(;;){
-            chData = reader.read();
-            if(chData < '\u0000') throw new JsParseException();
-            if(chData == '"') break;
-
-            if(chData == '\\'){
-                chData = reader.read();
-                if(chData < '\u0000') throw new JsParseException();
-                if     (chData == '"' ) text.append('"');
-                else if(chData == '\\') text.append('\\');
-                else if(chData == '/' ) text.append('/');
-                else if(chData == 'b' ) text.append('\b');
-                else if(chData == 'f' ) text.append('\f');
-                else if(chData == 'n' ) text.append('\n');
-                else if(chData == 'r' ) text.append('\r');
-                else if(chData == 't' ) text.append('\t');
-                else if(chData == 'u')  text.append(parseHexChar(reader));
-                else                    throw new JsParseException();
-            }else{
-                text.append((char)chData);
-            }
-        }
-
-        JsString result = new JsString(text);
-
-        return result;
-    }
-
-    /**
-     * JSON 文字列Value形式で文字列を出力する。
-     * @param appout 文字出力
-     * @param seq 文字列
-     * @throws IOException 出力エラー
-     */
-    public static void writeText(Appendable appout, CharSequence seq)
-            throws IOException{
-        appout.append('"');
-
-        int length = seq.length();
-        for(int pos = 0; pos < length; pos++){
-            char ch = seq.charAt(pos);
-
-            switch(ch){
-            case '"' : appout.append('\\').append('"');  break;
-            case '\\': appout.append('\\').append('\\'); break;
-            case '/' : appout.append('\\').append('/');  break;
-            case '\b': appout.append('\\').append('b');  break;
-            case '\f': appout.append('\\').append('f');  break;
-            case '\n': appout.append('\\').append('n');  break;
-            case '\r': appout.append('\\').append('r');  break;
-            case '\t': appout.append('\\').append('t');  break;
-            default:
-                if(Character.isISOControl(ch)){
-                    String hex = "0000" + Integer.toHexString(ch);
-                    hex = hex.substring(hex.length() - 4);
-                    appout.append("\\u").append(hex);
-                }else{
-                    appout.append(ch);
-                }
-                break;
-            }
-        }
-
-        appout.append('"');
-
-        return;
-    }
-
-    /**
-     * {@inheritDoc}
-     * @param index {@inheritDoc}
-     * @return {@inheritDoc}
-     * @throws IndexOutOfBoundsException {@inheritDoc}
-     */
-    @Override
-    public char charAt(int index)
-            throws IndexOutOfBoundsException{
-        return this.text.charAt(index);
-    }
-
-    /**
-     * {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public int length(){
-        return this.text.length();
-    }
-
-    /**
-     * {@inheritDoc}
-     * @param start {@inheritDoc}
-     * @param end {@inheritDoc}
-     * @return {@inheritDoc}
-     * @throws IndexOutOfBoundsException {@inheritDoc}
-     */
-    @Override
-    public CharSequence subSequence(int start, int end)
-            throws IndexOutOfBoundsException{
-        return this.text.subSequence(start, end);
-    }
-
-    /**
-     * {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public int hashCode(){
-        return this.text.hashCode();
-    }
-
-    /**
-     * {@inheritDoc}
-     * @param obj {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public boolean equals(Object obj){
-        if(obj == null) return false;
-        if(this == obj) return true;
-
-        if( ! (obj instanceof JsString) ) return false;
-        JsString string = (JsString) obj;
-
-        return this.text.equals(string.text);
-    }
-
-    /**
-     * {@inheritDoc}
-     * @param value {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public int compareTo(JsString value){
-        if(this == value) return 0;
-        if(value == null) return +1;
-        return this.text.compareTo(value.text);
-    }
-
-    /**
-     * {@inheritDoc}
-     * @return {@inheritDoc}
-     */
-    @Override
-    public String toString(){
-        StringBuilder string = new StringBuilder();
-        try{
-            writeText(string, this.text);
-        }catch(IOException e){
-            assert false;
-        }
-        return string.toString();
-    }
-
-    /**
-     * クォーテーションされていない生の文字列を返す。
-     * @return 生の文字列
-     */
-    public String toRawString(){
-        return this.text;
-    }
-
-}
diff --git a/src/main/java/jp/sourceforge/jindolf/json/JsValue.java b/src/main/java/jp/sourceforge/jindolf/json/JsValue.java
deleted file mode 100644 (file)
index 7f04052..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * JSON value common interface
- *
- * License : The MIT License
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-/**
- * JSON 各種Value共通インタフェース。
- */
-public interface JsValue{
-
-    /**
-     * 深さ優先探索を行い各種構造の出現をビジターに通知する。
-     * @param visitor ビジター
-     * @throws JsVisitException トラバース中断。
-     */
-    void traverse(ValueVisitor visitor) throws JsVisitException;
-
-    /**
-     * このValueおよび子孫に変更があったか判定する。
-     * @return 変更があればtrue
-     */
-    boolean hasChanged();
-
-    /**
-     * このValueおよび子孫に変更がなかったことにする。
-     */
-    void setUnchanged();
-
-}
diff --git a/src/main/java/jp/sourceforge/jindolf/json/JsVisitException.java b/src/main/java/jp/sourceforge/jindolf/json/JsVisitException.java
deleted file mode 100644 (file)
index 1438269..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * JSON traverse error exception
- *
- * License : The MIT License
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-/**
- * トラバース中断例外。
- */
-@SuppressWarnings("serial")
-public class JsVisitException extends Exception{
-
-    /**
-     * コンストラクタ。
-     */
-    public JsVisitException(){
-        super();
-        return;
-    }
-
-    /**
-     * コンストラクタ。
-     * @param th 原因となった例外
-     */
-    public JsVisitException(Throwable th){
-        super(th);
-        return;
-    }
-
-}
diff --git a/src/main/java/jp/sourceforge/jindolf/json/Json.java b/src/main/java/jp/sourceforge/jindolf/json/Json.java
deleted file mode 100644 (file)
index d2da108..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * JSON utilities
- *
- * License : The MIT License
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-import java.io.IOException;
-import java.io.Reader;
-
-/**
- * JSON各種共通ユーティリティ。
- */
-public final class Json{
-
-    /**
-     * 隠しコンストラクタ。
-     */
-    private Json(){
-        assert false;
-        throw new AssertionError();
-    }
-
-
-    /**
-     * JSON最上位構造から文字出力を開始する。
-     * @param appout 出力先
-     * @param value JSONのObjectかArray
-     * @throws IOException 出力エラー
-     * @throws IllegalArgumentException 出力対象がObjectでもArrayでもない。
-     */
-    public static void writeJsonTop(Appendable appout, JsValue value)
-            throws IOException,
-                   IllegalArgumentException {
-        if( ! (value instanceof JsObject) && ! (value instanceof JsArray) ){
-            throw new IllegalArgumentException();
-        }
-
-        JsonAppender appender = new JsonAppender(appout);
-
-        try{
-            value.traverse(appender);
-        }catch(JsVisitException e){
-            Throwable cause = e.getCause();
-            if(cause instanceof IOException){
-                throw (IOException) cause;
-            }else if(cause instanceof RuntimeException){
-                throw (RuntimeException) cause;
-            }else if(cause instanceof Error){
-                throw (Error) cause;
-            }else{
-                assert false;
-                return;
-            }
-        }
-
-        appender.flush();
-
-        return;
-    }
-
-    /**
-     * JSON規格のwhitespace文字を判定する。
-     * @param ch 判定対象文字
-     * @return whitespaceならtrue
-     */
-    public static boolean isWhitespace(char ch){
-        if(ch == '\t'    ) return true;
-        if(ch == '\r'    ) return true;
-        if(ch == '\n'    ) return true;
-        if(ch == '\u0020') return true;
-        return false;
-    }
-
-    /**
-     * whitespace文字を読み飛ばす。
-     * @param reader 文字入力
-     * @throws IOException 入力エラー
-     */
-    static void skipWhiteSpace(JsonReader reader)
-            throws IOException{
-        for(;;){
-            int chData = reader.read();
-            if(chData < '\u0000') break;
-            if( ! isWhitespace((char)chData) ){
-                reader.unread(chData);
-                break;
-            }
-        }
-        return;
-    }
-
-    /**
-     * 各種定数(true,false,null)を文字ストリームから読み取る。
-     * 長さ0の文字定数には無条件でfalseを返す。
-     * @param reader 文字入力
-     * @param text 文字定数
-     * @return 文字定数が文字入力に現れればtrue。
-     * 見つからないもしくはストリームの終わりに達したときはfalse
-     * @throws IOException 入力エラー
-     * @throws IllegalArgumentException 文字定数が長すぎる
-     */
-    static boolean parseConst(JsonReader reader,
-                               CharSequence text)
-            throws IOException,
-                   IllegalArgumentException {
-        int textLength = text.length();
-        if(textLength <= 0) return false;
-        if(textLength >= JsonReader.PUSHBACK_TOKENS){
-            throw new IllegalArgumentException();
-        }
-
-        int[] backData = new int[textLength - 1];
-        int readed = 0;
-
-        for(;;){
-            int chData = reader.read();
-            if(chData != text.charAt(readed)){
-                if(chData >= '\u0000') reader.unread(chData);
-                for(int pos = readed - 1; pos >= 0; pos--){
-                    reader.unread(backData[pos]);
-                }
-                break;
-            }
-
-            if(readed >= backData.length) return true;
-
-            backData[readed++] = chData;
-        }
-
-        return false;
-    }
-
-    /**
-     * JSONの各種Valueを文字ストリームから読み取る。
-     * @param reader 文字入力
-     * @return 各種Value
-     * @throws IOException 入力エラー
-     * @throws JsParseException パースエラー
-     */
-    public static JsValue parseValue(Reader reader)
-            throws IOException, JsParseException{
-        JsonReader jsreader;
-        if(reader instanceof JsonReader){
-            jsreader = (JsonReader) reader;
-        }else{
-            jsreader = new JsonReader(reader);
-        }
-
-        return parseValue(jsreader);
-    }
-
-    /**
-     * JSONの各種Valueを文字ストリームから読み取る。
-     * @param reader 文字入力
-     * @return 各種Value。ストリームの終わりに達したときはnull
-     * @throws IOException 入力エラー
-     * @throws JsParseException パースエラー
-     */
-    static JsValue parseValue(JsonReader reader)
-            throws IOException, JsParseException{
-        skipWhiteSpace(reader);
-
-        if(parseConst(reader, JsNull.NULL.toString())){
-            return JsNull.NULL;
-        }else if(parseConst(reader, JsBoolean.TRUE.toString())){
-            return JsBoolean.TRUE;
-        }else if(parseConst(reader, JsBoolean.FALSE.toString())){
-            return JsBoolean.FALSE;
-        }
-
-        int head = reader.read();
-        if(head < '\u0000') return null;
-
-        if( head == '-' || ('0' <= head && head <= '9') ){
-            reader.unread(head);
-            return JsNumber.parseNumber(reader);
-        }else if(head == '{'){
-            reader.unread(head);
-            return JsObject.parseObject(reader);
-        }else if(head == '['){
-            reader.unread(head);
-            return JsArray.parseArray(reader);
-        }else if(head == '"'){
-            reader.unread(head);
-            return JsString.parseString(reader);
-        }
-
-        throw new JsParseException();
-    }
-
-}
diff --git a/src/main/java/jp/sourceforge/jindolf/json/JsonAppender.java b/src/main/java/jp/sourceforge/jindolf/json/JsonAppender.java
deleted file mode 100644 (file)
index 244dba8..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * JSON string output
- *
- * License : The MIT License
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-import java.io.Flushable;
-import java.io.IOException;
-import java.util.Stack;
-
-/**
- * JSON文字出力用ビジター。
- * JSON Valueのトラバース時にこのビジターを指定すると、
- * 事前に用意した文字出力先にJSONフォーマットで出力される
- */
-class JsonAppender
-        implements ValueVisitor,
-                   Flushable {
-
-    private static final String NEWLINE = "\n";
-    private static final String INDENT_UNIT = "\u0020\u0020";
-    private static final String HASH_SEPARATOR = "\u0020:\u0020";
-    private static final String ELEM_DELIMITOR = "\u0020,";
-
-
-    private final Appendable appout;
-
-    private final Stack<JsValue> valueStack = new Stack<JsValue>();
-    private final Stack<Boolean> hasChildStack = new Stack<Boolean>();
-
-    private boolean afterPairName = false;
-
-
-    /**
-     * コンストラクタ。
-     * @param appout 出力先
-     */
-    public JsonAppender(Appendable appout){
-        super();
-        this.appout = appout;
-        return;
-    }
-
-    /**
-     * 1文字出力。
-     * @param ch 文字
-     * @throws IOException 出力エラー
-     */
-    protected void append(char ch) throws IOException{
-        this.appout.append(ch);
-        return;
-    }
-
-    /**
-     * 文字列出力。
-     * @param seq 文字列
-     * @throws IOException 出力エラー
-     */
-    protected void append(CharSequence seq) throws IOException{
-        this.appout.append(seq);
-        return;
-    }
-
-    /**
-     * 最後の改行を出力した後、可能であれば出力先をフラッシュする。
-     * @throws IOException 出力エラー
-     */
-    public void flush() throws IOException{
-        putNewLine();
-        if(this.appout instanceof Flushable){
-            ((Flushable)this.appout).flush();
-        }
-        return;
-    }
-
-    /**
-     * 改行を出力する。
-     * @throws IOException 出力エラー
-     */
-    protected void putNewLine()
-            throws IOException{
-        append(NEWLINE);
-        return;
-    }
-
-    /**
-     * インデントを出力する。
-     * @throws IOException 出力エラー
-     */
-    protected void indentOut() throws IOException{
-        int level = stackLength();
-        for(int ct = 1; ct <= level; ct++){
-            append(INDENT_UNIT);
-        }
-        return;
-    }
-
-    /**
-     * 要素間区切りコンマを出力する。
-     * JSONでは最後の要素の後にコンマを出力してはいけない。
-     * @throws IOException 出力エラー
-     */
-    protected void putElemDelimitor()
-            throws IOException{
-        append(ELEM_DELIMITOR);
-        return;
-    }
-
-    /**
-     * pairの名前を出力する。
-     * @param name pair名
-     * @throws IOException 出力エラー
-     */
-    protected void putPairName(String name)
-            throws IOException{
-        JsString.writeText(this.appout, name);
-        return;
-    }
-
-    /**
-     * pair区切りコロンを出力する。
-     * @throws IOException 出力エラー
-     */
-    protected void putPairSeparator()
-            throws IOException{
-        append(HASH_SEPARATOR);
-        return;
-    }
-
-    /**
-     * 一段ネストする。
-     * @param value JSON Value
-     * @throws IllegalArgumentException 引数がObjectでもArrayでもなかった
-     */
-    protected void pushValue(JsValue value)
-            throws IllegalArgumentException{
-        if( ! (value instanceof JsObject) && ! (value instanceof JsArray) ){
-            throw new IllegalArgumentException();
-        }
-
-        this.valueStack.push(value);
-        this.hasChildStack.push(false);
-
-        return;
-    }
-
-    /**
-     * ネストを一段解除する。
-     * @return 最後にネストしていたValue
-     */
-    protected JsValue popValue(){
-        this.hasChildStack.pop();
-        return this.valueStack.pop();
-    }
-
-    /**
-     * ネストのスタック段数を返す。
-     * @return 段数
-     */
-    protected int stackLength(){
-        return this.valueStack.size();
-    }
-
-    /**
-     * ネスト後、一つでも子要素が出力されたか判定する。
-     * @return 子要素が出力されていればtrue
-     */
-    protected boolean hasChildOut(){
-        if(stackLength() <= 0) return false;
-        return this.hasChildStack.peek();
-    }
-
-    /**
-     * 現時点でのネストに対し、子要素が一つ以上出力済みであると設定する。
-     */
-    protected void setChildOut(){
-        if(stackLength() <= 0) return;
-        this.hasChildStack.pop();
-        this.hasChildStack.push(true);
-    }
-
-    /**
-     * {@inheritDoc}
-     * Valueの出力を行う。
-     * @param value {@inheritDoc}
-     * @throws JsVisitException {@inheritDoc}
-     */
-    @Override
-    public void visitValue(JsValue value)
-            throws JsVisitException{
-        try{
-            if( ! this.afterPairName ){
-                if(hasChildOut()){
-                    putElemDelimitor();
-                }
-                putNewLine();
-                indentOut();
-            }
-            this.afterPairName = false;
-
-            setChildOut();
-
-            if(value instanceof JsObject){
-                append('{');
-                pushValue(value);
-            }else if(value instanceof JsArray){
-                append('[');
-                pushValue(value);
-            }else{
-                append(value.toString());
-            }
-        }catch(IOException e){
-            throw new JsVisitException(e);
-        }
-
-        return;
-    }
-
-    /**
-     * {@inheritDoc}
-     * pairの名前を出力する。
-     * @param name {@inheritDoc}
-     * @throws JsVisitException {@inheritDoc}
-     */
-    @Override
-    public void visitPairName(String name)
-            throws JsVisitException{
-        try{
-            if(hasChildOut()){
-                putElemDelimitor();
-            }
-            putNewLine();
-            indentOut();
-            putPairName(name);
-            putPairSeparator();
-        }catch(IOException e){
-            throw new JsVisitException(e);
-        }
-
-        setChildOut();
-        this.afterPairName = true;
-
-        return;
-    }
-
-    /**
-     * {@inheritDoc}
-     * 閉じ括弧を出力する。
-     * @param composite {@inheritDoc}
-     * @throws JsVisitException {@inheritDoc}
-     */
-    @Override
-    public void visitCollectionClose(JsValue composite)
-            throws JsVisitException{
-        boolean hasChild = hasChildOut();
-
-        JsValue value = popValue();
-
-        try{
-            if(hasChild){
-                putNewLine();
-                indentOut();
-            }else{
-                append('\u0020');
-            }
-
-            if(value instanceof JsObject){
-                append('}');
-            }else if(value instanceof JsArray){
-                append(']');
-            }else{
-                assert false;
-                throw new JsVisitException();
-            }
-        }catch(IOException e){
-            throw new JsVisitException(e);
-        }
-
-        return;
-    }
-
-}
diff --git a/src/main/java/jp/sourceforge/jindolf/json/JsonReader.java b/src/main/java/jp/sourceforge/jindolf/json/JsonReader.java
deleted file mode 100644 (file)
index 6860668..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * JSON raeder
- *
- * License : The MIT License
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-import java.io.PushbackReader;
-import java.io.Reader;
-
-/**
- * JSONデータ用入力文字ストリーム。
- */
-class JsonReader extends PushbackReader{
-
-    /** 入力ストリームに必要なプッシュバック文字数。 */
-    public static final int PUSHBACK_TOKENS = 10;
-
-    static{
-        assert JsBoolean.TRUE .toString().length() < PUSHBACK_TOKENS;
-        assert JsBoolean.FALSE.toString().length() < PUSHBACK_TOKENS;
-        assert JsNull   .NULL .toString().length() < PUSHBACK_TOKENS;
-        assert "\\uXXXX"                 .length() < PUSHBACK_TOKENS;
-    }
-
-    /**
-     * コンストラクタ。
-     * @param reader 文字入力
-     */
-    public JsonReader(Reader reader){
-        super(reader, PUSHBACK_TOKENS);
-        return;
-    }
-
-    // TODO エラー報告用に行数、文字数をカウント
-}
diff --git a/src/main/java/jp/sourceforge/jindolf/json/ValueVisitor.java b/src/main/java/jp/sourceforge/jindolf/json/ValueVisitor.java
deleted file mode 100644 (file)
index 9eccf64..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * JSON value visitor
- *
- * License : The MIT License
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-/**
- * Valueへのビジター共通インタフェース。
- */
-public interface ValueVisitor{
-
-    /**
-     * Value登場の通知を受け取る。
-     * @param value JSON Value
-     * @throws JsVisitException トラバース中止
-     */
-    void visitValue(JsValue value) throws JsVisitException;
-
-    /**
-     * pair名登場の通知を受け取る。
-     * @param name pair名
-     * @throws JsVisitException トラバース中止
-     */
-    void visitPairName(String name) throws JsVisitException;
-
-    /**
-     * 括弧終了の通知を受け取る。
-     * @param composite JSON Object か JSON Array
-     * @throws JsVisitException トラバース中止
-     */
-    void visitCollectionClose(JsValue composite) throws JsVisitException;
-
-}
diff --git a/src/main/java/jp/sourceforge/jindolf/json/package-info.java b/src/main/java/jp/sourceforge/jindolf/json/package-info.java
deleted file mode 100644 (file)
index 78ab92f..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * JSON Library パッケージコメント
- *
- * このファイルは、SunJDK5.0以降に含まれるJavadoc用に用意された、
- * 特別な名前を持つソースファイルです。
- * このファイルはソースコードを含まず、
- * パッケージコメントとパッケージ宣言のみが含まれます。
- *
- * License : The MIT License
- * Copyright(c) 2009 olyutorskii
- */
-
-/**
- * このライブラリは
- * JSON形式のデータファイルの読み書きを行うために作られました。
- *
- * <hr>
- *
- * <p>
- * The MIT License
- * </p>
- * <p>
- * Copyright(c) 2009 olyutorskii
- * </p>
- * <p>
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * </p>
- * <p>
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * </p>
- * <p>
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- * </p>
- *
- * <hr>
- *
- * @see <a href="http://json.org/json-ja.html">JSONの紹介</a>
- * @see <a href="http://www.ietf.org/rfc/rfc4627.txt">RFC4627</a>
- * @see <a href="http://ja.wikipedia.org/wiki/JavaScript_Object_Notation">
- * Wikipedia解説</a>
- */
-
-package jp.sourceforge.jindolf.json;
-
-/* EOF */
diff --git a/src/test/java/jp/sourceforge/jindolf/json/JsArrayTest.java b/src/test/java/jp/sourceforge/jindolf/json/JsArrayTest.java
deleted file mode 100644 (file)
index 9226d49..0000000
+++ /dev/null
@@ -1,424 +0,0 @@
-/*
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-import java.io.StringReader;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import static org.junit.Assert.*;
-
-/**
- *
- */
-public class JsArrayTest {
-
-    public JsArrayTest() {
-    }
-
-    @BeforeClass
-    public static void setUpClass() throws Exception{
-    }
-
-    @AfterClass
-    public static void tearDownClass() throws Exception{
-    }
-
-    @Before
-    public void setUp() {
-    }
-
-    @After
-    public void tearDown() {
-    }
-
-    /**
-     * Test of parseArray method, of class JsArray.
-     */
-    @Test
-    public void testParseArray() throws Exception{
-        System.out.println("parseArray");
-
-        JsonReader reader;
-        JsArray array;
-
-        reader = new JsonReader(new StringReader("[]"));
-        array = JsArray.parseArray(reader);
-        assertEquals(0, array.size());
-
-        reader = new JsonReader(new StringReader("[true]"));
-        array = JsArray.parseArray(reader);
-        assertEquals(1, array.size());
-        assertEquals(JsBoolean.TRUE, array.get(0));
-
-        reader = new JsonReader(new StringReader("[true,false]"));
-        array = JsArray.parseArray(reader);
-        assertEquals(2, array.size());
-        assertEquals(JsBoolean.TRUE, array.get(0));
-        assertEquals(JsBoolean.FALSE, array.get(1));
-
-        reader = new JsonReader(new StringReader("\n[\rtrue\t, false\n]\r"));
-        array = JsArray.parseArray(reader);
-        assertEquals(2, array.size());
-        assertEquals(JsBoolean.TRUE, array.get(0));
-        assertEquals(JsBoolean.FALSE, array.get(1));
-
-        try{
-            reader = new JsonReader(new StringReader("[,]"));
-            array = JsArray.parseArray(reader);
-            fail();
-        }catch(JsParseException e){
-            // NOTHING
-        }
-
-        try{
-            reader = new JsonReader(new StringReader("[true,]"));
-            array = JsArray.parseArray(reader);
-            fail();
-        }catch(JsParseException e){
-            // NOTHING
-        }
-
-        try{
-            reader = new JsonReader(new StringReader("[true"));
-            array = JsArray.parseArray(reader);
-            fail();
-        }catch(JsParseException e){
-            // NOTHING
-        }
-
-        try{
-            reader = new JsonReader(new StringReader("true]"));
-            array = JsArray.parseArray(reader);
-            fail();
-        }catch(JsParseException e){
-            // NOTHING
-        }
-
-        return;
-    }
-
-    /**
-     * Test of add method, of class JsArray.
-     */
-    @Test
-    public void testAdd(){
-        System.out.println("add");
-
-        JsArray array = new JsArray();
-
-        JsNumber number = new JsNumber("1.23");
-        assertEquals(0, array.size());
-        array.add(number);
-        assertEquals(1, array.size());
-        array.add(number);
-        assertEquals(2, array.size());
-
-        return;
-    }
-
-    /**
-     * Test of get method, of class JsArray.
-     */
-    @Test
-    public void testGet(){
-        System.out.println("get");
-
-        JsArray array = new JsArray();
-
-        JsValue val1 = new JsNumber("1.23");
-        JsValue val2 = new JsString("abc");
-
-        array.add(val1);
-        array.add(val2);
-
-        assertEquals(val1, array.get(0));
-        assertEquals(val2, array.get(1));
-
-        try{
-            array.get(2);
-            fail();
-        }catch(IndexOutOfBoundsException e){
-            // NOTHING
-        }
-
-        return;
-    }
-
-    /**
-     * Test of clear method, of class JsArray.
-     */
-    @Test
-    public void testClear(){
-        System.out.println("clear");
-
-        JsArray array = new JsArray();
-
-        JsValue val1 = new JsNumber("1.23");
-        JsValue val2 = new JsString("abc");
-
-        array.add(val1);
-        array.add(val2);
-        assertEquals(2, array.size());
-
-        array.clear();
-        assertEquals(0, array.size());
-
-        try{
-            array.get(0);
-            fail();
-        }catch(IndexOutOfBoundsException e){
-            // NOTHING
-        }
-
-        return;
-    }
-
-    /**
-     * Test of remove method, of class JsArray.
-     */
-    @Test
-    public void testRemove(){
-        System.out.println("remove");
-
-        JsArray array = new JsArray();
-
-        JsValue val1 = new JsNumber("1.23");
-        JsValue val2 = new JsString("abc");
-        JsValue val3 = JsBoolean.TRUE;
-
-        array.add(val1);
-        array.add(val2);
-        assertEquals(2, array.size());
-
-        assertTrue(array.remove(val1));
-        assertEquals(1, array.size());
-        assertEquals(val2, array.get(0));
-
-        assertFalse(array.remove(val3));
-        assertEquals(1, array.size());
-
-        return;
-    }
-
-    /**
-     * Test of size method, of class JsArray.
-     */
-    @Test
-    public void testSize(){
-        System.out.println("size");
-
-        JsArray array = new JsArray();
-        assertEquals(0, array.size());
-
-        JsValue val1 = new JsNumber("1.23");
-
-        array.add(val1);
-        assertEquals(1, array.size());
-
-        return;
-    }
-
-    /**
-     * Test of iterator method, of class JsArray.
-     */
-    @Test
-    public void testIterator(){
-        System.out.println("iterator");
-
-        JsArray array = new JsArray();
-
-        JsValue val1 = new JsNumber("1.23");
-        JsValue val2 = new JsString("abc");
-
-        array.add(val1);
-        array.add(val2);
-
-        Iterator<JsValue> it = array.iterator();
-
-        assertTrue(it.hasNext());
-        assertEquals(val1, it.next());
-
-        assertTrue(it.hasNext());
-        assertEquals(val2, it.next());
-
-        assertFalse(it.hasNext());
-
-        return;
-    }
-
-    /**
-     * Test of hashCode method, of class JsArray.
-     */
-    @Test
-    public void testHashCode(){
-        System.out.println("hashCode");
-
-        JsArray array1 = new JsArray();
-        JsArray array2 = new JsArray();
-
-        assertEquals(array1.hashCode(), array2.hashCode());
-
-        array1.add(new JsString("abc"));
-        array2.add(new JsString("abc"));
-
-        assertEquals(array1.hashCode(), array2.hashCode());
-
-        return;
-    }
-
-    /**
-     * Test of equals method, of class JsArray.
-     */
-    @Test
-    public void testEquals(){
-        System.out.println("equals");
-
-        JsArray array1 = new JsArray();
-        JsArray array2 = new JsArray();
-
-        assertTrue(array1.equals(array2));
-
-        array1.add(new JsString("abc"));
-        array2.add(new JsString("abc"));
-
-        assertTrue(array1.equals(array2));
-
-        array1.add(new JsString("xyz"));
-        array2.add(new JsString("XYZ"));
-
-        assertFalse(array1.equals(array2));
-
-        assertFalse(array1.equals(null));
-
-        return;
-    }
-
-    /**
-     * Test of toString method, of class JsArray.
-     */
-    @Test
-    public void testToString(){
-        System.out.println("toString");
-
-        JsArray array = new JsArray();
-
-        assertEquals("[]", array.toString());
-
-        array.add(JsBoolean.TRUE);
-        assertEquals("[true]", array.toString());
-
-        array.add(JsBoolean.FALSE);
-        assertEquals("[true,false]", array.toString());
-
-        array.add(new JsArray());
-        assertEquals("[true,false,[]]", array.toString());
-
-        return;
-    }
-
-    /**
-     * Test of traverse method, of class JsArray.
-     */
-    @Test
-    public void testTraverse() throws Exception{
-        System.out.println("traverse");
-
-        JsArray array = new JsArray();
-        JsValue val1 = new JsNumber("12");
-        JsValue val2 = new JsString("AB");
-        array.add(val1);
-        array.add(val2);
-
-        final List<Object> visited = new LinkedList<Object>();
-
-        try{
-            array.traverse(new ValueVisitor(){
-                public void visitValue(JsValue value)
-                        throws JsVisitException{
-                    visited.add(value);
-                    return;
-                }
-
-                public void visitPairName(String name)
-                        throws JsVisitException{
-                    visited.add(name);
-                    return;
-                }
-
-                public void visitCollectionClose(JsValue composite)
-                        throws JsVisitException{
-                    visited.add(composite);
-                    return;
-                }
-            });
-        }catch(JsVisitException e){
-            fail();
-        }
-
-        assertEquals(4, visited.size());
-        assertEquals(array, visited.get(0));
-        assertEquals(val1, visited.get(1));
-        assertEquals(val2, visited.get(2));
-        assertEquals(array, visited.get(3));
-
-        return;
-    }
-
-    /**
-     * Test of hasChanged method, of class JsArray.
-     */
-    @Test
-    public void testHasChanged(){
-        System.out.println("hasChanged");
-
-        JsArray array = new JsArray();
-        assertFalse(array.hasChanged());
-
-        array.add(new JsNumber("0"));
-        assertTrue(array.hasChanged());
-
-        array.setUnchanged();
-        assertFalse(array.hasChanged());
-
-        JsArray child = new JsArray();
-        array.add(child);
-        array.setUnchanged();
-        assertFalse(array.hasChanged());
-
-        child.add(JsNull.NULL);
-        assertTrue(array.hasChanged());
-        array.setUnchanged();
-        assertFalse(array.hasChanged());
-
-        return;
-    }
-
-    /**
-     * Test of setUnchanged method, of class JsArray.
-     */
-    @Test
-    public void testSetUnchanged(){
-        System.out.println("setUnchanged");
-
-        JsArray array = new JsArray();
-        JsArray child = new JsArray();
-        array.add(child);
-
-        child.add(JsNull.NULL);
-        assertTrue(child.hasChanged());
-
-        array.setUnchanged();
-        assertFalse(child.hasChanged());
-
-        return;
-    }
-
-}
diff --git a/src/test/java/jp/sourceforge/jindolf/json/JsBooleanTest.java b/src/test/java/jp/sourceforge/jindolf/json/JsBooleanTest.java
deleted file mode 100644 (file)
index 734800c..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-import java.util.SortedSet;
-import java.util.TreeSet;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import static org.junit.Assert.*;
-
-/**
- *
- */
-public class JsBooleanTest {
-
-    public JsBooleanTest() {
-    }
-
-    @BeforeClass
-    public static void setUpClass() throws Exception{
-    }
-
-    @AfterClass
-    public static void tearDownClass() throws Exception{
-    }
-
-    @Before
-    public void setUp() {
-    }
-
-    @After
-    public void tearDown() {
-    }
-
-    /**
-     * Test of traverse method, of class JsBoolean.
-     */
-    @Test
-    public void testTraverse(){
-        System.out.println("traverse");
-
-        try{
-            JsBoolean.TRUE.traverse(new ValueVisitor(){
-                int ct = 0;
-
-                public void visitValue(JsValue value)
-                        throws JsVisitException{
-                    assertEquals(JsBoolean.TRUE, value);
-                    assertTrue(this.ct++ <= 0);
-                }
-
-                public void visitPairName(String name)
-                        throws JsVisitException{
-                    throw new JsVisitException();
-                }
-
-                public void visitCollectionClose(JsValue composite)
-                        throws JsVisitException{
-                    throw new JsVisitException();
-                }
-            });
-        }catch(JsVisitException e){
-            fail();
-        }
-
-        try{
-            JsBoolean.FALSE.traverse(new ValueVisitor(){
-                int ct = 0;
-
-                public void visitValue(JsValue value)
-                        throws JsVisitException{
-                    assertEquals(JsBoolean.FALSE, value);
-                    assertTrue(this.ct++ <= 0);
-                }
-
-                public void visitPairName(String name)
-                        throws JsVisitException{
-                    throw new JsVisitException();
-                }
-
-                public void visitCollectionClose(JsValue composite)
-                        throws JsVisitException{
-                    throw new JsVisitException();
-                }
-            });
-        }catch(JsVisitException e){
-            fail();
-        }
-
-        return;
-    }
-
-    /**
-     * Test of hasChanged method, of class JsBoolean.
-     */
-    @Test
-    public void testHasChanged(){
-        System.out.println("hasChanged");
-
-        assertFalse(JsBoolean.TRUE.hasChanged());
-        JsBoolean.TRUE.setUnchanged();
-        assertFalse(JsBoolean.TRUE.hasChanged());
-
-        assertFalse(JsBoolean.FALSE.hasChanged());
-        JsBoolean.FALSE.setUnchanged();
-        assertFalse(JsBoolean.FALSE.hasChanged());
-
-        return;
-    }
-
-    /**
-     * Test of setUnchanged method, of class JsBoolean.
-     */
-    @Test
-    public void testSetUnchanged(){
-        System.out.println("setUnchanged");
-
-        JsBoolean.TRUE.setUnchanged();
-        assertFalse(JsBoolean.TRUE.hasChanged());
-
-        JsBoolean.FALSE.setUnchanged();
-        assertFalse(JsBoolean.FALSE.hasChanged());
-
-        return;
-    }
-
-    /**
-     * Test of valueOf method, of class JsBoolean.
-     */
-    @Test
-    public void testValueOf(){
-        System.out.println("valueOf");
-        assertEquals(JsBoolean.TRUE, JsBoolean.valueOf(true));
-        assertEquals(JsBoolean.FALSE, JsBoolean.valueOf(false));
-        return;
-    }
-
-    /**
-     * Test of booleanValue method, of class JsBoolean.
-     */
-    @Test
-    public void testBooleanValue(){
-        System.out.println("booleanValue");
-        assertTrue(JsBoolean.TRUE.booleanValue());
-        assertFalse(JsBoolean.FALSE.booleanValue());
-        return;
-    }
-
-    /**
-     * Test of isTrue method, of class JsBoolean.
-     */
-    @Test
-    public void testIsTrue(){
-        System.out.println("isTrue");
-        assertTrue(JsBoolean.TRUE.isTrue());
-        assertFalse(JsBoolean.FALSE.isTrue());
-        return;
-    }
-
-    /**
-     * Test of isFalse method, of class JsBoolean.
-     */
-    @Test
-    public void testIsFalse(){
-        System.out.println("isFalse");
-        assertFalse(JsBoolean.TRUE.isFalse());
-        assertTrue(JsBoolean.FALSE.isFalse());
-        return;
-    }
-
-    /**
-     * Test of hashCode method, of class JsBoolean.
-     */
-    @Test
-    public void testHashCode(){
-        System.out.println("hashCode");
-        // NOTHING
-        return;
-    }
-
-    /**
-     * Test of equals method, of class JsBoolean.
-     */
-    @Test
-    public void testEquals(){
-        System.out.println("equals");
-
-        assertTrue(JsBoolean.TRUE.equals(JsBoolean.TRUE));
-        assertFalse(JsBoolean.TRUE.equals(JsBoolean.FALSE));
-//        assertFalse(JsBoolean.TRUE.equals(JsNull.NULL));
-        assertFalse(JsBoolean.TRUE.equals(null));
-
-        assertFalse(JsBoolean.FALSE.equals(JsBoolean.TRUE));
-        assertTrue(JsBoolean.FALSE.equals(JsBoolean.FALSE));
-//        assertFalse(JsBoolean.TRUE.equals(JsNull.NULL));
-        assertFalse(JsBoolean.FALSE.equals(null));
-
-        return;
-    }
-
-    /**
-     * Test of compareTo method, of class JsBoolean.
-     */
-    @Test
-    public void testCompareTo(){
-        System.out.println("compareTo");
-        assertEquals(0, JsBoolean.TRUE.compareTo(JsBoolean.TRUE));
-        assertEquals(0, JsBoolean.FALSE.compareTo(JsBoolean.FALSE));
-        assertTrue(0 > JsBoolean.TRUE.compareTo(JsBoolean.FALSE));
-        assertTrue(0 < JsBoolean.FALSE.compareTo(JsBoolean.TRUE));
-
-        try{
-            JsBoolean.TRUE.compareTo(null);
-            fail();
-        }catch(NullPointerException e){
-            // NOTHING
-        }
-
-        try{
-            JsBoolean.FALSE.compareTo(null);
-            fail();
-        }catch(NullPointerException e){
-            // NOTHING
-        }
-
-        SortedSet<JsBoolean> set = new TreeSet<JsBoolean>();
-
-        set.clear();
-        set.add(JsBoolean.TRUE);
-        set.add(JsBoolean.FALSE);
-        assertEquals(JsBoolean.TRUE, set.first());
-        assertEquals(JsBoolean.FALSE, set.last());
-        set.clear();
-        set.add(JsBoolean.FALSE);
-        set.add(JsBoolean.TRUE);
-        assertEquals(JsBoolean.TRUE, set.first());
-        assertEquals(JsBoolean.FALSE, set.last());
-
-        return;
-    }
-
-    /**
-     * Test of toString method, of class JsBoolean.
-     */
-    @Test
-    public void testToString(){
-        System.out.println("toString");
-        assertEquals("true", JsBoolean.TRUE.toString());
-        assertEquals("false", JsBoolean.FALSE.toString());
-        return;
-    }
-
-    /**
-     * Test of toString method, of class JsBoolean.
-     */
-    @Test
-    public void testEtc(){
-        System.out.println("etc.");
-        assertNotNull(JsBoolean.TRUE);
-        assertNotNull(JsBoolean.FALSE);
-        assertTrue(JsBoolean.TRUE instanceof JsBoolean);
-        assertTrue(JsBoolean.FALSE instanceof JsBoolean);
-        return;
-    }
-
-}
diff --git a/src/test/java/jp/sourceforge/jindolf/json/JsNullTest.java b/src/test/java/jp/sourceforge/jindolf/json/JsNullTest.java
deleted file mode 100644 (file)
index 88fcb66..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import static org.junit.Assert.*;
-
-/**
- *
- */
-public class JsNullTest {
-
-    public JsNullTest() {
-    }
-
-    @BeforeClass
-    public static void setUpClass() throws Exception{
-    }
-
-    @AfterClass
-    public static void tearDownClass() throws Exception{
-    }
-
-    @Before
-    public void setUp() {
-    }
-
-    @After
-    public void tearDown() {
-    }
-
-    /**
-     * Test of etc of class JsNull.
-     */
-    @Test
-    public void testEtc(){
-        System.out.println("etc");
-        assertNotNull(JsNull.NULL);
-        assertTrue(JsNull.NULL instanceof JsNull);
-        return;
-    }
-
-    /**
-     * Test of hasChanged method, of class JsNull.
-     */
-    @Test
-    public void testHasChanged(){
-        System.out.println("hasChanged");
-        assertFalse(JsNull.NULL.hasChanged());
-        JsNull.NULL.setUnchanged();
-        assertFalse(JsNull.NULL.hasChanged());
-        return;
-    }
-
-    /**
-     * Test of setUnchanged method, of class JsNull.
-     */
-    @Test
-    public void testSetUnchanged(){
-        System.out.println("setUnchanged");
-        JsNull.NULL.setUnchanged();
-        assertFalse(JsNull.NULL.hasChanged());
-        return;
-    }
-
-    /**
-     * Test of traverse method, of class JsNull.
-     */
-    @Test
-    public void testTraverse(){
-        System.out.println("traverse");
-        try{
-            JsNull.NULL.traverse(new ValueVisitor(){
-                int ct = 0;
-
-                public void visitValue(JsValue value)
-                        throws JsVisitException{
-                    assertEquals(JsNull.NULL, value);
-                    assertTrue(this.ct++ <= 0);
-                }
-
-                public void visitPairName(String name)
-                        throws JsVisitException{
-                    throw new JsVisitException();
-                }
-
-                public void visitCollectionClose(JsValue composite)
-                        throws JsVisitException{
-                    throw new JsVisitException();
-                }
-            });
-        }catch(JsVisitException e){
-            fail();
-        }
-        return;
-    }
-
-    /**
-     * Test of compareTo method, of class JsNull.
-     */
-    @Test
-    public void testCompareTo(){
-        System.out.println("compareTo");
-        assertEquals(0, JsNull.NULL.compareTo(JsNull.NULL));
-        try{
-            JsNull.NULL.compareTo(null);
-            fail();
-        }catch(NullPointerException e){
-            // NOTHING
-        }
-        return;
-    }
-
-    /**
-     * Test of toString method, of class JsNull.
-     */
-    @Test
-    public void testToString(){
-        System.out.println("toString");
-        assertEquals("null", JsNull.NULL.toString());
-        return;
-    }
-
-}
diff --git a/src/test/java/jp/sourceforge/jindolf/json/JsNumberTest.java b/src/test/java/jp/sourceforge/jindolf/json/JsNumberTest.java
deleted file mode 100644 (file)
index 3b8a057..0000000
+++ /dev/null
@@ -1,470 +0,0 @@
-/*
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-import java.io.StringReader;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import static org.junit.Assert.*;
-
-/**
- *
- */
-public class JsNumberTest {
-
-    public JsNumberTest() {
-    }
-
-    @BeforeClass
-    public static void setUpClass() throws Exception{
-    }
-
-    @AfterClass
-    public static void tearDownClass() throws Exception{
-    }
-
-    @Before
-    public void setUp() {
-    }
-
-    @After
-    public void tearDown() {
-    }
-
-    /**
-     * Test of parseNumber method, of class JsNumber.
-     */
-    @Test
-    public void testParseNumber() throws Exception{
-        System.out.println("parseNumber");
-
-        JsonReader reader;
-        JsNumber number;
-
-        try{
-            reader = new JsonReader(new StringReader("0"));
-            number = JsNumber.parseNumber(reader);
-            fail();
-        }catch(JsParseException e){
-            // NOTHING
-        }
-
-        reader = new JsonReader(new StringReader("0,"));
-        number = JsNumber.parseNumber(reader);
-        assertEquals("0", number.toString());
-
-        reader = new JsonReader(new StringReader("\n\r\t\u00200,"));
-        number = JsNumber.parseNumber(reader);
-        assertEquals("0", number.toString());
-
-        reader = new JsonReader(new StringReader("-0,"));
-        number = JsNumber.parseNumber(reader);
-        assertEquals("0", number.toString());
-
-        reader = new JsonReader(new StringReader("12,"));
-        number = JsNumber.parseNumber(reader);
-        assertEquals("12", number.toString());
-
-        reader = new JsonReader(new StringReader("-12,"));
-        number = JsNumber.parseNumber(reader);
-        assertEquals("-12", number.toString());
-
-        try{
-            reader = new JsonReader(new StringReader("+12,"));
-            number = JsNumber.parseNumber(reader);
-            fail();
-        }catch(JsParseException e){
-            // NOTHING
-        }
-
-        try{
-            reader = new JsonReader(new StringReader("12.,"));
-            number = JsNumber.parseNumber(reader);
-            fail();
-        }catch(JsParseException e){
-            // NOTHING
-        }
-
-        reader = new JsonReader(new StringReader("12.34,"));
-        number = JsNumber.parseNumber(reader);
-        assertEquals("12.34", number.toString());
-
-        reader = new JsonReader(new StringReader("12.0,"));
-        number = JsNumber.parseNumber(reader);
-        assertEquals("12.0", number.toString());
-
-        reader = new JsonReader(new StringReader("12.00,"));
-        number = JsNumber.parseNumber(reader);
-        assertEquals("12.00", number.toString());
-
-        reader = new JsonReader(new StringReader("12.003,"));
-        number = JsNumber.parseNumber(reader);
-        assertEquals("12.003", number.toString());
-
-        reader = new JsonReader(new StringReader("12.0030,"));
-        number = JsNumber.parseNumber(reader);
-        assertEquals("12.0030", number.toString());
-
-        try{
-            reader = new JsonReader(new StringReader("09,"));
-            number = JsNumber.parseNumber(reader);
-            fail();
-        }catch(JsParseException e){
-            // NOTHING
-        }
-
-        reader = new JsonReader(new StringReader("12e34,"));
-        number = JsNumber.parseNumber(reader);
-        assertEquals("1.2E+35", number.toString());
-
-        reader = new JsonReader(new StringReader("12E34,"));
-        number = JsNumber.parseNumber(reader);
-        assertEquals("1.2E+35", number.toString());
-
-        reader = new JsonReader(new StringReader("12e+34,"));
-        number = JsNumber.parseNumber(reader);
-        assertEquals("1.2E+35", number.toString());
-
-        reader = new JsonReader(new StringReader("12e-34,"));
-        number = JsNumber.parseNumber(reader);
-        assertEquals("1.2E-33", number.toString());
-
-        reader = new JsonReader(new StringReader("12e0034,"));
-        number = JsNumber.parseNumber(reader);
-        assertEquals("1.2E+35", number.toString());
-
-        try{
-            reader = new JsonReader(new StringReader("12e,"));
-            number = JsNumber.parseNumber(reader);
-            fail();
-        }catch(JsParseException e){
-            // NOTHING
-        }
-
-        try{
-            reader = new JsonReader(new StringReader("12e+,"));
-            number = JsNumber.parseNumber(reader);
-            fail();
-        }catch(JsParseException e){
-            // NOTHING
-        }
-
-        try{
-            reader = new JsonReader(new StringReader("12e-,"));
-            number = JsNumber.parseNumber(reader);
-            fail();
-        }catch(JsParseException e){
-            // NOTHING
-        }
-
-        reader = new JsonReader(new StringReader("-12.34e-056,"));
-        number = JsNumber.parseNumber(reader);
-        assertEquals("-1.234E-55", number.toString());
-
-        return;
-    }
-
-    /**
-     * Test of constructor, of class JsNumber.
-     */
-    @Test
-    public void testConstructors() throws Exception{
-        System.out.println("constructor");
-
-        JsNumber number;
-        BigDecimal decimal;
-
-        number = new JsNumber(99L);
-        decimal = number.getBigDecimal();
-        assertEquals(new BigInteger("99"), decimal.unscaledValue());
-        assertEquals(0, decimal.scale());
-
-        number = new JsNumber(99.0);
-        decimal = number.getBigDecimal();
-        assertEquals(new BigInteger("990"), decimal.unscaledValue());
-        assertEquals(1, decimal.scale());
-
-        number = new JsNumber(new BigInteger("99"));
-        decimal = number.getBigDecimal();
-        assertEquals(new BigInteger("99"), decimal.unscaledValue());
-        assertEquals(0, decimal.scale());
-
-        number = new JsNumber("99.9");
-        decimal = number.getBigDecimal();
-        assertEquals(new BigInteger("999"), decimal.unscaledValue());
-        assertEquals(1, decimal.scale());
-
-        number = new JsNumber(new BigDecimal("99.9"));
-        decimal = number.getBigDecimal();
-        assertEquals(new BigInteger("999"), decimal.unscaledValue());
-        assertEquals(1, decimal.scale());
-
-        return;
-    }
-
-    /**
-     * Test of traverse method, of class JsNumber.
-     */
-    @Test
-    public void testTraverse(){
-        System.out.println("traverse");
-
-        JsNumber number = new JsNumber("0");
-
-        try{
-            number.traverse(new ValueVisitor(){
-                int ct = 0;
-
-                public void visitValue(JsValue value)
-                        throws JsVisitException{
-                    assertEquals(new JsNumber("0"), value);
-                    assertTrue(this.ct++ <= 0);
-                }
-
-                public void visitPairName(String name)
-                        throws JsVisitException{
-                    throw new JsVisitException();
-                }
-
-                public void visitCollectionClose(JsValue composite)
-                        throws JsVisitException{
-                    throw new JsVisitException();
-                }
-            });
-        }catch(JsVisitException e){
-            fail();
-        }
-
-        return;
-    }
-
-    /**
-     * Test of hasChanged method, of class JsNumber.
-     */
-    @Test
-    public void testHasChanged(){
-        System.out.println("hasChanged");
-
-        JsNumber number = new JsNumber("0");
-
-        assertFalse(number.hasChanged());
-        number.setUnchanged();
-        assertFalse(number.hasChanged());
-
-        return;
-    }
-
-    /**
-     * Test of setUnchanged method, of class JsNumber.
-     */
-    @Test
-    public void testSetUnchanged(){
-        System.out.println("setUnchanged");
-
-        JsNumber number = new JsNumber("0");
-
-        number.setUnchanged();
-        assertFalse(number.hasChanged());
-
-        return;
-    }
-
-    /**
-     * Test of getBigDecimal method, of class JsNumber.
-     */
-    @Test
-    public void testGetBigDecimal(){
-        System.out.println("getBigDecimal");
-
-        JsNumber number = new JsNumber("-123.456e+1");
-        BigDecimal decimal = number.getBigDecimal();
-
-        assertEquals(new BigDecimal("-123.456e+1"), decimal);
-        assertEquals(2, decimal.scale());
-        assertEquals(new BigInteger("-123456"), decimal.unscaledValue());
-
-        return;
-    }
-
-    /**
-     * Test of intValue method, of class JsNumber.
-     */
-    @Test
-    public void testIntValue(){
-        System.out.println("intValue");
-
-        assertEquals(0, new JsNumber("0").intValue());
-        assertEquals(99, new JsNumber("99.9").intValue());
-        assertEquals(-99, new JsNumber("-99.9").intValue());
-        assertEquals(2147483647, new JsNumber("2147483647").intValue());
-
-        return;
-    }
-
-    /**
-     * Test of longValue method, of class JsNumber.
-     */
-    @Test
-    public void testLongValue(){
-        System.out.println("longValue");
-
-        assertEquals(0L, new JsNumber("0").longValue());
-        assertEquals(99L, new JsNumber("99.9").longValue());
-        assertEquals(-99L, new JsNumber("-99.9").longValue());
-        assertEquals(999999999999L, new JsNumber("999999999999").longValue());
-
-        return;
-    }
-
-    /**
-     * Test of floatValue method, of class JsNumber.
-     */
-    @Test
-    public void testFloatValue(){
-        System.out.println("floatValue");
-
-        assertEquals(1.25f, new JsNumber("1.25").floatValue(), 0.0);
-        assertEquals(1.25f, new JsNumber("125E-2").floatValue(), 0.0);
-
-        return;
-    }
-
-    /**
-     * Test of doubleValue method, of class JsNumber.
-     */
-    @Test
-    public void testDoubleValue(){
-        System.out.println("doubleValue");
-
-        assertEquals(1.25, new JsNumber("1.25").doubleValue(), 0.0);
-        assertEquals(1.25, new JsNumber("125E-2").doubleValue(), 0.0);
-
-        return;
-    }
-
-    /**
-     * Test of hashCode method, of class JsNumber.
-     */
-    @Test
-    public void testHashCode(){
-        System.out.println("hashCode");
-
-        assertEquals(new JsNumber("1").hashCode(), new JsNumber("1").hashCode());
-        assertEquals(new JsNumber("1.23").hashCode(), new JsNumber("123e-2").hashCode());
-
-        return;
-    }
-
-    /**
-     * Test of equals method, of class JsNumber.
-     */
-    @Test
-    public void testEquals(){
-        System.out.println("equals");
-
-        assertTrue(new JsNumber("1").equals(new JsNumber("1")));
-        assertFalse(new JsNumber("1").equals(new JsNumber("2")));
-        assertFalse(new JsNumber("1").equals(null));
-
-        assertTrue(new JsNumber("1.23").equals(new JsNumber("123e-2")));
-        assertFalse(new JsNumber("1.0").equals(new JsNumber("1.00")));
-
-        return;
-    }
-
-    /**
-     * Test of compareTo method, of class JsNumber.
-     */
-    @Test
-    public void testCompareTo(){
-        System.out.println("compareTo");
-
-        assertTrue(0 > new JsNumber("-1").compareTo(new JsNumber("1")));
-        assertTrue(0 < new JsNumber("1").compareTo(new JsNumber("-1")));
-        assertTrue(new JsNumber("1").compareTo(new JsNumber("1")) == 0);
-
-        assertTrue(0 > new JsNumber("1").compareTo(new JsNumber("2")));
-        assertTrue(0 < new JsNumber("9").compareTo(new JsNumber("8")));
-
-        assertTrue(new JsNumber("1.23").compareTo(new JsNumber("123e-2")) == 0);
-        assertTrue(new JsNumber("1.0").compareTo(new JsNumber("1.00")) == 0);
-
-        return;
-    }
-
-    /**
-     * Test of toString method, of class JsNumber.
-     */
-    @Test
-    public void testToString(){
-        System.out.println("toString");
-
-        JsNumber number;
-
-        number = new JsNumber("0");
-        assertEquals("0", number.toString());
-        number = new JsNumber("+0");
-        assertEquals("0", number.toString());
-        number = new JsNumber("-0");
-        assertEquals("0", number.toString());
-
-        number = new JsNumber("1");
-        assertEquals("1", number.toString());
-        number = new JsNumber("+1");
-        assertEquals("1", number.toString());
-        number = new JsNumber("-1");
-        assertEquals("-1", number.toString());
-
-        number = new JsNumber("0.0");
-        assertEquals("0.0", number.toString());
-
-        number = new JsNumber("1.0");
-        assertEquals("1.0", number.toString());
-
-        number = new JsNumber("1.00");
-        assertEquals("1.00", number.toString());
-
-        number = new JsNumber("0.1");
-        assertEquals("0.1", number.toString());
-
-        number = new JsNumber("0.10");
-        assertEquals("0.10", number.toString());
-
-        number = new JsNumber("0.000001");
-        assertEquals("0.000001", number.toString());
-
-        number = new JsNumber("0.0000001");
-        assertEquals("1E-7", number.toString());
-
-        number = new JsNumber("123e0");
-        assertEquals("123", number.toString());
-
-        number = new JsNumber("123e1");
-        assertEquals("1.23E+3", number.toString());
-
-        number = new JsNumber("123E1");
-        assertEquals("1.23E+3", number.toString());
-
-        number = new JsNumber("123e+1");
-        assertEquals("1.23E+3", number.toString());
-
-        number = new JsNumber("123e-1");
-        assertEquals("12.3", number.toString());
-
-        number = new JsNumber("123e-8");
-        assertEquals("0.00000123", number.toString());
-
-        number = new JsNumber("123e-9");
-        assertEquals("1.23E-7", number.toString());
-
-        return;
-    }
-
-}
diff --git a/src/test/java/jp/sourceforge/jindolf/json/JsObjectTest.java b/src/test/java/jp/sourceforge/jindolf/json/JsObjectTest.java
deleted file mode 100644 (file)
index 5de7273..0000000
+++ /dev/null
@@ -1,463 +0,0 @@
-/*
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-import java.io.StringReader;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import static org.junit.Assert.*;
-
-/**
- *
- */
-public class JsObjectTest {
-
-    public JsObjectTest() {
-    }
-
-    @BeforeClass
-    public static void setUpClass() throws Exception{
-    }
-
-    @AfterClass
-    public static void tearDownClass() throws Exception{
-    }
-
-    @Before
-    public void setUp() {
-    }
-
-    @After
-    public void tearDown() {
-    }
-
-    /**
-     * Test of parseObject method, of class JsObject.
-     */
-    @Test
-    public void testParseObject() throws Exception{
-        System.out.println("parseObject");
-
-        JsonReader reader;
-        JsObject object;
-
-        reader = new JsonReader(new StringReader("{}"));
-        object = JsObject.parseObject(reader);
-        assertEquals(0, object.size());
-
-        reader = new JsonReader(new StringReader("{\"A\":true}"));
-        object = JsObject.parseObject(reader);
-        assertEquals(1, object.size());
-        assertEquals(JsBoolean.TRUE, object.getPair("A").getValue());
-
-        reader = new JsonReader(new StringReader("{\"A\":true,\"B\":false}"));
-        object = JsObject.parseObject(reader);
-        assertEquals(2, object.size());
-        assertEquals(JsBoolean.TRUE, object.getPair("A").getValue());
-        assertEquals(JsBoolean.FALSE, object.getPair("B").getValue());
-
-        reader = new JsonReader(new StringReader("\n{\r\"A\"\t: true,\"B\":false\n}\r"));
-        object = JsObject.parseObject(reader);
-        assertEquals(2, object.size());
-        assertEquals(JsBoolean.TRUE, object.getPair("A").getValue());
-        assertEquals(JsBoolean.FALSE, object.getPair("B").getValue());
-
-        try{
-            reader = new JsonReader(new StringReader("{,}"));
-            object = JsObject.parseObject(reader);
-            fail();
-        }catch(JsParseException e){
-            // NOTHING
-        }
-
-        try{
-            reader = new JsonReader(new StringReader("{true,}"));
-            object = JsObject.parseObject(reader);
-            fail();
-        }catch(JsParseException e){
-            // NOTHING
-        }
-
-        try{
-            reader = new JsonReader(new StringReader("{true"));
-            object = JsObject.parseObject(reader);
-            fail();
-        }catch(JsParseException e){
-            // NOTHING
-        }
-
-        try{
-            reader = new JsonReader(new StringReader("true}"));
-            object = JsObject.parseObject(reader);
-            fail();
-        }catch(JsParseException e){
-            // NOTHING
-        }
-
-        return;
-    }
-
-    /**
-     * Test of putValue method, of class JsObject.
-     */
-    @Test
-    public void testPutGetValue(){
-        System.out.println("putValue");
-
-        JsObject object = new JsObject();
-        assertEquals(0, object.size());
-
-        object.putValue("x", JsNull.NULL);
-        assertEquals(1, object.size());
-        assertEquals(JsNull.NULL, object.getValue("x"));
-        assertEquals(null, object.getValue("y"));
-
-        object.putValue("y", JsBoolean.TRUE);
-        assertEquals(2, object.size());
-        assertEquals(JsBoolean.TRUE, object.getValue("y"));
-
-        object.putValue("x", JsBoolean.FALSE);
-        assertEquals(2, object.size());
-        assertEquals(JsBoolean.FALSE, object.getValue("x"));
-
-        return;
-    }
-
-    /**
-     * Test of putPair method, of class JsObject.
-     */
-    @Test
-    public void testPutGetPair(){
-        System.out.println("putPair");
-
-        JsObject object = new JsObject();
-        assertEquals(0, object.size());
-
-        JsPair pair = new JsPair("x", JsNull.NULL);
-        object.putPair(pair);
-        assertEquals(1, object.size());
-        assertEquals(JsNull.NULL, object.getValue("x"));
-
-        JsPair pair2 = object.getPair("x");
-        assertNotNull(pair2);
-        assertEquals("x", pair2.getName());
-        assertEquals(JsNull.NULL, pair2.getValue());
-
-        assertNull(object.getPair("y"));
-
-        return;
-    }
-
-    /**
-     * Test of clear method, of class JsObject.
-     */
-    @Test
-    public void testClear(){
-        System.out.println("clear");
-
-        JsObject object = new JsObject();
-        assertEquals(0, object.size());
-
-        object.putValue("x", JsNull.NULL);
-        assertEquals(1, object.size());
-
-        object.clear();
-        assertEquals(0, object.size());
-
-        return;
-    }
-
-    /**
-     * Test of remove method, of class JsObject.
-     */
-    @Test
-    public void testRemove(){
-        System.out.println("remove");
-
-        JsObject object = new JsObject();
-
-        object.putValue("x", JsNull.NULL);
-        assertEquals(1, object.size());
-
-        assertNotNull(object.getValue("x"));
-
-        assertEquals(JsNull.NULL, object.remove("x"));
-        assertEquals(0, object.size());
-        assertNull(object.getValue("x"));
-
-        assertNull(object.remove("y"));
-
-        return;
-    }
-
-    /**
-     * Test of nameSet method, of class JsObject.
-     */
-    @Test
-    public void testNameSet(){
-        System.out.println("nameSet");
-
-        JsObject object = new JsObject();
-        Set<String> set;
-
-        set = object.nameSet();
-        assertEquals(0, set.size());
-
-        object.putValue("y", JsNull.NULL);
-        object.putValue("z", JsNull.NULL);
-        object.putValue("x", JsNull.NULL);
-
-        set = object.nameSet();
-        assertEquals(3, set.size());
-        Object[] names = set.toArray();
-
-        assertEquals("x", names[0]);
-        assertEquals("y", names[1]);
-        assertEquals("z", names[2]);
-
-        return;
-    }
-
-    /**
-     * Test of getPairList method, of class JsObject.
-     */
-    @Test
-    public void testGetPairList(){
-        System.out.println("getPairList");
-
-        JsObject object = new JsObject();
-        List<JsPair> list;
-
-        list = object.getPairList();
-        assertEquals(0, list.size());
-
-        object.putValue("y", JsNull.NULL);
-        object.putValue("z", JsBoolean.TRUE);
-        object.putValue("x", JsBoolean.FALSE);
-
-        list = object.getPairList();
-        assertEquals(3, list.size());
-
-        assertEquals("x", list.get(0).getName());
-        assertEquals("y", list.get(1).getName());
-        assertEquals("z", list.get(2).getName());
-        assertEquals(JsBoolean.FALSE, list.get(0).getValue());
-        assertEquals(JsNull.NULL, list.get(1).getValue());
-        assertEquals(JsBoolean.TRUE, list.get(2).getValue());
-
-        return;
-    }
-
-    /**
-     * Test of iterator method, of class JsObject.
-     */
-    @Test
-    public void testIterator(){
-        System.out.println("iterator");
-
-        JsObject object = new JsObject();
-        object.putValue("y", JsBoolean.FALSE);
-        object.putValue("x", JsBoolean.TRUE);
-
-        Iterator<JsPair> it = object.iterator();
-
-        assertTrue(it.hasNext());
-        assertEquals(JsBoolean.TRUE, it.next().getValue());
-        assertTrue(it.hasNext());
-        assertEquals(JsBoolean.FALSE, it.next().getValue());
-        assertFalse(it.hasNext());
-
-        return;
-    }
-
-    /**
-     * Test of size method, of class JsObject.
-     */
-    @Test
-    public void testSize(){
-        System.out.println("size");
-
-        JsObject object = new JsObject();
-        assertEquals(0, object.size());
-        object.putValue("x", JsBoolean.TRUE);
-        assertEquals(1, object.size());
-        object.putValue("y", JsBoolean.FALSE);
-        assertEquals(2, object.size());
-
-        return;
-    }
-
-    /**
-     * Test of hashCode method, of class JsObject.
-     */
-    @Test
-    public void testHashCode(){
-        System.out.println("hashCode");
-
-        JsObject obj1 = new JsObject();
-        JsObject obj2 = new JsObject();
-        assertEquals(obj1.hashCode(), obj2.hashCode());
-
-        obj1.putValue("x", new JsNumber("99"));
-        obj2.putValue("x", new JsNumber("99"));
-        assertEquals(obj1.hashCode(), obj2.hashCode());
-
-        return;
-    }
-
-    /**
-     * Test of equals method, of class JsObject.
-     */
-    @Test
-    public void testEquals(){
-        System.out.println("equals");
-
-        JsObject obj1 = new JsObject();
-        JsObject obj2 = new JsObject();
-        assertTrue(obj1.equals(obj2));
-
-        obj1.putValue("x", new JsNumber("99"));
-        obj2.putValue("x", new JsNumber("99"));
-        assertTrue(obj1.equals(obj2));
-
-        obj1.putValue("x", new JsNumber("99"));
-        obj2.putValue("x", new JsNumber("999"));
-        assertFalse(obj1.equals(obj2));
-
-        assertFalse(obj1.equals(null));
-
-        return;
-    }
-
-    /**
-     * Test of toString method, of class JsObject.
-     */
-    @Test
-    public void testToString(){
-        System.out.println("toString");
-
-        JsObject object = new JsObject();
-
-        assertEquals("{}", object.toString());
-
-        object.putValue("x", JsBoolean.TRUE);
-        assertEquals("{\"x\":true}", object.toString());
-
-        object.putValue("y", JsBoolean.FALSE);
-        assertEquals("{\"x\":true,\"y\":false}", object.toString());
-
-        object.putValue("z", new JsObject());
-        assertEquals("{\"x\":true,\"y\":false,\"z\":{}}", object.toString());
-
-        return;
-    }
-
-    /**
-     * Test of traverse method, of class JsObject.
-     */
-    @Test
-    public void testTraverse() throws Exception{
-        System.out.println("traverse");
-
-        JsObject obj = new JsObject();
-        JsValue val1 = new JsNumber("12");
-        JsValue val2 = new JsString("AB");
-        obj.putValue("x", val1);
-        obj.putValue("y", val2);
-
-        final List<Object> visited = new LinkedList<Object>();
-
-        try{
-            obj.traverse(new ValueVisitor(){
-                public void visitValue(JsValue value)
-                        throws JsVisitException{
-                    visited.add(value);
-                    return;
-                }
-
-                public void visitPairName(String name)
-                        throws JsVisitException{
-                    visited.add(name);
-                    return;
-                }
-
-                public void visitCollectionClose(JsValue composite)
-                        throws JsVisitException{
-                    visited.add(composite);
-                    return;
-                }
-            });
-        }catch(JsVisitException e){
-            fail();
-        }
-
-        assertEquals(6, visited.size());
-        assertEquals(obj, visited.get(0));
-        assertEquals("x", visited.get(1));
-        assertEquals(val1, visited.get(2));
-        assertEquals("y", visited.get(3));
-        assertEquals(val2, visited.get(4));
-        assertEquals(obj, visited.get(5));
-
-        return;
-    }
-
-    /**
-     * Test of hasChanged method, of class JsObject.
-     */
-    @Test
-    public void testHasChanged(){
-        System.out.println("hasChanged");
-
-        JsObject obj = new JsObject();
-        assertFalse(obj.hasChanged());
-
-        obj.putValue("x", JsNull.NULL);
-        assertTrue(obj.hasChanged());
-
-        obj.setUnchanged();
-        assertFalse(obj.hasChanged());
-
-        JsObject child = new JsObject();
-        obj.putValue("y", child);
-        obj.setUnchanged();
-        assertFalse(obj.hasChanged());
-
-        child.putValue("z", JsBoolean.TRUE);
-        assertTrue(obj.hasChanged());
-        obj.setUnchanged();
-        assertFalse(obj.hasChanged());
-
-        return;
-    }
-
-    /**
-     * Test of setUnchanged method, of class JsObject.
-     */
-    @Test
-    public void testSetUnchanged(){
-        System.out.println("setUnchanged");
-
-        JsObject obj = new JsObject();
-        JsObject child = new JsObject();
-        obj.putValue("x", child);
-
-        child.putValue("y", JsNull.NULL);
-        assertTrue(child.hasChanged());
-
-        obj.setUnchanged();
-        assertFalse(child.hasChanged());
-
-        return;
-    }
-
-}
diff --git a/src/test/java/jp/sourceforge/jindolf/json/JsPairTest.java b/src/test/java/jp/sourceforge/jindolf/json/JsPairTest.java
deleted file mode 100644 (file)
index 159fde5..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import static org.junit.Assert.*;
-
-/**
- *
- */
-public class JsPairTest {
-
-    public JsPairTest() {
-    }
-
-    @BeforeClass
-    public static void setUpClass() throws Exception{
-    }
-
-    @AfterClass
-    public static void tearDownClass() throws Exception{
-    }
-
-    @Before
-    public void setUp() {
-    }
-
-    @After
-    public void tearDown() {
-    }
-
-    /**
-     * Test of getName method, of class JsPair.
-     */
-    @Test
-    public void testGetName(){
-        System.out.println("getName");
-
-        JsPair pair;
-
-        pair = new JsPair("", JsNull.NULL);
-        assertEquals("", pair.getName());
-
-        pair = new JsPair("a", JsNull.NULL);
-        assertEquals("a", pair.getName());
-
-        return;
-    }
-
-    /**
-     * Test of getValue method, of class JsPair.
-     */
-    @Test
-    public void testGetValue(){
-        System.out.println("getValue");
-
-        JsPair pair;
-
-        pair = new JsPair("x", JsNull.NULL);
-        assertEquals(JsNull.NULL, pair.getValue());
-
-        pair = new JsPair("x", "abc");
-        assertEquals(new JsString("abc"), pair.getValue());
-
-        pair = new JsPair("x", true);
-        assertEquals(JsBoolean.TRUE, pair.getValue());
-
-        pair = new JsPair("x", false);
-        assertEquals(JsBoolean.FALSE, pair.getValue());
-
-        pair = new JsPair("x", 999999999999L);
-        assertEquals(new JsNumber("999999999999"), pair.getValue());
-
-        pair = new JsPair("x", 1.25);
-        assertEquals(new JsNumber("1.25"), pair.getValue());
-
-        return;
-    }
-
-    /**
-     * Test of toString method, of class JsPair.
-     */
-    @Test
-    public void testToString(){
-        System.out.println("toString");
-
-        JsPair pair;
-
-        pair = new JsPair("x", JsNull.NULL);
-        assertEquals("\"x\":null", pair.toString());
-
-        pair = new JsPair("", JsNull.NULL);
-        assertEquals("\"\":null", pair.toString());
-
-        return;
-    }
-
-}
diff --git a/src/test/java/jp/sourceforge/jindolf/json/JsStringTest.java b/src/test/java/jp/sourceforge/jindolf/json/JsStringTest.java
deleted file mode 100644 (file)
index 7bcb819..0000000
+++ /dev/null
@@ -1,431 +0,0 @@
-/*
- * Copyright(c) 2009 olyutorskii
- */
-
-package jp.sourceforge.jindolf.json;
-
-import java.io.StringReader;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import static org.junit.Assert.*;
-
-/**
- *
- */
-public class JsStringTest {
-
-    public JsStringTest() {
-    }
-
-    @BeforeClass
-    public static void setUpClass() throws Exception{
-    }
-
-    @AfterClass
-    public static void tearDownClass() throws Exception{
-    }
-
-    @Before
-    public void setUp() {
-    }
-
-    @After
-    public void tearDown() {
-    }
-
-    /**
-     * Test of parseHexChar method, of class JsString.
-     */
-    @Test
-    public void testParseHexChar() throws Exception{
-        System.out.println("parseHexChar");
-
-        JsonReader reader;
-        char ch;
-
-        reader = new JsonReader(new StringReader("0000"));
-        ch = JsString.parseHexChar(reader);
-        assertEquals('\u0000', ch);
-
-        reader = new JsonReader(new StringReader("ffff"));
-        ch = JsString.parseHexChar(reader);
-        assertEquals('\uffff', ch);
-
-        reader = new JsonReader(new StringReader("FFFF"));
-        ch = JsString.parseHexChar(reader);
-        assertEquals('\uffff', ch);
-
-        reader = new JsonReader(new StringReader("dead"));
-        ch = JsString.parseHexChar(reader);
-        assertEquals('\udead', ch);
-
-        reader = new JsonReader(new StringReader("abcde"));
-        ch = JsString.parseHexChar(reader);
-        assertEquals('\uabcd', ch);
-
-        try{
-            reader = new JsonReader(new StringReader("000,"));
-            ch = JsString.parseHexChar(reader);
-            fail();
-        }catch(JsParseException e){
-            // NOTHING
-        }
-
-        return;
-    }
-
-    /**
-     * Test of parseString method, of class JsString.
-     */
-    @Test
-    public void testParseString() throws Exception{
-        System.out.println("parseString");
-
-        JsonReader reader;
-        JsString string;
-
-        reader = new JsonReader(new StringReader("\"abc\""));
-        string = JsString.parseString(reader);
-        assertEquals("abc", string.toRawString());
-
-        reader = new JsonReader(new StringReader("\"あいう\""));
-        string = JsString.parseString(reader);
-        assertEquals("あいう", string.toRawString());
-
-        reader = new JsonReader(new StringReader("\"\\\"\\\\\\/\""));
-        string = JsString.parseString(reader);
-        assertEquals("\"\\/", string.toRawString());
-
-        reader = new JsonReader(new StringReader("\"\\b\\f\\n\\r\\t\""));
-        string = JsString.parseString(reader);
-        assertEquals("\b\f\n\r\t", string.toRawString());
-
-        reader = new JsonReader(new StringReader("\"\\uabcd\\uCDEF\""));
-        string = JsString.parseString(reader);
-        assertEquals("\uabcd\ucdef", string.toRawString());
-
-        try{
-            reader = new JsonReader(new StringReader("abc\""));
-            string = JsString.parseString(reader);
-            fail();
-        }catch(JsParseException e){
-            // NOTHING
-        }
-
-        try{
-            reader = new JsonReader(new StringReader("\"abc"));
-            string = JsString.parseString(reader);
-            fail();
-        }catch(JsParseException e){
-            // NOTHING
-        }
-
-        return;
-    }
-
-    /**
-     * Test of writeText method, of class JsString.
-     */
-    @Test
-    public void testWriteText() throws Exception{
-        System.out.println("writeText");
-
-        Appendable appout;
-        JsString string;
-
-        appout = new StringBuilder();
-        string = new JsString();
-        JsString.writeText(appout, string);
-        assertEquals("\"\"", appout.toString());
-
-        appout = new StringBuilder();
-        string = new JsString("abc");
-        JsString.writeText(appout, string);
-        assertEquals("\"abc\"", appout.toString());
-
-        appout = new StringBuilder();
-        string = new JsString("\"");
-        JsString.writeText(appout, string);
-        assertEquals("\"\\\"\"", appout.toString());
-
-        appout = new StringBuilder();
-        string = new JsString("\\");
-        JsString.writeText(appout, string);
-        assertEquals("\"\\\\\"", appout.toString());
-
-        appout = new StringBuilder();
-        string = new JsString("/");
-        JsString.writeText(appout, string);
-        assertEquals("\"\\/\"", appout.toString());
-
-        appout = new StringBuilder();
-        string = new JsString("\b");
-        JsString.writeText(appout, string);
-        assertEquals("\"\\b\"", appout.toString());
-
-        appout = new StringBuilder();
-        string = new JsString("\f");
-        JsString.writeText(appout, string);
-        assertEquals("\"\\f\"", appout.toString());
-
-        appout = new StringBuilder();
-        string = new JsString("\n");
-        JsString.writeText(appout, string);
-        assertEquals("\"\\n\"", appout.toString());
-
-        appout = new StringBuilder();
-        string = new JsString("\r");
-        JsString.writeText(appout, string);
-        assertEquals("\"\\r\"", appout.toString());
-
-        appout = new StringBuilder();
-        string = new JsString("\t");
-        JsString.writeText(appout, string);
-        assertEquals("\"\\t\"", appout.toString());
-
-        appout = new StringBuilder();
-        string = new JsString("\u0001");
-        JsString.writeText(appout, string);
-        assertEquals("\"\\u0001\"", appout.toString());
-
-        appout = new StringBuilder();
-        string = new JsString("あ");
-        JsString.writeText(appout, string);
-        assertEquals("\"あ\"", appout.toString());
-
-        return;
-    }
-
-    /**
-     * Test of traverse method, of class JsString.
-     */
-    @Test
-    public void testTraverse(){
-        System.out.println("traverse");
-
-        JsString string = new JsString("A");
-
-        try{
-            string.traverse(new ValueVisitor(){
-                int ct = 0;
-
-                public void visitValue(JsValue value)
-                        throws JsVisitException{
-                    assertEquals(new JsString("A"), value);
-                    assertTrue(this.ct++ <= 0);
-                }
-
-                public void visitPairName(String name)
-                        throws JsVisitException{
-                    throw new JsVisitException();
-                }
-
-                public void visitCollectionClose(JsValue composite)
-                        throws JsVisitException{
-                    throw new JsVisitException();
-                }
-            });
-        }catch(JsVisitException e){
-            fail();
-        }
-
-        return;
-    }
-
-    /**
-     * Test of hasChanged method, of class JsString.
-     */
-    @Test
-    public void testHasChanged(){
-        System.out.println("hasChanged");
-
-        JsString string = new JsString("A");
-
-        assertFalse(string.hasChanged());
-        string.setUnchanged();
-        assertFalse(string.hasChanged());
-
-        return;
-    }
-
-    /**
-     * Test of setUnchanged method, of class JsString.
-     */
-    @Test
-    public void testSetUnchanged(){
-        System.out.println("setUnchanged");
-
-        JsString string = new JsString("A");
-
-        string.setUnchanged();
-        assertFalse(string.hasChanged());
-
-        return;
-    }
-
-    /**
-     * Test of charAt method, of class JsString.
-     */
-    @Test
-    public void testCharAt(){
-        System.out.println("charAt");
-
-        JsString string;
-
-        string = new JsString("abcde");
-        assertEquals('b', string.charAt(1));
-
-        try{
-            string.charAt(999);
-            fail();
-        }catch(IndexOutOfBoundsException e){
-            // NOTHING
-        }
-
-        return;
-    }
-
-    /**
-     * Test of length method, of class JsString.
-     */
-    @Test
-    public void testLength(){
-        System.out.println("length");
-
-        assertEquals(0, new JsString().length());
-        assertEquals(0, new JsString("").length());
-        assertEquals(1, new JsString("A").length());
-        assertEquals(2, new JsString("AB").length());
-        assertEquals(3, new JsString("A\"B").length());
-
-        return;
-    }
-
-    /**
-     * Test of subSequence method, of class JsString.
-     */
-    @Test
-    public void testSubSequence(){
-        System.out.println("subSequence");
-
-        JsString string;
-
-        string = new JsString("abcde");
-        assertEquals("bcd", string.subSequence(1, 4).toString());
-        assertEquals("", string.subSequence(1, 1).toString());
-
-        try{
-            string.subSequence(1,999);
-            fail();
-        }catch(IndexOutOfBoundsException e){
-            // NOTHING
-        }
-
-        return;
-    }
-
-    /**
-     * Test of hashCode method, of class JsString.
-     */
-    @Test
-    public void testHashCode(){
-        System.out.println("hashCode");
-        assertEquals(new JsString("A").hashCode(), new JsString("A").hashCode());
-        return;
-    }
-
-    /**
-     * Test of equals method, of class JsString.
-     */
-    @Test
-    public void testEquals(){
-        System.out.println("equals");
-
-        assertTrue(new JsString("A").equals(new JsString("A")));
-        assertFalse(new JsString("A").equals(new JsString("a")));
-        assertFalse(new JsString("A").equals(null));
-
-        return;
-    }
-
-    /**
-     * Test of compareTo method, of class JsString.
-     */
-    @Test
-    public void testCompareTo(){
-        System.out.println("compareTo");
-
-        assertTrue(0 == new JsString("A").compareTo(new JsString("A")));
-        assertTrue(0 > new JsString("A").compareTo(new JsString("a")));
-        assertTrue(0 < new JsString("a").compareTo(new JsString("A")));
-        assertTrue(0 < new JsString("A").compareTo(null));
-
-        SortedSet<JsString> set = new TreeSet<JsString>();
-
-        set.clear();
-        set.add(new JsString("A"));
-        set.add(new JsString("a"));
-        assertEquals(new JsString("A"), set.first());
-        assertEquals(new JsString("a"), set.last());
-
-        set.clear();
-        set.add(new JsString("a"));
-        set.add(new JsString("A"));
-        assertEquals(new JsString("A"), set.first());
-        assertEquals(new JsString("a"), set.last());
-
-        return;
-    }
-
-    /**
-     * Test of toString method, of class JsString.
-     */
-    @Test
-    public void testToString(){
-        System.out.println("toString");
-
-        assertEquals("\"\"", new JsString("").toString());
-        assertEquals("\"abc\"", new JsString("abc").toString());
-        assertEquals("\"\\\"\"", new JsString("\"").toString());
-        assertEquals("\"\\\\\"", new JsString("\\").toString());
-        assertEquals("\"\\/\"", new JsString("/").toString());
-        assertEquals("\"\\b\"", new JsString("\b").toString());
-        assertEquals("\"\\f\"", new JsString("\f").toString());
-        assertEquals("\"\\n\"", new JsString("\n").toString());
-        assertEquals("\"\\r\"", new JsString("\r").toString());
-        assertEquals("\"\\t\"", new JsString("\t").toString());
-        assertEquals("\"\\u0001\"", new JsString("\u0001").toString());
-        assertEquals("\"あ\"", new JsString("あ").toString());
-
-        return;
-    }
-
-    /**
-     * Test of toRawString method, of class JsString.
-     */
-    @Test
-    public void testToRawString(){
-        System.out.println("toRawString");
-
-        assertEquals("", new JsString("").toRawString());
-        assertEquals("abc", new JsString("abc").toRawString());
-        assertEquals("\"", new JsString("\"").toRawString());
-        assertEquals("\\", new JsString("\\").toRawString());
-        assertEquals("/", new JsString("/").toRawString());
-        assertEquals("\b", new JsString("\b").toRawString());
-        assertEquals("\f", new JsString("\f").toRawString());
-        assertEquals("\n", new JsString("\n").toRawString());
-        assertEquals("\r", new JsString("\r").toRawString());
-        assertEquals("\t", new JsString("\t").toRawString());
-        assertEquals("\u0001", new JsString("\u0001").toRawString());
-        assertEquals("あ", new JsString("あ").toRawString());
-
-        return;
-    }
-
-}