From a3f91c2f0fd8a43999ab4d3e96b661912192471d Mon Sep 17 00:00:00 2001 From: James Carnegie Date: Mon, 5 Jun 2017 21:02:08 +0100 Subject: [PATCH] Ensure index & original array are passed to map fn #632 --- CHANGELOG.md | 3 +++ src/main/scala/com/atomist/util/lang/JavaScriptArray.scala | 6 ++---- .../scala/com/atomist/util/lang/JavaScriptArrayTest.scala | 6 +++++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 36f0e89ff..23b25d918 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,9 +11,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Fixed +- Ensure index and original array are also passed to map callback + functions [#632][632] - Now only load Gherkin feature definitions from the `.atomist/tests` directory [#629][629] +[632]: https://github.com/atomist/rug/issues/632 [629]: https://github.com/atomist/rug/issues/629 ## [1.0.0-m.4] - 2017-06-01 diff --git a/src/main/scala/com/atomist/util/lang/JavaScriptArray.scala b/src/main/scala/com/atomist/util/lang/JavaScriptArray.scala index 07e59508f..f2ba3c2cd 100644 --- a/src/main/scala/com/atomist/util/lang/JavaScriptArray.scala +++ b/src/main/scala/com/atomist/util/lang/JavaScriptArray.scala @@ -360,12 +360,10 @@ class JavaScriptArray[T](val toProxy: java.util.List[T]) case "map" => new AbstractJSObject { override def call(thiz: scala.Any, args: AnyRef*): AnyRef = { val map = args.head.asInstanceOf[ScriptObjectMirror] - val iter = lyst.listIterator() val res = new JavaScriptArray[AnyRef](new util.ArrayList[AnyRef]()) - while (iter.hasNext) { - val thing = iter.next() + for(i <- 0 until lyst.size()){ val thisArg = if (args.length > 1) args(1) else thiz - res.add(map.call(thisArg, thing.asInstanceOf[Object])) + res.add(map.call(thisArg, lyst.get(i).asInstanceOf[Object], i.asInstanceOf[Integer], lyst)) } res } diff --git a/src/test/scala/com/atomist/util/lang/JavaScriptArrayTest.scala b/src/test/scala/com/atomist/util/lang/JavaScriptArrayTest.scala index 5df086c4c..862804112 100644 --- a/src/test/scala/com/atomist/util/lang/JavaScriptArrayTest.scala +++ b/src/test/scala/com/atomist/util/lang/JavaScriptArrayTest.scala @@ -206,7 +206,11 @@ class JavaScriptArrayTest extends FlatSpec with Matchers { | | //this.lyst.forEach(t => console.log(t)) | - | let another: number[] = this.lyst.map(t => t.length) + | let another: number[] = this.lyst.map((item, index, arr) => { + | if(index === undefined) throw new Error("Index should be a number"); + | if(arr === undefined) throw new Error ("Array should be defined"); + | return item.length; + | }); | if(another.length != this.lyst.length){ | throw new Error("Length of array after map should be the same") | }