Note that you shouldn't use 2) or 3) for non-monospace fonts because of kerning.
font := StandardFonts defaultFont.
font widthOfString: 'eT'. "16"
font widthOfString: 'Te'. "15"
'eT' inject: 0 into: [ :width :c | width + (font getGlyphWidth: c) ]. "13.416015625"
'Te' inject: 0 into: [ :width :c | width + (font getGlyphWidth: c) ]. "13.416015625"
font := StandardFonts defaultFont.
provider := CairoScaledFont fromFreetypeFont: font realFont.
width := [ :string |
converter := CairoUTF8Converter new.
converter convert: string from: 1 to: string size.
stringExtents := CairoTextExtents new.
provider getExtentsOf: converter buffer into: stringExtents.
stringExtents width ].
width value: 'eT'. "12.463638305664063"
width value: 'Te'. "12.561752319335938"