diff --git a/main/src/main/scala/sbt/ScriptedPlugin.scala b/main/src/main/scala/sbt/ScriptedPlugin.scala index 0cd518d27..fe41e772b 100644 --- a/main/src/main/scala/sbt/ScriptedPlugin.scala +++ b/main/src/main/scala/sbt/ScriptedPlugin.scala @@ -136,7 +136,10 @@ object ScriptedPlugin extends AutoPlugin { val groupP = token(id.examples(pairMap.keySet)) <~ token('/') // A parser for page definitions - val pageNumber = NatBasic & not('0', "zero page number") + val pageNumber = (NatBasic & not('0', "zero page number")).flatMap { i => + if (i <= pairs.size) Parser.success(i) + else Parser.failure(s"$i exceeds the number of tests (${pairs.size})") + } val pageP: Parser[ScriptedTestPage] = ("*" ~> pageNumber ~ ("of" ~> pageNumber)) flatMap { case (page, total) if page <= total => success(ScriptedTestPage(page, total)) case (page, total) => failure(s"Page $page was greater than $total") @@ -144,7 +147,7 @@ object ScriptedPlugin extends AutoPlugin { // Grabs the filenames from a given test group in the current page definition. def pagedFilenames(group: String, page: ScriptedTestPage): Seq[String] = { - val files = pairMap(group).toSeq.sortBy(_.toLowerCase) + val files = pairMap.get(group).toSeq.flatten.sortBy(_.toLowerCase) val pageSize = files.size / page.total // The last page may loose some values, so we explicitly keep them val dropped = files.drop(pageSize * (page.page - 1)) diff --git a/project/Scripted.scala b/project/Scripted.scala index 30e2868b3..10a52f10d 100644 --- a/project/Scripted.scala +++ b/project/Scripted.scala @@ -53,7 +53,10 @@ object Scripted { val groupP = token(id.examples(pairMap.keySet)) <~ token('/') // A parser for page definitions - val pageNumber = NatBasic & not('0', "zero page number") + val pageNumber = (NatBasic & not('0', "zero page number")).flatMap { i => + if (i <= pairs.size) Parser.success(i) + else Parser.failure(s"$i exceeds the number of tests (${pairs.size})") + } val pageP: Parser[ScriptedTestPage] = ("*" ~> pageNumber ~ ("of" ~> pageNumber)) flatMap { case (page, total) if page <= total => success(ScriptedTestPage(page, total)) case (page, total) => failure(s"Page $page was greater than $total") @@ -61,7 +64,7 @@ object Scripted { // Grabs the filenames from a given test group in the current page definition. def pagedFilenames(group: String, page: ScriptedTestPage): Seq[String] = { - val files = pairMap(group).toSeq.sortBy(_.toLowerCase) + val files = pairMap.get(group).toSeq.flatten.sortBy(_.toLowerCase) val pageSize = if (page.total == 0) files.size else files.size / page.total // The last page may loose some values, so we explicitly keep them val dropped = files.drop(pageSize * (page.page - 1))