Removes the remaining references to Fl_String.
Build and Test / build-linux (push) Waiting to run
Build and Test / build-wayland (push) Waiting to run
Build and Test / build-macos (push) Waiting to run
Build and Test / build-windows (push) Waiting to run

Still to do: rename fl_filename... to fl_filename..._str
and introduce into core library.
This commit is contained in:
Matthias Melcher
2025-03-07 01:15:57 +01:00
parent 063ff67fcd
commit 6acda521cc
18 changed files with 64 additions and 112 deletions
+1 -1
View File
@@ -20,7 +20,7 @@
#include "fluid.h" #include "fluid.h"
#include "Fl_Window_Type.h" #include "Fl_Window_Type.h"
#include "../src/Fl_String.H" #include <string>
struct Fl_Menu_Item; struct Fl_Menu_Item;
+2 -2
View File
@@ -22,12 +22,12 @@
#ifndef fl_screenshot_H #ifndef fl_screenshot_H
#define fl_screenshot_H #define fl_screenshot_H
#include "../src/Fl_String.H"
#include <FL/Fl_Export.H> #include <FL/Fl_Export.H>
#include <FL/Fl_Window.H> #include <FL/Fl_Window.H>
#include <FL/Fl_Rect.H> #include <FL/Fl_Rect.H>
#include <string>
/** Class to initialize a Rect by providing the margin around a rect. */ /** Class to initialize a Rect by providing the margin around a rect. */
class Fl_Margin : public Fl_Rect { class Fl_Margin : public Fl_Rect {
public: public:
+1 -1
View File
@@ -798,7 +798,7 @@ int Fd_Code_Writer::write_code(const char *s, const char *t, bool to_codeview) {
// Remember the last code file location for MergeBack // Remember the last code file location for MergeBack
if (s && g_project.write_mergeback_data && !to_codeview) { if (s && g_project.write_mergeback_data && !to_codeview) {
std::string proj_filename = g_project.projectfile_path() + g_project.projectfile_name(); std::string proj_filename = g_project.projectfile_path() + g_project.projectfile_name();
int i, n = proj_filename.size(); int i, n = (int)proj_filename.size();
for (i=0; i<n; i++) if (proj_filename[i]=='\\') proj_filename[i] = '/'; for (i=0; i<n; i++) if (proj_filename[i]=='\\') proj_filename[i] = '/';
Fl_Preferences build_records(Fl_Preferences::USER_L, "fltk.org", "fluid-build"); Fl_Preferences build_records(Fl_Preferences::USER_L, "fltk.org", "fluid-build");
Fl_Preferences path(build_records, proj_filename.c_str()); Fl_Preferences path(build_records, proj_filename.c_str());
+1 -1
View File
@@ -18,10 +18,10 @@
#define _FLUID_CODE_H #define _FLUID_CODE_H
#include <FL/fl_attr.h> #include <FL/fl_attr.h>
#include "../src/Fl_String.H"
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include <stdio.h>
#include <string>
class Fl_Type; class Fl_Type;
struct Fd_Identifier_Tree; struct Fd_Identifier_Tree;
+2 -1
View File
@@ -20,7 +20,8 @@
#include "fluid_filename.h" #include "fluid_filename.h"
#include <FL/Fl_Preferences.H> #include <FL/Fl_Preferences.H>
#include <FL/Fl_Menu_Item.H> #include <FL/Fl_Menu_Item.H>
#include "../src/Fl_String.H"
#include <string>
#define BROWSERWIDTH 300 #define BROWSERWIDTH 300
#define BROWSERHEIGHT 500 #define BROWSERHEIGHT 500
+3 -4
View File
@@ -30,12 +30,11 @@
*/ */
#include <stdlib.h> #include <stdlib.h>
#include <string>
#include <FL/filename.H> #include <FL/filename.H>
#include <FL/Fl.H> #include <FL/Fl.H>
#include <FL/fl_string_functions.h> #include <FL/fl_string_functions.h>
#include "../src/Fl_String.H" // NOTE: FLTK 1.4.x only !
#include "../src/flstring.h" #include "../src/flstring.h"
@@ -187,7 +186,7 @@ std::string fl_filename_shortened(const std::string &filename, int max_chars) {
static int home_chars = -1; static int home_chars = -1;
if (home_chars==-1) { if (home_chars==-1) {
home = fl_filename_expand(tilde); home = fl_filename_expand(tilde);
home_chars = fl_utf_nb_char((const uchar*)home.c_str(), home.size()); home_chars = fl_utf_nb_char((const uchar*)home.c_str(), (int)home.size());
} }
std::string homed_filename; std::string homed_filename;
#if defined(_WIN32) || defined(__APPLE__) #if defined(_WIN32) || defined(__APPLE__)
@@ -203,7 +202,7 @@ std::string fl_filename_shortened(const std::string &filename, int max_chars) {
// C style pointer will stay valid until filename is modified. // C style pointer will stay valid until filename is modified.
const unsigned char *u8str = reinterpret_cast<const unsigned char *>(homed_filename.c_str()); const unsigned char *u8str = reinterpret_cast<const unsigned char *>(homed_filename.c_str());
// Count the number of UTF-8 characters in the name. // Count the number of UTF-8 characters in the name.
int num_chars = fl_utf_nb_char(u8str, homed_filename.size()); int num_chars = fl_utf_nb_char(u8str, (int)homed_filename.size());
if (num_chars+ell_bytes-1 > max_chars) { if (num_chars+ell_bytes-1 > max_chars) {
// Create a new string by replacing characters in the middle. // Create a new string by replacing characters in the middle.
int remove_chars = num_chars - max_chars + ell_bytes; int remove_chars = num_chars - max_chars + ell_bytes;
+1 -1
View File
@@ -39,7 +39,7 @@
# if defined(__cplusplus) # if defined(__cplusplus)
#include "../src/Fl_String.H" #include <string>
std::string fl_filename_shortened(const std::string &filename, int maxchars); std::string fl_filename_shortened(const std::string &filename, int maxchars);
std::string fl_filename_name(const std::string &filename); std::string fl_filename_name(const std::string &filename);
+1 -2
View File
@@ -22,9 +22,8 @@
#include <FL/fl_attr.h> #include <FL/fl_attr.h>
#include "../src/Fl_String.H"
#include <stdio.h> #include <stdio.h>
#include <string>
const int FD_TAG_GENERIC = 0; const int FD_TAG_GENERIC = 0;
const int FD_TAG_CODE = 1; const int FD_TAG_CODE = 1;
+1 -1
View File
@@ -364,7 +364,7 @@ void shell_pipe_cb(FL_SOCKET, void*) {
static void expand_macro(std::string &cmd, const std::string &macro, const std::string &content) { static void expand_macro(std::string &cmd, const std::string &macro, const std::string &content) {
for (int i=0;;) { for (int i=0;;) {
i = cmd.find(macro, i); i = (int)cmd.find(macro, i);
if (i==(int)std::string::npos) break; if (i==(int)std::string::npos) break;
cmd.replace(i, macro.size(), content); cmd.replace(i, macro.size(), content);
} }
+1 -1
View File
@@ -19,11 +19,11 @@
#include "fluid.h" #include "fluid.h"
#include "../src/Fl_String.H"
#include <FL/Enumerations.H> #include <FL/Enumerations.H>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string>
#if defined(_WIN32) && !defined(__CYGWIN__) #if defined(_WIN32) && !defined(__CYGWIN__)
# include <direct.h> # include <direct.h>
# include <windows.h> # include <windows.h>
+4 -4
View File
@@ -52,7 +52,6 @@
#include <FL/Fl_Pixmap.H> #include <FL/Fl_Pixmap.H>
#include <FL/Fl_Menu_Item.H> #include <FL/Fl_Menu_Item.H>
#include "Fl_Int_Vector.H" #include "Fl_Int_Vector.H"
#include "Fl_String.H"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@@ -63,6 +62,7 @@
#include <ctype.h> #include <ctype.h>
#include <errno.h> #include <errno.h>
#include <math.h> #include <math.h>
#include <string>
#define MAX_COLUMNS 200 #define MAX_COLUMNS 200
@@ -304,14 +304,14 @@ void Fl_Help_View::hv_draw(const char *t, int x, int y, int entity_extra_length)
/* Note: Don't use Doxygen docs for this internal class. /* Note: Don't use Doxygen docs for this internal class.
Internal class to manage the Fl_Help_View edit buffer. Internal class to manage the Fl_Help_View edit buffer.
This is a subclass of Fl_String since FLTK 1.4.0. This is a subclass of Fl_String since FLTK 1.4.0 and std::string since 1.5.0.
This class is for internal use in this file. Its sole purpose is to This class is for internal use in this file. Its sole purpose is to
allow buffer management to avoid buffer overflows in stack variables allow buffer management to avoid buffer overflows in stack variables
used to edit strings for formatting and drawing (STR #3275). used to edit strings for formatting and drawing (STR #3275).
*/ */
class HV_Edit_Buffer : public Fl_String { class HV_Edit_Buffer : public std::string {
public: public:
// use default constructor and destructor, none defined here // use default constructor and destructor, none defined here
@@ -1021,7 +1021,7 @@ Fl_Help_View::draw()
if (qch < 0) if (qch < 0)
buf += '&'; buf += '&';
else { else {
int utf8l = buf.size(); size_t utf8l = buf.size();
buf.add(qch); buf.add(qch);
utf8l = buf.size() - utf8l; // length of added UTF-8 text utf8l = buf.size() - utf8l; // length of added UTF-8 text
const char *oldptr = ptr; const char *oldptr = ptr;
+3 -3
View File
@@ -24,7 +24,7 @@
*/ */
#include <FL/Fl_Native_File_Chooser.H> #include <FL/Fl_Native_File_Chooser.H>
#include "Fl_String.H" #include <string>
class Fl_Kdialog_Native_File_Chooser_Driver : public Fl_Native_File_Chooser_FLTK_Driver { class Fl_Kdialog_Native_File_Chooser_Driver : public Fl_Native_File_Chooser_FLTK_Driver {
friend class Fl_Native_File_Chooser; friend class Fl_Native_File_Chooser;
@@ -46,7 +46,7 @@ class Fl_Kdialog_Native_File_Chooser_Driver : public Fl_Native_File_Chooser_FLTK
int count() const FL_OVERRIDE; int count() const FL_OVERRIDE;
const char *filename() const FL_OVERRIDE; const char *filename() const FL_OVERRIDE;
const char *filename(int i) const FL_OVERRIDE; const char *filename(int i) const FL_OVERRIDE;
virtual void build_command(Fl_String& command); virtual void build_command(std::string& command);
int show() FL_OVERRIDE; int show() FL_OVERRIDE;
char *parse_filter(const char *f); char *parse_filter(const char *f);
const char *filter() const FL_OVERRIDE; const char *filter() const FL_OVERRIDE;
@@ -58,7 +58,7 @@ class Fl_Kdialog_Native_File_Chooser_Driver : public Fl_Native_File_Chooser_FLTK
const char *directory() const FL_OVERRIDE; const char *directory() const FL_OVERRIDE;
void title(const char *val) FL_OVERRIDE; void title(const char *val) FL_OVERRIDE;
const char *title() const FL_OVERRIDE; const char *title() const FL_OVERRIDE;
void shell_quote(Fl_String& s); void shell_quote(std::string& s);
}; };
/** /**
+6 -6
View File
@@ -73,7 +73,7 @@ static int fnfc_dispatch(int /*event*/, Fl_Window* /*win*/) {
} }
void Fl_Kdialog_Native_File_Chooser_Driver::build_command(Fl_String& command) { void Fl_Kdialog_Native_File_Chooser_Driver::build_command(std::string& command) {
const char *option; const char *option;
switch (_btype) { switch (_btype) {
case Fl_Native_File_Chooser::BROWSE_DIRECTORY: case Fl_Native_File_Chooser::BROWSE_DIRECTORY:
@@ -105,7 +105,7 @@ void Fl_Kdialog_Native_File_Chooser_Driver::build_command(Fl_String& command) {
// Build command // Build command
command = "kdialog"; command = "kdialog";
if (_title) { if (_title) {
Fl_String quoted_title = _title; shell_quote(quoted_title); std::string quoted_title = _title; shell_quote(quoted_title);
command += " --title "; command += " --title ";
command += quoted_title; command += quoted_title;
} }
@@ -114,7 +114,7 @@ void Fl_Kdialog_Native_File_Chooser_Driver::build_command(Fl_String& command) {
command += " "; command += " ";
command += preset; command += preset;
if (_parsedfilt) { if (_parsedfilt) {
Fl_String quoted_filt = _parsedfilt; shell_quote(quoted_filt); // NOTE: orig code used double quoting -erco 1/10/24 std::string quoted_filt = _parsedfilt; shell_quote(quoted_filt); // NOTE: orig code used double quoting -erco 1/10/24
command += " "; command += " ";
command += quoted_filt; command += quoted_filt;
} }
@@ -146,7 +146,7 @@ int Fl_Kdialog_Native_File_Chooser_Driver::show() {
return retval; return retval;
} }
Fl_String command; std::string command;
build_command(command); build_command(command);
//fprintf(stderr, "DEBUG: POPEN: %s\n", command.c_str()); //fprintf(stderr, "DEBUG: POPEN: %s\n", command.c_str());
FILE *pipe = popen(command.c_str(), "r"); FILE *pipe = popen(command.c_str(), "r");
@@ -310,8 +310,8 @@ const char *Fl_Kdialog_Native_File_Chooser_Driver::title() const {
// Add shell quotes around string 's'. // Add shell quotes around string 's'.
// Handles quoting embedded quotes. // Handles quoting embedded quotes.
// //
void Fl_Kdialog_Native_File_Chooser_Driver::shell_quote(Fl_String& s) { void Fl_Kdialog_Native_File_Chooser_Driver::shell_quote(std::string& s) {
Fl_String out = "'"; // leading quote std::string out = "'"; // leading quote
for (int t=0; t<(int)s.size(); t++) { for (int t=0; t<(int)s.size(); t++) {
if (s[t] == '\'') out += "'\"'\"'"; // quote any quotes if (s[t] == '\'') out += "'\"'\"'"; // quote any quotes
else out += s[t]; else out += s[t];
+2 -2
View File
@@ -30,8 +30,8 @@ class Fl_Zenity_Native_File_Chooser_Driver : public Fl_Kdialog_Native_File_Choos
static bool did_find_zenity; static bool did_find_zenity;
static bool have_looked_for_zenity; static bool have_looked_for_zenity;
Fl_Zenity_Native_File_Chooser_Driver(int val); Fl_Zenity_Native_File_Chooser_Driver(int val);
void append_filter(Fl_String& command); void append_filter(std::string& command);
void build_command(Fl_String& command) FL_OVERRIDE; void build_command(std::string& command) FL_OVERRIDE;
}; };
/** /**
+8 -8
View File
@@ -36,8 +36,8 @@ bool Fl_Zenity_Native_File_Chooser_Driver::have_looked_for_zenity = false;
Fl_Zenity_Native_File_Chooser_Driver::Fl_Zenity_Native_File_Chooser_Driver(int val) : Fl_Kdialog_Native_File_Chooser_Driver(val) { Fl_Zenity_Native_File_Chooser_Driver::Fl_Zenity_Native_File_Chooser_Driver(int val) : Fl_Kdialog_Native_File_Chooser_Driver(val) {
} }
void Fl_Zenity_Native_File_Chooser_Driver::append_filter(Fl_String& ret_command) { void Fl_Zenity_Native_File_Chooser_Driver::append_filter(std::string& ret_command) {
// TODO: This could probably be simplified + toughened with Fl_String -erco 1/10/24 // TODO: This could probably be simplified + toughened with std::string -erco 1/10/24
int l; int l;
int lcommand = 10000; int lcommand = 10000;
char *command = new char[lcommand]; char *command = new char[lcommand];
@@ -72,11 +72,11 @@ void Fl_Zenity_Native_File_Chooser_Driver::append_filter(Fl_String& ret_command)
p = strtok(NULL, "\n"); p = strtok(NULL, "\n");
} }
free(parsed_filter_copy); free(parsed_filter_copy);
ret_command += command; // append to parent's Fl_String ret_command += command; // append to parent's std::string
delete [] command; delete [] command;
} }
void Fl_Zenity_Native_File_Chooser_Driver::build_command(Fl_String& command) { void Fl_Zenity_Native_File_Chooser_Driver::build_command(std::string& command) {
const char *option; const char *option;
switch (_btype) { switch (_btype) {
case Fl_Native_File_Chooser::BROWSE_DIRECTORY: case Fl_Native_File_Chooser::BROWSE_DIRECTORY:
@@ -100,14 +100,14 @@ void Fl_Zenity_Native_File_Chooser_Driver::build_command(Fl_String& command) {
} }
// Build preset // Build preset
Fl_String preset; std::string preset;
if (_preset_file) { if (_preset_file) {
Fl_String quoted_filename = _preset_file; shell_quote(quoted_filename); std::string quoted_filename = _preset_file; shell_quote(quoted_filename);
preset = "--filename="; preset = "--filename=";
preset += quoted_filename; preset += quoted_filename;
} else if (_directory) { } else if (_directory) {
// This doesn't actually seem to do anything, but supply it anyway. // This doesn't actually seem to do anything, but supply it anyway.
Fl_String quoted_dir = _directory; shell_quote(quoted_dir); std::string quoted_dir = _directory; shell_quote(quoted_dir);
preset = "--filename="; preset = "--filename=";
preset += quoted_dir; preset += quoted_dir;
} }
@@ -115,7 +115,7 @@ void Fl_Zenity_Native_File_Chooser_Driver::build_command(Fl_String& command) {
// Build command // Build command
command = "zenity"; command = "zenity";
if (_title) { if (_title) {
Fl_String quoted_title = _title; shell_quote(quoted_title); std::string quoted_title = _title; shell_quote(quoted_title);
command += " --title "; command += " --title ";
command += quoted_title; command += quoted_title;
} }
+2 -2
View File
@@ -29,13 +29,13 @@
#include <string.h> // strlen #include <string.h> // strlen
#include <stdarg.h> // vprintf, va_list #include <stdarg.h> // vprintf, va_list
#include <assert.h> #include <assert.h>
#include <string>
#include <FL/Fl.H> #include <FL/Fl.H>
#include <FL/Fl_Terminal.H> #include <FL/Fl_Terminal.H>
#include <FL/fl_utf8.h> // fl_utf8len1 #include <FL/fl_utf8.h> // fl_utf8len1
#include <FL/fl_draw.H> #include <FL/fl_draw.H>
#include <FL/fl_string_functions.h> #include <FL/fl_string_functions.h>
#include "Fl_String.H"
///////////////////////////////// /////////////////////////////////
////// Static Functions ///////// ////// Static Functions /////////
@@ -3948,7 +3948,7 @@ int Fl_Terminal::handle(int e) {
\return A string allocated with strdup(3) which must be free'd, text is UTF-8. \return A string allocated with strdup(3) which must be free'd, text is UTF-8.
*/ */
const char* Fl_Terminal::text(bool lines_below_cursor) const { const char* Fl_Terminal::text(bool lines_below_cursor) const {
Fl_String lines; // lines of text we'll return std::string lines; // lines of text we'll return
// See how many display rows we need to include // See how many display rows we need to include
int disprows = lines_below_cursor ? disp_rows() - 1 // all display lines int disprows = lines_below_cursor ? disp_rows() - 1 // all display lines
: cursor_row(); // only lines up to cursor : cursor_row(); // only lines up to cursor
+4 -4
View File
@@ -21,7 +21,6 @@
#include <FL/fl_string_functions.h> // fl_strdup #include <FL/fl_string_functions.h> // fl_strdup
#include <FL/platform.H> #include <FL/platform.H>
#include "../../flstring.h" #include "../../flstring.h"
#include "../../Fl_String.H"
#include "../../Fl_Timeout.h" #include "../../Fl_Timeout.h"
#include <locale.h> #include <locale.h>
@@ -31,6 +30,7 @@
#include <pwd.h> #include <pwd.h>
#include <string.h> // strerror(errno) #include <string.h> // strerror(errno)
#include <errno.h> // errno #include <errno.h> // errno
#include <string>
#if HAVE_DLSYM && HAVE_DLFCN_H #if HAVE_DLSYM && HAVE_DLFCN_H
#include <dlfcn.h> // for dlsym #include <dlfcn.h> // for dlsym
#endif #endif
@@ -538,7 +538,7 @@ char *Fl_Unix_System_Driver::preference_user_rootnode(
char *buffer) char *buffer)
{ {
// Find the path to the user's home directory. // Find the path to the user's home directory.
Fl_String home_path = getenv("HOME"); std::string home_path = getenv("HOME");
if (home_path.empty()) { if (home_path.empty()) {
struct passwd *pw = getpwuid(getuid()); struct passwd *pw = getpwuid(getuid());
if (pw) if (pw)
@@ -546,7 +546,7 @@ char *Fl_Unix_System_Driver::preference_user_rootnode(
} }
// 1: Generate the 1.4 path for this vendor and application. // 1: Generate the 1.4 path for this vendor and application.
Fl_String prefs_path_14 = getenv("XDG_CONFIG_HOME"); std::string prefs_path_14 = getenv("XDG_CONFIG_HOME");
if (prefs_path_14.empty()) { if (prefs_path_14.empty()) {
prefs_path_14 = home_path + "/.config"; prefs_path_14 = home_path + "/.config";
} else { } else {
@@ -567,7 +567,7 @@ char *Fl_Unix_System_Driver::preference_user_rootnode(
// 2: If this base path does not exist, try the 1.3 path // 2: If this base path does not exist, try the 1.3 path
if (::access(prefs_path_14.c_str(), F_OK) == -1) { if (::access(prefs_path_14.c_str(), F_OK) == -1) {
Fl_String prefs_path_13 = home_path + "/.fltk/" + vendor; std::string prefs_path_13 = home_path + "/.fltk/" + vendor;
if (::access(prefs_path_13.c_str(), F_OK) == 0) { if (::access(prefs_path_13.c_str(), F_OK) == 0) {
prefs_path_13.append("/"); prefs_path_13.append("/");
prefs_path_13.append(application); prefs_path_13.append(application);
+21 -68
View File
@@ -19,72 +19,25 @@
#include <FL/Fl_Group.H> #include <FL/Fl_Group.H>
#include <FL/Fl_Button.H> #include <FL/Fl_Button.H>
#include <FL/Fl_Terminal.H> #include <FL/Fl_Terminal.H>
#include "../src/Fl_String.H"
#include <FL/Fl_Preferences.H> #include <FL/Fl_Preferences.H>
#include <FL/fl_callback_macros.H> #include <FL/fl_callback_macros.H>
#include <FL/filename.H> #include <FL/filename.H>
#include <FL/fl_utf8.h> #include <FL/fl_utf8.h>
#if (0) // FIXME - Fl_String #include <string>
/* Test all Fl_String functions that are no part of the class. */
TEST(Fl_String, Non-Member Functions) {
Fl_String a = "a", b = "b", empty = "", result;
result = a + b;
EXPECT_STREQ(result.c_str(), "ab");
result = a + empty;
EXPECT_STREQ(result.c_str(), "a");
result = a + "c";
EXPECT_STREQ(result.c_str(), "ac");
result = empty + "x";
EXPECT_STREQ(result.c_str(), "x");
EXPECT_TRUE(!(a == b));
EXPECT_TRUE(a == a);
EXPECT_FALSE((a != a)); // neq -erco
EXPECT_TRUE((a != b)); // neq -erco
EXPECT_TRUE(empty == empty);
EXPECT_TRUE(a+b == "ab");
EXPECT_TRUE(a+"b" == "a" + b);
return true;
}
/* Test additions to Fl_Preferences. */
TEST(Fl_String, fl_filename_...) {
const Fl_String ref = "/test/me.txt";
Fl_String name = fl_filename_name(ref);
EXPECT_STREQ(name.c_str(), "me.txt");
name = fl_filename_name(Fl_String("/test/"));
EXPECT_STREQ(name.c_str(), "");
Fl_String path = fl_filename_path(ref);
EXPECT_STREQ(path.c_str(), "/test/");
Fl_String ext = fl_filename_ext(ref);
EXPECT_STREQ(ext.c_str(), ".txt");
ext = fl_filename_setext(ref, ".rtf");
EXPECT_STREQ(ext.c_str(), "/test/me.rtf");
fl_putenv("FL_UNITTEST=unit/test");
name = fl_filename_expand(Fl_String("abc/$FL_UNITTEST/xyz"));
EXPECT_STREQ(name.c_str(), "abc/unit/test/xyz");
Fl_String abs = fl_filename_absolute(Fl_String("./abc/def.txt"));
Fl_String rel = fl_filename_relative(abs);
EXPECT_STREQ(rel.c_str(), "abc/def.txt");
EXPECT_STREQ(ref.c_str(), "/test/me.txt");
return true;
}
#endif
/* Test additions to Fl_Preferences. */ /* Test additions to Fl_Preferences. */
TEST(Fl_Preferences, Strings) { TEST(Fl_Preferences, Strings) {
{ {
Fl_Preferences prefs(Fl_Preferences::USER_L, "fltk.org", "unittests"); Fl_Preferences prefs(Fl_Preferences::USER_L, "fltk.org", "unittests");
prefs.set("a", Fl_String()); prefs.set("a", std::string());
prefs.set("b", Fl_String("Hello")); prefs.set("b", std::string("Hello"));
prefs.set("c", Fl_String("Hel\\l\nö")); prefs.set("c", std::string("Hel\\l\nö"));
} }
{ {
Fl_Preferences prefs(Fl_Preferences::USER_L, "fltk.org", "unittests"); Fl_Preferences prefs(Fl_Preferences::USER_L, "fltk.org", "unittests");
Fl_String r; std::string r;
prefs.get("a", r, "x"); prefs.get("a", r, "x");
EXPECT_STREQ(r.c_str(), ""); EXPECT_STREQ(r.c_str(), "");
prefs.get("b", r, "x"); prefs.get("b", r, "x");
@@ -100,7 +53,7 @@ TEST(Fl_Preferences, Strings) {
#if 0 #if 0
TEST(fl_filename, ext) { TEST(fl_filename, ext) {
Fl_String r = fl_filename_ext("test.txt"); std::string r = fl_filename_ext("test.txt");
EXPECT_STREQ(r.c_str(), ".txt"); EXPECT_STREQ(r.c_str(), ".txt");
r = fl_filename_ext("test"); r = fl_filename_ext("test");
EXPECT_STREQ(r.c_str(), ""); EXPECT_STREQ(r.c_str(), "");
@@ -110,22 +63,22 @@ TEST(fl_filename, ext) {
} }
TEST(fl_filename, setext) { TEST(fl_filename, setext) {
Fl_String r = fl_filename_setext(Fl_String("test.txt"), ".rtf"); std::string r = fl_filename_setext(std::string("test.txt"), ".rtf");
EXPECT_STREQ(r.c_str(), "test.rtf"); EXPECT_STREQ(r.c_str(), "test.rtf");
r = fl_filename_setext(Fl_String("test"), ".rtf"); r = fl_filename_setext(std::string("test"), ".rtf");
EXPECT_STREQ(r.c_str(), "test.rtf"); EXPECT_STREQ(r.c_str(), "test.rtf");
r = fl_filename_setext(Fl_String("test.txt"), ""); r = fl_filename_setext(std::string("test.txt"), "");
EXPECT_STREQ(r.c_str(), "test"); EXPECT_STREQ(r.c_str(), "test");
r = fl_filename_setext(Fl_String(""), ".rtf"); r = fl_filename_setext(std::string(""), ".rtf");
EXPECT_STREQ(r.c_str(), ".rtf"); EXPECT_STREQ(r.c_str(), ".rtf");
r = fl_filename_setext(Fl_String("path/test"), ".rtf"); r = fl_filename_setext(std::string("path/test"), ".rtf");
EXPECT_STREQ(r.c_str(), "path/test.rtf"); EXPECT_STREQ(r.c_str(), "path/test.rtf");
return true; return true;
} }
TEST(fl_filename, relative) { TEST(fl_filename, relative) {
Fl_String base = "/var/tmp/somedir"; std::string base = "/var/tmp/somedir";
Fl_String r = fl_filename_relative("/var/tmp/somedir/foo.txt", base); std::string r = fl_filename_relative("/var/tmp/somedir/foo.txt", base);
EXPECT_STREQ(r.c_str(), "foo.txt"); EXPECT_STREQ(r.c_str(), "foo.txt");
r = fl_filename_relative("/var/tmp/foo.txt", base); r = fl_filename_relative("/var/tmp/foo.txt", base);
EXPECT_STREQ(r.c_str(), "../foo.txt"); EXPECT_STREQ(r.c_str(), "../foo.txt");
@@ -137,8 +90,8 @@ TEST(fl_filename, relative) {
} }
TEST(fl_filename, absolute) { TEST(fl_filename, absolute) {
Fl_String base = "/var/tmp/somedir"; std::string base = "/var/tmp/somedir";
Fl_String r = fl_filename_absolute("foo.txt", base); std::string r = fl_filename_absolute("foo.txt", base);
EXPECT_STREQ(r.c_str(), "/var/tmp/somedir/foo.txt"); EXPECT_STREQ(r.c_str(), "/var/tmp/somedir/foo.txt");
r = fl_filename_absolute("/var/tmp/foo.txt", base); r = fl_filename_absolute("/var/tmp/foo.txt", base);
EXPECT_STREQ(r.c_str(), "/var/tmp/foo.txt"); EXPECT_STREQ(r.c_str(), "/var/tmp/foo.txt");
@@ -152,11 +105,11 @@ TEST(fl_filename, absolute) {
bool cb1a_ok = false, cb1b_ok = false, cb1c_ok = false; bool cb1a_ok = false, cb1b_ok = false, cb1c_ok = false;
int cb1_alloc = 0; int cb1_alloc = 0;
class MyString : public Fl_String { class MyString : public std::string {
public: public:
MyString() : Fl_String() { cb1_alloc++; } MyString() : std::string() { cb1_alloc++; }
MyString(const MyString &str) : Fl_String(str) { cb1_alloc++; } MyString(const MyString &str) : std::string(str) { cb1_alloc++; }
MyString(const char *t) : Fl_String(t) { cb1_alloc++; } MyString(const char *t) : std::string(t) { cb1_alloc++; }
~MyString() { cb1_alloc--; } ~MyString() { cb1_alloc--; }
}; };
void cb1(MyString a, int b) { void cb1(MyString a, int b) {
@@ -187,9 +140,9 @@ TEST(Fl_Callback_Macros, FL_FUNCTION_CALLBACK) {
TEST(Fl_Callback_Macros, FL_METHOD_CALLBACK) { TEST(Fl_Callback_Macros, FL_METHOD_CALLBACK) {
Fl_Group::current(NULL); Fl_Group::current(NULL);
Fl_String *str = new Fl_String("FLTK"); std::string *str = new std::string("FLTK");
Fl_Button *btn = new Fl_Button(10, 10, 100, 100); Fl_Button *btn = new Fl_Button(10, 10, 100, 100);
FL_METHOD_CALLBACK_2(btn, Fl_String, str, insert, int, 2, const char*, "XX"); FL_METHOD_CALLBACK_2(btn, std::string, str, insert, int, 2, const char*, "XX");
btn->do_callback(); btn->do_callback();
EXPECT_STREQ(str->c_str(), "FLXXTK"); EXPECT_STREQ(str->c_str(), "FLXXTK");
delete btn; delete btn;