ThrowTheSwitch / CMock

CMock - Mock/stub generator for C
http://throwtheswitch.org
MIT License
672 stars 273 forks source link

ReturnArrThruPtr does not return with order it keeps the item #384

Closed NimaAgm closed 2 years ago

NimaAgm commented 2 years ago

I have unit under test which I should return one value using ReturnArrayThruPtr_buff Code under test

uint32_t AUD_DEC_MP3_GetPcmDataStartOffset( FIL* pInFile ) { uint8_t readBuffer[200]; uint32_t br = 0; uint32_t dataStartOffset = 0; uint32_t dataStartOffsetNew = 0;

f_read(pInFile, readBuffer, 200, (UINT*)&br); /***** First call

if (readBuffer[0] == 'I' && readBuffer[1] == 'D' && readBuffer[2] == '3') { dataStartOffset = ((readBuffer[DECMP3_HEADER_SIZE_POSITION] & 0x7f) << 21) | ((readBuffer[DECMP3_HEADER_SIZE_POSITION + 1] & 0x7f) << 14) | ((readBuffer[DECMP3_HEADER_SIZE_POSITION + 2] & 0x7f) << 7) | (readBuffer[DECMP3_HEADER_SIZE_POSITION + 3] & 0x7f);

dataStartOffset += 10;   // ID3 Header SIZE = 10 Byte 

f_lseek(pInFile, dataStartOffset );
f_read(pInFile , readBuffer, 200, &br); /***** second call

if (readBuffer[0] == 'I' && readBuffer[1] == 'D' && readBuffer[2] == '3')
{
  dataStartOffsetNew = ((readBuffer[DECMP3_HEADER_SIZE_POSITION] & 0x7f) << 21)
                      | ((readBuffer[DECMP3_HEADER_SIZE_POSITION + 1] & 0x7f) << 14)
                        | ((readBuffer[DECMP3_HEADER_SIZE_POSITION + 2] & 0x7f) << 7)
                          | (readBuffer[DECMP3_HEADER_SIZE_POSITION + 3] & 0x7f);

  dataStartOffsetNew += 10;
  dataStartOffset += dataStartOffsetNew;
}

f_lseek(pInFile , 0 ) ;

} return dataStartOffset;

}

Test code

TEST(AUD_DEC_MP3_GetPcmDataStartOffset_MCDC,TC0002)
{ uint8_t buffer[3]; buffer[0] = 'I'; buffer[1] = 'D'; buffer[2] = '3';

uint8_t buffer2[3];
buffer[0] =  'N' ;
buffer[1] = 'D';
buffer[2] = '3';

f_read_ExpectAnyArgsAndReturn(1);
f_read_ReturnMemThruPtr_buff(&buffer,sizeof(buffer));
f_lseek_ExpectAnyArgsAndReturn(1);
f_read_ExpectAnyArgsAndReturn(2);
f_read_ReturnMemThruPtr_buff(&buffer2,sizeof(buffer2));
f_lseek_ExpectAnyArgsAndReturn(1);

/* Exercise */
uint32_t RETURN_VAL = AUD_DEC_MP3_GetPcmDataStartOffset(0);

}

It will always return the second call : it mean buffer2 will be returned but I want return them in order