OSDN Git Service

red: osm.jp.gpx.ElementMapTRKPTTest$Keyとvalueのセット.get_最後の1秒後(ElementMapTRKPTTest...
authorhayashi <hayashi.yuu@gmail.com>
Fri, 23 Jun 2017 00:01:14 +0000 (09:01 +0900)
committerhayashi <hayashi.yuu@gmail.com>
Fri, 23 Jun 2017 00:01:14 +0000 (09:01 +0900)
importPicture/src/osm/jp/gpx/ElementMapTRKPT.java
importPicture/test/osm/jp/gpx/ElementMapTRKPTTest.java

index 15bc6d3..0c8bd06 100644 (file)
@@ -54,7 +54,7 @@ public class ElementMapTRKPT extends TreeMap<Date, Element> {
      * @return エレメントTRKPT。指定時刻に対応するノードがないときはnullを返す。
      * @throws ParseException
      */
-    public Element get(Date jptime) throws ParseException {
+    public Element getValue(Date jptime) throws ParseException {
         Element imaE = getTrkpt(jptime);
         if (imaE != null) {
                Element maeE = getMaeTrkpt(new TagTrkpt(imaE));
@@ -72,10 +72,11 @@ public class ElementMapTRKPT extends TreeMap<Date, Element> {
                 if (Complementation.param_GpxOutputSpeed) {
                        comp.complementationSpeed();
                 }
-                imaE = (Element)(comp.imaTag.trkpt.cloneNode(true));
+                
+                return (Element)(comp.imaTag.trkpt.cloneNode(true));
             }
         }
-        return imaE;
+        return null;
     }
     
     /**
@@ -101,7 +102,7 @@ public class ElementMapTRKPT extends TreeMap<Date, Element> {
 
             if (Math.abs(jpt - t) < sa) {
                 sa = Math.abs(jpt - t);
-                ret = super.get(time);
+                ret = this.get(time);
             }
         }
 
@@ -125,7 +126,7 @@ public class ElementMapTRKPT extends TreeMap<Date, Element> {
 
             if (Math.abs(jpt - t) < diffTime) {
                diffTime = Math.abs(jpt - t);
-                ret = super.get(time);
+                ret = this.get(time);
             }
         }
 
index e021131..89606f6 100644 (file)
@@ -1,20 +1,29 @@
 package osm.jp.gpx;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.*;
 
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Iterator;
 
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.experimental.runners.Enclosed;
 import org.junit.runner.RunWith;
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 
 @RunWith(Enclosed.class)
 public class ElementMapTRKPTTest {
-       public static class 時間順にプットされない場合 {
+       
+       public static class Keyのみ {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
                ElementMapTRKPT map = null;
                long timeL;
@@ -67,5 +76,90 @@ public class ElementMapTRKPTTest {
                }
        }
        
+       public static class Keyとvalueのセット {
+               SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
+               ElementMapTRKPT map = null;
+               long timeL;
+               
+               /*
+                * <trkpt lat="35.8812697884" lon="137.9952202085"><time>2017-05-29T01:23:18Z</time></trkpt>
+                * <trkpt lat="35.8811769169" lon="137.9951928835"><time>2017-05-29T01:23:21Z</time></trkpt>
+                * <trkpt lat="35.881112963" lon="137.9951796401"><time>2017-05-29T01:23:24Z</time></trkpt>
+                * <trkpt lat="35.881072646" lon="137.9951728508"><time>2017-05-29T01:23:27Z</time></trkpt>
+                */
+               static String[][] values = {
+                               {"2017-05-29T01:23:18Z", "35.8812697884", "137.9952202085"},
+                               {"2017-05-29T01:23:21Z", "35.8811769169", "137.9951928835"},
+                               {"2017-05-29T01:23:24Z", "35.881112963", "137.9951796401"},
+                               {"2017-05-29T01:23:27Z", "35.881072646", "137.9951728508"}
+               };
+               
+               Element createElement(Document document, String[] values) {
+                       Element trkpt = document.createElement("trkpt");
+                       trkpt.setAttribute("lat", values[1]);
+                       trkpt.setAttribute("lon", values[2]);
+                       Element timeE = document.createElement("time");
+                       timeE.appendChild(document.createTextNode(values[0]));
+                       trkpt.appendChild(timeE);
+                       return trkpt;
+               }
+               
+               @Before
+               public void setUp() throws Exception {
+                       DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+                       DocumentBuilder builder = factory.newDocumentBuilder();
+                       DOMImplementation domImpl=builder.getDOMImplementation();
+                       Document document = domImpl.createDocument("","trkpt",null);
+                       
+                       map = new ElementMapTRKPT();
+                       for (int cnt = 4; cnt > 0; cnt--) {
+                               map.put(createElement(document, values[cnt - 1]));
+                       }
+               }
+               
+               @Test
+               public void コンテンツの数をチェック() {
+                       assertThat(map.size(), is(4));
+               }
+
+               @Test
+               public void KEYが時間順に取り出せるか() {
+                       int i = 0;
+                       for (Date key : map.keySet()) {
+                               assertThat(sdf.format(key), is(values[i++][0]));
+                       }
+               }
+
+               @Test
+               public void get_一番先頭の1秒前() throws ParseException {
+                       Element ret = map.getValue(ImportPicture.dfuk.parse("2017-05-29T01:23:17Z"));
+                       assertThat(ret, is(nullValue()));
+               }
+
+               @Test
+               public void get_一番先頭のTRKPTと同時刻() throws ParseException {
+                       Element ret = map.getValue(ImportPicture.dfuk.parse("2017-05-29T01:23:18Z"));
+                       assertThat(ret, is(nullValue()));
+               }
 
+               @Test
+               public void get_一番から二番の間() throws ParseException {
+                       Element ret = map.getValue(ImportPicture.dfuk.parse("2017-05-29T01:23:19Z"));
+                       TagTrkpt tag = new TagTrkpt(ret);
+                       assertThat(sdf.format(tag.time), is("2017-05-29T01:23:18Z"));
+               }
+
+               @Test
+               public void get_最後と同時刻() throws ParseException {
+                       Element ret = map.getValue(ImportPicture.dfuk.parse("2017-05-29T01:23:27Z"));
+                       TagTrkpt tag = new TagTrkpt(ret);
+                       assertThat(sdf.format(tag.time), is("2017-05-29T01:23:27Z"));
+               }
+
+               @Test
+               public void get_最後の1秒後() throws ParseException {
+                       Element ret = map.getValue(ImportPicture.dfuk.parse("2017-05-29T01:23:28Z"));
+                       assertThat(ret, is(nullValue()));
+               }
+       }
 }