Tests for the Runtime.getCollectionEntries command.


== Running test suite: Runtime.getCollectionEntries
-- Running test case: Runtime.getDisplayableProperties.fetchStart.Map
Evaluating expression...
Getting collection entries with fetchStart 5...
  "U" (string) => 5 (number)
  "G" (string) => 6 (number)
  "S" (string) => 7 (number)
  "I" (string) => 8 (number)
  "Q" (string) => 9 (number)

-- Running test case: Runtime.getDisplayableProperties.fetchCount.Map
Evaluating expression...
Getting collection entries with fetchCount 5...
  "A" (string) => 0 (number)
  "Y" (string) => 1 (number)
  "C" (string) => 2 (number)
  "W" (string) => 3 (number)
  "E" (string) => 4 (number)

-- Running test case: Runtime.getDisplayableProperties.fetchStartCount.Map
Evaluating expression...
Getting collection entries with fetchStart 3 with fetchCount 4...
  "W" (string) => 3 (number)
  "E" (string) => 4 (number)
  "U" (string) => 5 (number)
  "G" (string) => 6 (number)

-- Running test case: Runtime.getDisplayableProperties.fetchStart.Set
Evaluating expression...
Getting collection entries with fetchStart 5...
  "U" (string)
  "G" (string)
  "S" (string)
  "I" (string)
  "Q" (string)

-- Running test case: Runtime.getDisplayableProperties.fetchCount.Set
Evaluating expression...
Getting collection entries with fetchCount 5...
  "A" (string)
  "Y" (string)
  "C" (string)
  "W" (string)
  "E" (string)

-- Running test case: Runtime.getDisplayableProperties.fetchStartCount.Set
Evaluating expression...
Getting collection entries with fetchStart 3 with fetchCount 4...
  "W" (string)
  "E" (string)
  "U" (string)
  "G" (string)

-- Running test case: Runtime.getDisplayableProperties.fetchStart.WeakMap
Evaluating expression...
Getting collection entries with fetchStart 5...
Got 10 entries.

-- Running test case: Runtime.getDisplayableProperties.fetchCount.WeakMap
Evaluating expression...
Getting collection entries with fetchCount 5...
Got 5 entries.

-- Running test case: Runtime.getDisplayableProperties.fetchStartCount.WeakMap
Evaluating expression...
Getting collection entries with fetchStart 3 with fetchCount 4...
Got 4 entries.

-- Running test case: Runtime.getDisplayableProperties.fetchStart.WeakSet
Evaluating expression...
Getting collection entries with fetchStart 5...
Got 10 entries.

-- Running test case: Runtime.getDisplayableProperties.fetchCount.WeakSet
Evaluating expression...
Getting collection entries with fetchCount 5...
Got 5 entries.

-- Running test case: Runtime.getDisplayableProperties.fetchStartCount.WeakSet
Evaluating expression...
Getting collection entries with fetchStart 3 with fetchCount 4...
Got 4 entries.

