It was Connor who answered originally, but hey ;)
When you exit there is no data in the collection. That's why the loop exits - there were no more rows left to fetch from the cursor.
The point of bulk collecting with a limit is to stop you running out of memory.
If you want to keep all the rows you've fetched so far, you need to copy them into another array. Or you could bulk collect without the limit:
select *
bulk collect into ...
from test_table;
But this risks you running out of memory and the process failing!