AUnit  1.7.1
Unit testing framework for Arduino platforms inspired by ArduinoUnit and Google Test.
Public Member Functions | Static Public Attributes | List of all members
aunit::internal::FCString Class Reference

A union of (const char*) and (const __FlashStringHelper*) with a discriminator. More...

#include <FCString.h>

Public Member Functions

 FCString ()
 Default constructor initializes to a nullptr of kCStringType.
 
 FCString (const char *s)
 Construct with a c-string.
 
 FCString (const __FlashStringHelper *s)
 Construct with a flash string.
 
uint8_t getType () const
 Get the internal type of string.
 
const char * getCString () const
 Get the c-string pointer.
 
const __FlashStringHelper * getFString () const
 Get the flash string pointer.
 
void print (Print *printer) const
 Convenience method for printing an FCString.
 
void println (Print *printer) const
 Convenience method for printing an FCString.
 
int compareTo (const FCString &that) const
 Compare to another FCString.
 
int compareToN (const char *that, size_t n) const
 Compare to C-string using the first n characters. More...
 
int compareToN (const __FlashStringHelper *that, size_t n) const
 Compare to a flash string using the first n characters. More...
 
bool hasSubstring (const char *substring) const
 Determine if given substring exists.
 

Static Public Attributes

static const uint8_t kCStringType = 0
 
static const uint8_t kFStringType = 1
 

Detailed Description

A union of (const char*) and (const __FlashStringHelper*) with a discriminator.

This allows us to treat these 2 strings like a single object. The major reason this class is needed is because the F() cannot be used outside a function, it can only be used inside a function, so we are forced to use normal c-strings instead of F() strings when manually creating Test or TestOnce instances.

I deliberately decided not to inherit from Printable. While it is convenient to be able to call Print::print() with an instance of this class, the cost is 2 bytes (8-bit processors) or 4 bytes (32-bit processors) of extra static memory for the v-table pointer for each instance. But each instance is only 3 bytes (8-bits) or 5 bytes (32-bits) big, so the cost of 50-100 bytes of static memory for a large suite of 25 unit tests does not seem worth the minor convenience.

Use the print() and println() methods to print to the given 'Print'. In hindsight, with more Arduino programming under my belt, I think these functions should accept a reference Print& instead of a pointer Print*. That is how I implemented this in a subsequent version of this class in the AceCommon library.

Definition at line 58 of file FCString.h.

Member Function Documentation

◆ compareToN() [1/2]

int aunit::internal::FCString::compareToN ( const __FlashStringHelper *  that,
size_t  n 
) const

Compare to a flash string using the first n characters.

This is expected to be used only for TestRunner::exclude() and TestRunner::include().

Definition at line 79 of file FCString.cpp.

◆ compareToN() [2/2]

int aunit::internal::FCString::compareToN ( const char *  that,
size_t  n 
) const

Compare to C-string using the first n characters.

This is expected to be used only for TestRunner::exclude() and TestRunner::include().

Definition at line 71 of file FCString.cpp.


The documentation for this class was generated from the following files: