Where do you reset i?
What option do you have selected in the Serial Monitor? Are you sending a carriage return and line feed, too? If so, those are stored in inSerial, too.
You also seem to expect that the serial data arrives instantly. It does not. The loop() function can run several hundred thousand times between the time the O arrives and the time the linefeed arrives. Even if you are not sending CR/LF, the loop() function can run several hundred thousand times between the time the O arrives and the time the N arrives.
You need some kind of end-of-packet marker (the CR/LF are fine for this), and you read and store data until the marker arrives. Do not store the marker.
Only test the data in the array when the end marker arrives, then reset the array and index.