void test_stringSubstringInText_return_Text_abcd(void) { Text *text = textNew("123abcd123"); String *string = stringNew(text); Text *testing = stringSubstringInText(string,3,4); TEST_ASSERT_EQUAL(1,testing->reference); TEST_ASSERT_EQUAL(0,strcmp(testing->string,"abcd")); }
/** * Return the one token from the String. The String is updated. * If the string is empty, NULL is return. * * Input: * str is the String object * * Possible returned token: * Number, Operator, and Identifier tokens */ Token *getToken(String *str) { //1 trim left //2 check first character // a -if a number then extract the number string // -convert into integer // -create number token // b -if alphabetSet then extract the identifier // -create identifier token // c -if operator set then extract operator symbol // -create operator token char charReturn[3]; Token *tokenReturn = NULL; String *strReturn = NULL; Number *number = NULL; Identifier *identifier = NULL; Operator *operator = NULL; stringTrimLeft(str); if(stringLength(str) == 0) return NULL; //Number if(stringIsCharAtInSet(str,0,numberSet)){ strReturn = stringRemoveWordContaining(str,numberSet); if(stringIsCharAtInSet(str,0,alphabetSet)){ Throw(ERR_NUMBER_NOT_WELL_FORMED); } else{ number = numberNew(stringToInteger(strReturn)); tokenReturn = (Token *)number; stringDel(strReturn); } } //Identifier else if(stringIsCharAtInSet(str,0,alphabetSet)){ strReturn = stringRemoveWordContaining(str,alphaNumericSet); identifier = identifierNew(stringSubstringInText(strReturn,0,strReturn->length)); tokenReturn = (Token *)identifier; stringDel(strReturn); } //Operator else if(stringIsCharAtInSet(str,0,operatorSet)){ charReturn[0] = (char )stringRemoveChar(str); charReturn[1] = 0; if(stringCharAt(str,0) == charReturn[0] && stringLength(str) != 0){ if(charReturn[0] == '&'){ charReturn[0] = '&'; charReturn[1] = '&'; charReturn[2] = 0; str->start++; str->length--; } else if(charReturn[0] == '|'){ charReturn[0] = '|'; charReturn[1] = '|'; charReturn[2] = 0; str->start++; str->length--; } } operator = operatorNewBySymbol(charReturn); tokenReturn = (Token *)operator; } else Throw(ERR_ILLEGAL_ARGUMENT); return tokenReturn; }