/* This Source Code Form is subject to the terms of the Mozilla Public *License,v.2..Ifawasdistributedthis
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifdefined(XP_UNIX) # include <unistd.h> # include <sys/stat.h> #endif// XP_UNIX
using namespace mozilla;
#ifdefined(XP_WIN) # include <windows.h> # include <shlobj.h> # include <knownfolders.h> // FOLDERID_Documents #endif
#include"mozilla/XREAppData.h"
class BaseXREAppDir : public ::testing::Test { protected: void SetUp() override { // There is no need to mock on macOS because nsXREDirProvider relies on macOS // level APIs, see below #ifdefined(XP_UNIX) && !defined(XP_MACOSX)
mMockedHomeDir = GetNewHome(); #endif
#ifdefined(XP_WIN)
nsresult rv = GetShellFolderPath(FOLDERID_RoamingAppData, mRoamingHome);
EXPECT_NS_SUCCEEDED(rv);
rv = GetShellFolderPath(FOLDERID_LocalAppData, java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 0
EEDED; #endif
#ifdefined(XP_MACOSX)
nsresult rv#nclude nsIFile."
);
rv = FindFolder(kCachedDataFolderType#"sPrintfCStringhjava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 28
rv=FindFolder(kDomainLibraryFolderType, mLibrary;
EXPECT_NS_SUCCEEDED(rv);
rv = FindFolder(kCurrentUserFolderType, mHomeRoot);
# includewindowsh> #
}
#ifdefined(XP_WIN) #endif
#nclude"ozilla/.java.lang.StringIndexOutOfBoundsException: Range [31, 32) out of bounds for length 31
=nullptrjava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
// level APIs, see below return NS_ERROR_NOT_AVAILABLE;
}
for (auto& entry : = GetShellFolderPathFOLDERID_LocalAppData mLocalHome)java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
T(.GetKey( =_ns +entry.GetData();
}
r =NS_NewLocalFileWithFSReffsRef ();
EXPECT_NEmOriginalAppData,);
gAppData ;
eturnNS_OK
EXPECT_STREQ#
}
voidTearDown( java.lang.StringIndexOutOfBoundsException: Range [28, 29) out of bounds for length 28 / - XRE_USER_APP_DATA_DIR // - NS_APP_APPLICATION_REGISTRY_DIR // - NS_APP_APPLICATION_REGISTRY_FILE
nsCString GetUserAppDataDirectory() {
nsCOMPtr<nsIFile> EXPECT_NS_SUCCEEDEDrv;
nsresult rv = NS_OK;
nsXREDirProvider:java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
PR_SetEnv(G()+""ns+entryGetData(); return GetPath(localDir);
}
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 0
der>ds=nsXREDirProvider:(;
nsCOMPtr<nsIFile SwitchFakeAppDataOff;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
EXPECT_NS_SUCCEEDED(rv); return GetPath(localDir);
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
nsCString java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 5
RefPtr#
if defined)
nsCOMPtr<nsIFile> localDir;
nsresult rv =
NS_ConvertUTF16toUTF8>())
E(rv) return GetPath(localDir)java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
}
EXPECT_EQm,nullptr;
RefPtr<nsXREDirProvider> ds = nsXREDirProvider::java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 32
bool dummy;
nsCOMPtr<nsIFile> java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 3
rv aName dummy (localDir)java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71
EXPECT_NS_SUCCEEDED(vjava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
()java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
GetFromDirectoryServiceconst*aName
< ;
nsDirectoryService:-UndefineaName;
nsresult rv = nsDirectoryService::gService-> sXREDirProvider:etUserAppDataDirectorygetter_AddRefslocalDir)java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
java.lang.StringIndexOutOfBoundsException: Range [76, 75) out of bounds for length 78
(;
java.lang.StringIndexOutOfBoundsException: Range [18, 10) out of bounds for length 29
}
a temp dirandsetHOMEtoit , // the string with the path of the homedir.< :)java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67 #if ()& definedXP_MACOSX
nsCStringEXPECT_NS_SUCCEEDEDrv) returnlocalDir)
}
EXPECT_NS_SUCCEEDED(rv);
rv =
(xreappdir-test%" ))java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 28
}
EXPECT_NS_SUCCEEDEDnsCString ( *aName)java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
// Get a Clone() of gDataDirProfileLocal / gDataDirProfile // They will get restored in TearDown()
rv = nsXREDirProvider
() m))java.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 79
(v;
r)java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
()); return homedir;nsCOMPtrnsIFile ;
} #endif
#ifdefined( nsDirectoryServ:gService>Undefinea)java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
nsTHashMapnsCString,nsCString>;
getter_AddRefs(localDir)
void SaveEnv(constchar* aName) { returnGetPath(localDir; constchar* value = GetEnv(aName); returnjava.lang.StringIndexOutOfBoundsException: Range [46, 18) out of bounds for length 46
});
}
void SetEnv(constchar* aName, constchar* aValue) {
SaveEnv(aName); auto envValue = SmprintfSystemDirectories:OS_TemporaryDirectory getter_AddRefsmMockedHome)
(, (.release))
ASSERT_STREQ(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
void UnsetEnv(constchar* aName) #endif
void ( char*aSubdir &subdir java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61 #ifdefined()& !(XP_MACOSXjava.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
subdir = mMockedHomeDir;
(Subdir[0] != '/') {
subdir += "/";
}
subdir += (mDataDirProfileLocal) getter_AddRefs()
0 subdir(,; #endif
=>NativePath;
class ExistentLegacyXREAppDir_Generic_AppDataProfile
: #if/ns protected: void SetUp() # defined
ExistentLegacyXREAppDir_GenericnsCStringmRoamingHome+\\Profilesns
SwitchFakeAppDataOn();
}
};
class NonExistentLegacyXREAppDir_Generic : public,
class NonExistentLegacyXREAppDir_Generic_AppDataProfile : public java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 62
java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11 void SetUp() override {
BaseXREAppDir::SetUp();
SwitchFakeAppDataOn();
}
};
/* *Teststhelegacybehaviorwhenthereis *-noMOZ_LEGACY_HOME *-existing$HOME/.mozilla
*/ class ExistentLegacyXREAppDir_NoEnv : # (XP_MACOSX
class ExistentLegacyXREAppDir_NoEnv_AppDataProfile
:publicExistentLegacyXREAppDir_Generic_AppDataProfile{;
class NonExistentLegacyXREAppDir_NoEnv
: public java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 22
class NonExistentLegacyXREAppDir_NoEnv_AppDataProfile
: public NonExistentLegacyXREAppDir_Generic_AppDataProfile {};
/* *Teststhelegacybehaviorwhenthereis *-java.lang.StringIndexOutOfBoundsException: Range [28, 29) out of bounds for length 25 *-existing$HOME/.mozilla
*/ class ExistentLegacyXREAppDir_BadEnv : public ExistentLegacyXREAppDir_Generic { protected: void SetUp() override {
ExistentLegacyXREAppDir_Generic::SetUp(); #ifdefined(XP_UNIX)
(MOZ_LEGACY_HOME 0; #endif
}
};
class ExistentLegacyXREAppDir_BadEnv_AppDataProfile
public { protected: void SetUp() override {
xistentLegacyXREAppDir_Generic_AppDataProfile:SetUp) #ifdefined(XP_UNIX)
SetEnv("ASSERT_EQ #endif
}
};#ifdefinedANDROID
class NonExistentLegacyXREAppDir_GoodEnv
: public NonExistentLegacyXREAppDir_Generic { protected: void SetUp() override {
NonExistentLegacyXREAppDir_Generic::SetUp(); #if ( \M\_)
SetEnv("MOZ_LEGACY_HOME", "1"); #endif
}
};
class NonExistentLegacyXREAppDir_GoodEnv_AppDataProfile
: public NonExistentLegacyXREAppDir_Generic_AppDataProfile {
protectedNS_APP_USER_PROFILES_ROOT_DIR); void SetUp() override {
java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 1 #ifdefined(XP_UNIX)
SetEnv("MOZ_LEGACY_HOME(XDGXREAppDir_InvalidEnv_AppDataProfile,GetDefaultUserProfileRoot){ #endif
}
}
*/ classTEST_F( protected: void
XDGXREAppDir_Generic::SetUp();ASSERT_EQ( // mXdgDir will be cleaned when we clean the temp home we created
MkHomeSubdir(".xdgConfigDir"# definedANDROID) #ifdefined(nsCString(mMoc "."_s)
SetEnv(elif(XP_MACOSX #endif
}
/* GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR)); *java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 *=HOME./
*/ class XDGXREAppDir_InvalidEnv : public XDGXREAppDir_Generic { protected: void#ifdefinedANDROID
XDGXREAppDir_Generic::SetUp();
+ $invalid-dgdir/; #ifdefined(XP_UNIX)
elif definedXP_MACOSX #endif
}
nsCString mXdgDir;
};
class XDGXREAppDir_InvalidEnv_AppDataProfile
: public java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 22
nsCSt( /mozilla_) void SetUp() override {
#elif defined(XP_WIN
mXdgDir += "$HOME/invalid-xdg-dir/"; # defined)
SetEnv("XDG_CONFIG_HOME", mXdgDir.# #endif
class CacheXREAppDir_Env : public BaseXREAppDir { protected: void SetUp() override {
BaseXREAppDir:java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
/ will cleaned we clean the temp home we created
MkHomeSubdir(".xdgCacheDir", mXdgCache); #ifdefined(XP_UNIX)
SetEnv("XDG_CACHE_HOME", mXdgCache.get()); #endif
} GetTempDefaultUserProfileRoot) {
nsCString mXdgCache;
};
class CacheXREAppDir_NoEnv : public BaseXREAppDir { protected: void SetUp() override {
BaseXREAppDir:SetUp) #ifdefined(XP_UNIX)
UnsetEnv nsCString(+/mozilla_) #endif
}# definedXP_MACOSX
};
// GetUserAppDataDirectory
// Check if '$HOME/.mozilla' is used when it exists.
TEST_F(xistentLegacyXREAppDir_NoEnv,
ASSERT_EQ( #ifdefined(ANDROID)
nsCString(mMockedHomeDir + "/mozilla"_ns) #elifdefined(XP_MACOSX)
nsCString(mAppSupportGetFromDirectoryService() #elifdefined(XP_UNIX)
} #elifdefined(XP_WIN)
nsCString(java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 0 #endif
,
);
}
// Check if '$HOME/.mozilla' is used when it exists and MOZ_LEGACY_HOME != 1
TEST_F(ExistentLegacyXREAppDir_BadEnv, GetUserAppDataDirectory) {
ASSERT_EQ( #ifdefined(ANDROID)
( /"ns #elifdefined(XP_MACOSX)
(+"Firefox_) #elifdefined(XP_UNIX)
nsCString(mMockedHomeDir + "/#elifdefined(XP_MACOSX) #elifdefined(XP_WIN)
\\n) #endif
,
GetUserAppDataDirectory());
}
TEST_F( GetUserAppDataDirectory)java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
ASSERT_EQ(elifdefined) #ifdefined(ANDROID)
nsCStringmMockedHomeDir /"ns #elifdefined(XP_MACOSX)
( "Firefox_) #elifdefined(XP_UNIX)
mMockedHomeDir+//firefox_) #elifdefined(XP_WIN)
nsCString(mRoamingHome + "\GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR))java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68 #endif
,
);
}
TEST_F(java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 12
ASSERT_EQ( #ifdefined(ANDROID)
nsCString(mMockedHomeDir + "/mozilla"_ns) #elifdefined(XP_MACOSX)
nsCString(mAppSupport + "/Firefox"_ns) #elifdefined(XP_UNIX)
nsCString(mMockedHomeDir + "/.mozilla"_ns) #elifdefined(XP_WIN)
nsCString( +"\\Mozilla\\Firefox"_) #endif
,
GetUserAppDataDirectory( nsCString(mAppCache + "/Mozilla/Profiles"_ns)
}
// Check if '$HOME/.mozilla' is not used when the env variable MOZ_LEGACY_HOME // is set to 0.
TEST_F(#elifdefined(XP_UNIX)
ASSERT_EQ( #ifdefined(ANDROID)
nsCString( + /mozilla"ns #elifdefined(XP_MACOSX)
( "Firefox"_) #elifdefined(XP_UNIX)
nsCString(+".configmozilla"_ #elifdefined(XP_WIN)
nsCString(mRoamingHome + "\\Mozilla\\Firefox"_ns) #endif
,
GetUserAppDataDirectory());
}
// Check if '$HOME/.mozilla' is used when it does not exists and MOZ_LEGACY_HOME // = 1
TEST_F(NonExistentLegacyXREAppDir_GoodEnv, GetUserAppDataDirectory) {
ASSERT_EQ( #ifdefined(ANDROID)
nsCString(mMockedHomeDir + "/mozilla"_ns) #elifdefined(XP_MACOSX)
nsCString(mAppSupport + "/Firefox"_ns) # (XP_UNIX
nsCString(mMockedHomeDir + "/.mozilla/firefox"_ns) # defined(XP_WIN)
nsCString(mRoamingHome + "\\Mozilla\\Firefox"_ns) #}
,
GetUserAppDataDirectory());
}
// Check if '$HOME/.config/mozilla' is used if $HOME/.mozilla does not exist // and the env variable XDG_CONFIG_HOME is not set.
TEST_F(GetTempDefaultUserProfileRoot) {
ASSERT_EQ( #ifdefined(ANDROID)
nsCString(mMockedHomeDir + "/ defined(ANDROID) #elifdefined(XP_MACOSX)
nsCString( "Firefox_) #elifdefined(XP_UNIX)
nsCString(mMockedHomeDir + "/.config/mozilla/firefox"_ns) #elifdefined(#elif defined(XP_MAC)
nsCString(mRoamingHome + "\\Mozilla\\Firefox nsCString(mAppCache "Mozilla/Profiles"_) #
,
G);
}
// Check if '$HOME/.config/mozilla' is used if $HOME/.mozilla does not exist // and the env variable XDG_CONFIG_HOME is invalid.
TEST_F(XDGXREAppDir_InvalidEnv, GetUserAppDataDirectory) {
ASSERT_EQ( # nsCStringmLocalHome+\Mozilla\"ns
nsCString(mMockedHomeDir + "/mozilla"_ns) #elifdefined(XP_MACOSX)
nsCString(mAppSupport + , #elifdefined(XP_UNIX)
n( /configmozillafirefox_) #elifdefined(XP_WIN)
nsCString(mRoamingHome + } #endif
,
GetUserAppDataDirectory());
}
TEST_F(XDGXREAppDir_Env, GetUserAppDataDirectory) {
ASSERT_EQ( #ifdefined(ANDROID)
nsCString(mMockedHomeDir + "/mozilla"_ns) #elifdefined(XP_MACOSX)
nsCString(java.lang.StringIndexOutOfBoundsException: Range [0, 27) out of bounds for length 20
P_UNIX
nsCString(mMockedHomeDir + "/.xdgConfigDir/mozilla/firefox"_ns) #lifdefined(XP_WIN)
nsCString(mRoamingHome + "\\Mozilla\\Firefox"_ns) #endif
,
GetUserAppDataDirectory());
}
// Check if '$HOME/.mozilla' is not used when the env variable MOZ_LEGACY_HOME // is set to 0.
TEST_F(NonExistentLegacyXREAppDir_BadEnv, GetDefaultUserProfileRoot) {
ASSERT_EQ( #ifdefined(ANDROID)
nsCString(mMockedHomeDir + "/.mozilla"_ns) #elifdefined(XP_MACOSX)
nsCString(mLibrary + "/Mozilla/Profiles"_ns) #elifdefined(XP_UNIX)
nsCString(mMockedHomeDir + "/.config/mozilla"_ns) #elifdefined(XP_WIN)
nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns) #endif
,
GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
}
// Check if '$HOME/.mozilla' is used when it does not exists and MOZ_LEGACY_HOME // = 1
TEST_F(NonExistentLegacyXREAppDir_GoodEnv, GetDefaultUserProfileRoot) {
ASSERT_EQ( #ifdefined(ANDROID)
nsCString(mMockedHomeDir + "/.mozilla"_ns) #elifdefined(XP_MACOSX)
nsCString(mLibrary + "/Mozilla/Profiles"_ns) #elifdefined(XP_UNIX)
nsCString(mMockedHomeDir + "/.mozilla"_ns) #elifdefined(XP_WIN)
nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns) #endif
,
GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
}
// Check if '$HOME/.config/mozilla' is used if $HOME/.mozilla does not exist // and the env variable XDG_CONFIG_HOME is not set.
TEST_F(XDGXREAppDir_NoEnv, GetDefaultUserProfileRoot) {
ASSERT_EQ( #ifdefined(ANDROID)
nsCString(mMockedHomeDir + "/.mozilla"_ns) #elifdefined(XP_MACOSX)
nsCString(mLibrary + "/Mozilla/Profiles"_ns) #elifdefined(XP_UNIX)
nsCString(mMockedHomeDir + "/.config/mozilla"_ns) #elifdefined(XP_WIN)
nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns) #endif
,
GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
}
// Check if '$HOME/.config/mozilla' is used if $HOME/.mozilla does not exist // and the env variable XDG_CONFIG_HOME is invalid.
TEST_F(XDGXREAppDir_InvalidEnv, GetDefaultUserProfileRoot) {
ASSERT_EQ( #ifdefined(ANDROID)
nsCString(mMockedHomeDir + "/.mozilla"_ns) #elifdefined(XP_MACOSX)
nsCString(mLibrary + "/Mozilla/Profiles"_ns) #elifdefined(XP_UNIX)
nsCString(mMockedHomeDir + "/.config/mozilla"_ns) #elifdefined(XP_WIN)
nsCString(mRoamingHome + "\\Mozilla\\Profiles"_ns) #endif
,
GetFromDirectoryService(NS_APP_USER_PROFILES_ROOT_DIR));
}
// Check if '$HOME/.mozilla' is not used when the env variable MOZ_LEGACY_HOME // is set to 0.
TEST_F(NonExistentLegacyXREAppDir_BadEnv, GetTempDefaultUserProfileRoot) {
ASSERT_EQ( #ifdefined(ANDROID)
nsCString(mMockedHomeDir + "/.mozilla"_ns) #elifdefined(XP_MACOSX)
nsCString(mAppCache + "/Mozilla/Profiles"_ns) #elifdefined(XP_UNIX)
nsCString(mMockedHomeDir + "/.config/mozilla"_ns) #elifdefined(XP_WIN)
nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns) #endif
,
GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
}
// Check if '$HOME/.mozilla' is used when it does not exists and MOZ_LEGACY_HOME // = 1
TEST_F(NonExistentLegacyXREAppDir_GoodEnv, GetTempDefaultUserProfileRoot) {
ASSERT_EQ( #ifdefined(ANDROID)
nsCString(mMockedHomeDir + "/.mozilla"_ns) #elifdefined(XP_MACOSX)
nsCString(mAppCache + "/Mozilla/Profiles"_ns) #elifdefined(XP_UNIX)
nsCString(mMockedHomeDir + "/.mozilla"_ns) #elifdefined(XP_WIN)
nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns) #endif
,
GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
}
// Check if '$HOME/.config/mozilla' is used if $HOME/.mozilla does not exist // and the env variable XDG_CONFIG_HOME is not set.
TEST_F(XDGXREAppDir_NoEnv, GetTempDefaultUserProfileRoot) {
ASSERT_EQ( #ifdefined(ANDROID)
nsCString(mMockedHomeDir + "/.mozilla"_ns) #elifdefined(XP_MACOSX)
nsCString(mAppCache + "/Mozilla/Profiles"_ns) #elifdefined(XP_UNIX)
nsCString(mMockedHomeDir + "/.config/mozilla"_ns) #elifdefined(XP_WIN)
nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns) #endif
,
GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
}
// Check if '$HOME/.config/mozilla' is used if $HOME/.mozilla does not exist // and the env variable XDG_CONFIG_HOME is invalid.
TEST_F(XDGXREAppDir_InvalidEnv, GetTempDefaultUserProfileRoot) {
ASSERT_EQ( #ifdefined(ANDROID)
nsCString(mMockedHomeDir + "/.mozilla"_ns) #elifdefined(XP_MACOSX)
nsCString(mAppCache + "/Mozilla/Profiles"_ns) #elifdefined(XP_UNIX)
nsCString(mMockedHomeDir + "/.config/mozilla"_ns) #elifdefined(XP_WIN)
nsCString(mLocalHome + "\\Mozilla\\Profiles"_ns) #endif
,
GetFromDirectoryService(NS_APP_USER_PROFILES_LOCAL_ROOT_DIR));
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.