#include <stdio.h>
#include <string>
#include <unistd.h>
#include <AppFileInfo.h>
#include <Application.h>
#include <Bitmap.h>
#include <Directory.h>
#include <Entry.h>
#include <File.h>
#include <fs_attr.h>
#include <Path.h>
#include <Resources.h>
#include <Roster.h>
#include <String.h>
#include <TypeConstants.h>
#include <cppunit/Test.h>
#include <cppunit/TestCaller.h>
#include <cppunit/TestSuite.h>
#include <TestShell.h>
#include <TestUtils.h>
#include <cppunit/TestAssert.h>
#include "AppFileInfoTest.h"
#include "../app/bmessenger/Helpers.h"
static const char *testDir = "/tmp/testDir";
static const char *testFile1 = "/tmp/testDir/file1";
static const char *testFile2 = "/tmp/testDir/file2";
static const char *testFile3 = "/tmp/testDir/file3";
static const char *testFile4 = "/tmp/testDir/file4";
static const char *testType1
= "application/x-vnd.obos.app-file-info-test1";
static const char *testType2
= "application/x-vnd.obos.app-file-info-test2";
static const char *testType3
= "application/x-vnd.obos.app-file-info-test3";
static const char *testType4
= "application/x-vnd.obos.app-file-info-test4";
static const char *invalidTestType = "invalid/mime/type";
static const char *tooLongTestType =
"0123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789"
"0123456789012345678901234567890123456789012345678901234567890123456789"
;
static const char *testAppSignature1
= "application/x-vnd.obos.app-file-info-test-app1";
static const char *testAppSignature2
= "application/x-vnd.obos.app-file-info-test-app2";
static const char *testAppSignature3
= "application/x-vnd.obos.app-file-info-test-app3";
static const char *kTypeAttribute = "BEOS:TYPE";
static const char *kSignatureAttribute = "BEOS:APP_SIG";
static const char *kAppFlagsAttribute = "BEOS:APP_FLAGS";
static const char *kSupportedTypesAttribute = "BEOS:FILE_TYPES";
static const char *kMiniIconAttribute = "BEOS:M:STD_ICON";
static const char *kLargeIconAttribute = "BEOS:L:STD_ICON";
static const char *kVersionInfoAttribute = "BEOS:APP_VERSION";
static const char *kMiniIconForTypeAttribute = "BEOS:M:";
static const char *kLargeIconForTypeAttribute = "BEOS:L:";
static const int32 kTypeResourceID = 2;
static const int32 kSignatureResourceID = 1;
static const int32 kAppFlagsResourceID = 1;
static const int32 kSupportedTypesResourceID = 1;
static const int32 kMiniIconResourceID = 101;
static const int32 kLargeIconResourceID = 101;
static const int32 kVersionInfoResourceID = 1;
static const int32 kMiniIconForTypeResourceID = 0;
static const int32 kLargeIconForTypeResourceID = 0;
enum {
APP_FLAGS_TYPE = 'APPF',
MINI_ICON_TYPE = 'MICN',
LARGE_ICON_TYPE = 'ICON',
VERSION_INFO_TYPE = 'APPV',
};
static
BBitmap *
create_test_icon(icon_size size, int fill)
{
BBitmap *icon = NULL;
switch (size) {
case B_MINI_ICON:
icon = new BBitmap(BRect(0, 0, 15, 15), B_CMAP8);
break;
case B_LARGE_ICON:
icon = new BBitmap(BRect(0, 0, 31, 31), B_CMAP8);
break;
}
if (icon)
memset(icon->Bits(), fill, icon->BitsLength());
return icon;
}
static
bool
icon_equal(const BBitmap *icon1, const BBitmap *icon2)
{
return (icon1->Bounds() == icon2->Bounds()
&& icon1->BitsLength() == icon2->BitsLength()
&& memcmp(icon1->Bits(), icon2->Bits(), icon1->BitsLength()) == 0);
}
static
bool
operator==(const version_info &info1, const version_info &info2)
{
return (info1.major == info2.major
&& info1.middle == info2.middle
&& info1.minor == info2.minor
&& info1.variety == info2.variety
&& info1.internal == info2.internal
&& !strcmp(info1.short_info, info2.short_info)
&& !strcmp(info1.long_info, info2.long_info));
}
CppUnit::Test*
AppFileInfoTest::Suite() {
CppUnit::TestSuite *suite = new CppUnit::TestSuite();
typedef CppUnit::TestCaller<AppFileInfoTest> TC;
suite->addTest( new TC("BAppFileInfo::Init Test1",
&AppFileInfoTest::InitTest1) );
suite->addTest( new TC("BAppFileInfo::Init Test2",
&AppFileInfoTest::InitTest2) );
suite->addTest( new TC("BAppFileInfo::Type Test",
&AppFileInfoTest::TypeTest) );
suite->addTest( new TC("BAppFileInfo::Signature Test",
&AppFileInfoTest::SignatureTest) );
suite->addTest( new TC("BAppFileInfo::App Flags Test",
&AppFileInfoTest::AppFlagsTest) );
suite->addTest( new TC("BAppFileInfo::Supported Types Test",
&AppFileInfoTest::SupportedTypesTest) );
suite->addTest( new TC("BAppFileInfo::Icon Test",
&AppFileInfoTest::IconTest) );
suite->addTest( new TC("BAppFileInfo::Version Info Test",
&AppFileInfoTest::VersionInfoTest) );
suite->addTest( new TC("BAppFileInfo::Icon For Type Test",
&AppFileInfoTest::IconForTypeTest) );
suite->addTest( new TC("BAppFileInfo::Info Location Test",
&AppFileInfoTest::InfoLocationTest) );
return suite;
}
void
AppFileInfoTest::setUp()
{
BasicTest::setUp();
execCommand(
string("mkdir ") + testDir
+ "; touch " + testFile1
+ " " + testFile2
+ " " + testFile3
+ " " + testFile4
);
fApplication
= new BApplication("application/x-vnd.obos.app-file-info-test");
fIconM1 = create_test_icon(B_MINI_ICON, 1);
fIconM2 = create_test_icon(B_MINI_ICON, 2);
fIconM3 = create_test_icon(B_MINI_ICON, 3);
fIconM4 = create_test_icon(B_MINI_ICON, 4);
fIconL1 = create_test_icon(B_LARGE_ICON, 1);
fIconL2 = create_test_icon(B_LARGE_ICON, 2);
fIconL3 = create_test_icon(B_LARGE_ICON, 3);
fIconL4 = create_test_icon(B_LARGE_ICON, 4);
}
void
AppFileInfoTest::tearDown()
{
delete fIconM1;
delete fIconM2;
delete fIconM3;
delete fIconM4;
delete fIconL1;
delete fIconL2;
delete fIconL3;
delete fIconL4;
fIconM1 = fIconM2 = fIconL1 = fIconL2 = NULL;
delete fApplication;
fApplication = NULL;
const char * const testTypes[] = {
testType1, testType2, testType3, testType4,
testAppSignature1, testAppSignature2, testAppSignature3
};
for (uint32 i = 0; i < sizeof(testTypes) / sizeof(const char*); i++) {
BMimeType type(testTypes[i]);
type.Delete();
}
execCommand(string("rm -rf ") + testDir);
BasicTest::tearDown();
}
static
void
SyncResources(BAppFileInfo &info)
{
struct node_info_hack {
virtual ~node_info_hack() {}
BNode *fNode;
uint32 _reserved[2];
status_t fCStatus;
};
struct app_file_info_hack : node_info_hack {
virtual ~app_file_info_hack() {}
BResources *fResources;
info_location fWhere;
uint32 _reserved[2];
};
app_file_info_hack &hackedInfo
= reinterpret_cast<app_file_info_hack&>(info);
BResources *resources = hackedInfo.fResources;
if (resources)
resources->Sync();
}
static
char*
ReadAttr(BNode &node, const char *name, type_code type, size_t &size)
{
attr_info info;
CHK(node.GetAttrInfo(name, &info) == B_OK);
CHK(info.type == type);
char *buffer = new char[info.size];
if (node.ReadAttr(name, type, 0, buffer, info.size) == info.size)
size = info.size;
else {
delete[] buffer;
CHK(false);
}
return buffer;
}
static
char*
ReadResource(BFile &file, const char *name, int32 id, type_code type,
size_t &size)
{
BResources resources;
CHK(resources.SetTo(&file) == B_OK);
int32 idFound;
CHK(resources.GetResourceInfo(type, name, &idFound, &size) == true);
CHK(idFound == id);
const void *resourceData = resources.LoadResource(type, name, &size);
CHK(resourceData != NULL);
char *buffer = new char[size];
memcpy(buffer, resourceData, size);
return buffer;
}
static
void
CheckAttr(BNode &node, const char *name, type_code type, const void *data,
int32 dataSize)
{
attr_info info;
CHK(node.GetAttrInfo(name, &info) == B_OK);
CHK(info.type == type);
CHK(info.size == dataSize);
char *buffer = new char[dataSize];
AutoDeleter<char> deleter(buffer, true);
CHK(node.ReadAttr(name, type, 0, buffer, dataSize) == dataSize);
CHK(memcmp(buffer, data, dataSize) == 0);
}
static
void
CheckResource(BFile &file, const char *name, int32 id, type_code type,
const void *data, size_t dataSize)
{
BResources resources;
CHK(resources.SetTo(&file) == B_OK);
int32 idFound;
size_t size;
CHK(resources.GetResourceInfo(type, name, &idFound, &size) == true);
CHK(idFound == id);
CHK(size == dataSize);
const void *resourceData = resources.LoadResource(type, name, &size);
CHK(resourceData != NULL);
CHK(size == dataSize);
CHK(memcmp(resourceData, data, dataSize) == 0);
}
static
void
CheckNoAttr(BNode &node, const char *name)
{
attr_info info;
CHK(node.GetAttrInfo(name, &info) == B_ENTRY_NOT_FOUND);
}
static
void
CheckNoResource(BFile &file, const char *name)
{
BResources resources;
CHK(resources.SetTo(&file) == B_OK);
type_code typeFound;
int32 idFound;
const char *nameFound;
size_t size;
bool found = false;
for (int32 i = 0;
!found && resources.GetResourceInfo(i, &typeFound, &idFound,
&nameFound, &size);
i++) {
found = !strcmp(nameFound, name);
}
CHK(!found);
}
struct TypeValue
{
TypeValue() : type() {}
TypeValue(const char *type) : type(type) {}
bool operator==(const TypeValue &value)
{
return (type == value.type);
}
string type;
};
struct TypeSetter
{
static status_t Set(BAppFileInfo &info, const TypeValue &value)
{
return info.SetType(value.type.c_str());
}
};
struct TypeGetter
{
static status_t Get(BAppFileInfo &info, TypeValue &value)
{
char buffer[B_MIME_TYPE_LENGTH];
status_t error = info.GetType(buffer);
if (error == B_OK)
value.type = buffer;
return error;
}
};
struct TypeChecker
{
static void CheckAttribute(BNode &file, const TypeValue &value)
{
CheckAttr(file, kTypeAttribute, B_MIME_STRING_TYPE, value.type.c_str(),
value.type.length() + 1);
}
static void CheckResource(BFile &file, const TypeValue &value)
{
::CheckResource(file, kTypeAttribute, kTypeResourceID,
B_MIME_STRING_TYPE, value.type.c_str(),
value.type.length() + 1);
}
};
typedef TypeValue SignatureValue;
struct SignatureSetter
{
static status_t Set(BAppFileInfo &info, const SignatureValue &value)
{
return info.SetSignature(value.type.c_str());
}
};
struct SignatureGetter
{
static status_t Get(BAppFileInfo &info, SignatureValue &value)
{
char buffer[B_MIME_TYPE_LENGTH];
status_t error = info.GetSignature(buffer);
if (error == B_OK)
value.type = buffer;
return error;
}
};
struct SignatureChecker
{
static void CheckAttribute(BNode &file, const SignatureValue &value)
{
CheckAttr(file, kSignatureAttribute, B_MIME_STRING_TYPE, value.type.c_str(),
value.type.length() + 1);
}
static void CheckResource(BFile &file, const SignatureValue &value)
{
::CheckResource(file, kSignatureAttribute, kSignatureResourceID,
B_MIME_STRING_TYPE, value.type.c_str(),
value.type.length() + 1);
}
};
struct AppFlagsValue
{
AppFlagsValue() : flags() {}
AppFlagsValue(uint32 flags) : flags(flags) {}
bool operator==(const AppFlagsValue &value)
{
return (flags == value.flags);
}
uint32 flags;
};
struct AppFlagsSetter
{
static status_t Set(BAppFileInfo &info, const AppFlagsValue &value)
{
return info.SetAppFlags(value.flags);
}
};
struct AppFlagsGetter
{
static status_t Get(BAppFileInfo &info, AppFlagsValue &value)
{
return info.GetAppFlags(&value.flags);
}
};
struct AppFlagsChecker
{
static void CheckAttribute(BNode &file, const AppFlagsValue &value)
{
CheckAttr(file, kAppFlagsAttribute, APP_FLAGS_TYPE, &value.flags,
sizeof(value.flags));
}
static void CheckResource(BFile &file, const AppFlagsValue &value)
{
::CheckResource(file, kAppFlagsAttribute, kAppFlagsResourceID,
APP_FLAGS_TYPE, &value.flags, sizeof(value.flags));
}
};
struct SupportedTypesValue
{
SupportedTypesValue() : types() {}
SupportedTypesValue(const BMessage &types) : types(types) {}
SupportedTypesValue(const char **types, int32 count)
: types()
{
for (int32 i = 0; i < count; i++)
this->types.AddString("types", types[i]);
}
bool operator==(const SupportedTypesValue &value)
{
type_code type1, type2;
int32 count1, count2;
bool equal = (types.GetInfo("types", &type1, &count1) == B_OK
&& value.types.GetInfo("types", &type2, &count2) == B_OK
&& type1 == type2 && count1 == count2);
for (int32 i = 0; equal && i < count1; i++) {
BString str1, str2;
equal = types.FindString("types", i, &str1) == B_OK
&& value.types.FindString("types", i, &str2) == B_OK
&& str1 == str2;
}
return equal;
}
BMessage types;
};
struct SupportedTypesSetter
{
static status_t Set(BAppFileInfo &info, const SupportedTypesValue &value)
{
return info.SetSupportedTypes(&value.types, false);
}
};
struct SupportedTypesGetter
{
static status_t Get(BAppFileInfo &info, SupportedTypesValue &value)
{
return info.GetSupportedTypes(&value.types);
}
};
struct SupportedTypesChecker
{
static void CheckAttribute(BNode &file, const SupportedTypesValue &value)
{
size_t size;
char *buffer = ReadAttr(file, kSupportedTypesAttribute,
B_MESSAGE_TYPE, size);
AutoDeleter<char> deleter(buffer, true);
BMessage storedTypes;
CHK(storedTypes.Unflatten(buffer) == B_OK);
SupportedTypesValue storedValue(storedTypes);
CHK(storedValue == value);
}
static void CheckResource(BFile &file, const SupportedTypesValue &value)
{
size_t size;
char *buffer = ReadResource(file, kSupportedTypesAttribute,
kSupportedTypesResourceID, B_MESSAGE_TYPE,
size);
AutoDeleter<char> deleter(buffer, true);
BMessage storedTypes;
CHK(storedTypes.Unflatten(buffer) == B_OK);
SupportedTypesValue storedValue(storedTypes);
CHK(storedValue == value);
}
};
struct IconValue
{
IconValue() : mini(BRect(0, 0, 15, 15), B_CMAP8),
large(BRect(0, 0, 31, 31), B_CMAP8) {}
IconValue(const BBitmap *mini, const BBitmap *large)
: mini(BRect(0, 0, 15, 15), B_CMAP8),
large(BRect(0, 0, 31, 31), B_CMAP8)
{
this->mini.SetBits(mini->Bits(), mini->BitsLength(), 0,
mini->ColorSpace());
this->large.SetBits(large->Bits(), large->BitsLength(), 0,
large->ColorSpace());
}
bool operator==(const IconValue &value)
{
return (icon_equal(&mini, &value.mini)
&& icon_equal(&large, &value.large));
}
BBitmap mini;
BBitmap large;
};
struct IconSetter
{
static status_t Set(BAppFileInfo &info, const IconValue &value)
{
status_t error = info.SetIcon(&value.mini, B_MINI_ICON);
if (error == B_OK)
error = info.SetIcon(&value.large, B_LARGE_ICON);
return error;
}
};
struct IconGetter
{
static status_t Get(BAppFileInfo &info, IconValue &value)
{
status_t error = info.GetIcon(&value.mini, B_MINI_ICON);
if (error == B_OK)
error = info.GetIcon(&value.large, B_LARGE_ICON);
return error;
}
};
struct IconChecker
{
static void CheckAttribute(BNode &file, const IconValue &value)
{
CheckAttr(file, kMiniIconAttribute, MINI_ICON_TYPE, value.mini.Bits(),
value.mini.BitsLength());
CheckAttr(file, kLargeIconAttribute, LARGE_ICON_TYPE,
value.large.Bits(), value.large.BitsLength());
}
static void CheckResource(BFile &file, const IconValue &value)
{
::CheckResource(file, kMiniIconAttribute, kMiniIconResourceID,
MINI_ICON_TYPE, value.mini.Bits(),
value.mini.BitsLength());
::CheckResource(file, kLargeIconAttribute, kLargeIconResourceID,
LARGE_ICON_TYPE, value.large.Bits(),
value.large.BitsLength());
}
};
struct VersionInfoValue
{
VersionInfoValue() : app(), system() {}
VersionInfoValue(const version_info &app, const version_info &system)
: app(app), system(system) {}
bool operator==(const VersionInfoValue &value)
{
return (app == value.app && system == value.system);
}
version_info app;
version_info system;
};
struct VersionInfoSetter
{
static status_t Set(BAppFileInfo &info, const VersionInfoValue &value)
{
status_t error = info.SetVersionInfo(&value.app, B_APP_VERSION_KIND);
if (error == B_OK)
error = info.SetVersionInfo(&value.system, B_SYSTEM_VERSION_KIND);
return error;
}
};
struct VersionInfoGetter
{
static status_t Get(BAppFileInfo &info, VersionInfoValue &value)
{
status_t error = info.GetVersionInfo(&value.app, B_APP_VERSION_KIND);
if (error == B_OK)
error = info.GetVersionInfo(&value.system, B_SYSTEM_VERSION_KIND);
return error;
}
};
struct VersionInfoChecker
{
static void CheckAttribute(BNode &file, const VersionInfoValue &value)
{
version_info infos[] = { value.app, value.system };
CheckAttr(file, kVersionInfoAttribute, VERSION_INFO_TYPE,
infos, sizeof(infos));
}
static void CheckResource(BFile &file, const VersionInfoValue &value)
{
version_info infos[] = { value.app, value.system };
::CheckResource(file, kVersionInfoAttribute,
kVersionInfoResourceID, VERSION_INFO_TYPE,
infos, sizeof(infos));
}
};
struct IconForTypeValue : public IconValue
{
IconForTypeValue() : type(testType1) {}
IconForTypeValue(const BBitmap *mini, const BBitmap *large)
: IconValue(mini, large), type(testType1) {}
string type;
};
struct IconForTypeSetter
{
static status_t Set(BAppFileInfo &info, const IconForTypeValue &value)
{
status_t error = info.SetIconForType(value.type.c_str(), &value.mini,
B_MINI_ICON);
if (error == B_OK) {
error = info.SetIconForType(value.type.c_str(), &value.large,
B_LARGE_ICON);
}
return error;
}
};
struct IconForTypeGetter
{
static status_t Get(BAppFileInfo &info, IconForTypeValue &value)
{
status_t error = info.GetIconForType(value.type.c_str(), &value.mini,
B_MINI_ICON);
if (error == B_OK) {
error = info.GetIconForType(value.type.c_str(), &value.large,
B_LARGE_ICON);
}
return error;
}
};
struct IconForTypeChecker
{
static void CheckAttribute(BNode &file, const IconForTypeValue &value)
{
string attrNameM(kMiniIconForTypeAttribute);
attrNameM += value.type;
CheckAttr(file, attrNameM.c_str(), MINI_ICON_TYPE, value.mini.Bits(),
value.mini.BitsLength());
string attrNameL(kLargeIconForTypeAttribute);
attrNameL += value.type;
CheckAttr(file, attrNameL.c_str(), LARGE_ICON_TYPE,
value.large.Bits(), value.large.BitsLength());
}
static void CheckResource(BFile &file, const IconForTypeValue &value)
{
string attrNameM(kMiniIconForTypeAttribute);
attrNameM += value.type;
::CheckResource(file, attrNameM.c_str(), kMiniIconForTypeResourceID,
MINI_ICON_TYPE, value.mini.Bits(),
value.mini.BitsLength());
string attrNameL(kLargeIconForTypeAttribute);
attrNameL += value.type;
::CheckResource(file, attrNameL.c_str(), kLargeIconForTypeResourceID,
LARGE_ICON_TYPE, value.large.Bits(),
value.large.BitsLength());
}
};
static
void
CheckTypeAttr(BNode &node, const char *data)
{
CheckAttr(node, kTypeAttribute, B_MIME_STRING_TYPE, data,
strlen(data) + 1);
}
static
void
CheckTypeResource(BFile &file, const char *data)
{
CheckResource(file, kTypeAttribute, kTypeResourceID, B_MIME_STRING_TYPE,
data, strlen(data) + 1);
}
static
void
CheckSignatureAttr(BNode &node, const char *data)
{
CheckAttr(node, kSignatureAttribute, B_MIME_STRING_TYPE, data,
strlen(data) + 1);
}
static
void
CheckSignatureResource(BFile &file, const char *data)
{
CheckResource(file, kSignatureAttribute, kSignatureResourceID,
B_MIME_STRING_TYPE, data, strlen(data) + 1);
}
static
void
CheckAppFlagsAttr(BNode &node, uint32 flags)
{
CheckAttr(node, kAppFlagsAttribute, APP_FLAGS_TYPE, &flags, sizeof(flags));
}
static
void
CheckAppFlagsResource(BFile &file, uint32 flags)
{
CheckResource(file, kAppFlagsAttribute, kAppFlagsResourceID,
APP_FLAGS_TYPE, &flags, sizeof(flags));
}
static
void
CheckSupportedTypesAttr(BNode &node, const BMessage *data)
{
SupportedTypesChecker::CheckAttribute(node, SupportedTypesValue(*data));
}
static
void
CheckSupportedTypesResource(BFile &file, const BMessage *data)
{
SupportedTypesChecker::CheckResource(file, SupportedTypesValue(*data));
}
static
void
CheckIconAttr(BNode &node, BBitmap *data)
{
const char *attribute = NULL;
uint32 type = 0;
switch (data->Bounds().IntegerWidth()) {
case 15:
attribute = kMiniIconAttribute;
type = MINI_ICON_TYPE;
break;
case 31:
attribute = kLargeIconAttribute;
type = LARGE_ICON_TYPE;
break;
default:
CHK(false);
break;
}
CheckAttr(node, attribute, type, data->Bits(), data->BitsLength());
}
static
void
CheckIconResource(BFile &file, BBitmap *data)
{
const char *attribute = NULL;
int32 resourceID = 0;
uint32 type = 0;
switch (data->Bounds().IntegerWidth()) {
case 15:
attribute = kMiniIconAttribute;
resourceID = kMiniIconResourceID;
type = MINI_ICON_TYPE;
break;
case 31:
attribute = kLargeIconAttribute;
resourceID = kLargeIconResourceID;
type = LARGE_ICON_TYPE;
break;
default:
CHK(false);
break;
}
CheckResource(file, attribute, resourceID, type, data->Bits(),
data->BitsLength());
}
static
void
CheckVersionInfoAttr(BNode &node, version_info *data)
{
CheckAttr(node, kVersionInfoAttribute, VERSION_INFO_TYPE, data,
2 * sizeof(version_info));
}
static
void
CheckVersionInfoResource(BFile &file, version_info *data)
{
CheckResource(file, kVersionInfoAttribute, kVersionInfoResourceID,
VERSION_INFO_TYPE, data, 2 * sizeof(version_info));
}
static
void
CheckIconForTypeAttr(BNode &node, const char *type, BBitmap *data)
{
string attribute;
int32 resourceID = 0;
uint32 iconType = 0;
switch (data->Bounds().IntegerWidth()) {
case 15:
attribute = kMiniIconForTypeAttribute;
resourceID = kMiniIconForTypeResourceID;
iconType = MINI_ICON_TYPE;
break;
case 31:
attribute = kLargeIconForTypeAttribute;
resourceID = kLargeIconForTypeResourceID;
iconType = LARGE_ICON_TYPE;
break;
default:
CHK(false);
break;
}
attribute += type;
CheckAttr(node, attribute.c_str(), iconType, data->Bits(),
data->BitsLength());
}
static
void
CheckIconForTypeResource(BFile &file, const char *type, BBitmap *data,
int32 resourceID = -1)
{
string attribute;
uint32 iconType = 0;
switch (data->Bounds().IntegerWidth()) {
case 15:
attribute = kMiniIconForTypeAttribute;
if (resourceID < 0)
resourceID = kMiniIconForTypeResourceID;
iconType = MINI_ICON_TYPE;
break;
case 31:
attribute = kLargeIconForTypeAttribute;
if (resourceID < 0)
resourceID = kLargeIconForTypeResourceID;
iconType = LARGE_ICON_TYPE;
break;
default:
CHK(false);
break;
}
attribute += type;
CheckResource(file, attribute.c_str(), resourceID, iconType, data->Bits(),
data->BitsLength());
}
static
void
CheckNoIconForTypeAttr(BNode &node, const char *type, icon_size iconSize)
{
string attribute;
switch (iconSize) {
case B_MINI_ICON:
attribute = kMiniIconForTypeAttribute;
break;
case B_LARGE_ICON:
attribute = kLargeIconForTypeAttribute;
break;
default:
CHK(false);
break;
}
attribute += type;
CheckNoAttr(node, attribute.c_str());
}
static
void
CheckNoIconForTypeResource(BFile &file, const char *type, icon_size iconSize)
{
string attribute;
switch (iconSize) {
case B_MINI_ICON:
attribute = kMiniIconForTypeAttribute;
break;
case B_LARGE_ICON:
attribute = kLargeIconForTypeAttribute;
break;
default:
CHK(false);
break;
}
attribute += type;
CheckNoResource(file, attribute.c_str());
}
void
AppFileInfoTest::InitTest1()
{
#ifdef TEST_R5
const bool hasInitialLocation = false;
#else
const bool hasInitialLocation = true;
#endif
NextSubTest();
{
BAppFileInfo appFileInfo;
CHK(appFileInfo.InitCheck() == B_NO_INIT);
CHK(appFileInfo.IsUsingAttributes() == hasInitialLocation);
CHK(appFileInfo.IsUsingResources() == hasInitialLocation);
}
NextSubTest();
{
BAppFileInfo appFileInfo(NULL);
CHK(appFileInfo.InitCheck() == B_BAD_VALUE);
CHK(appFileInfo.IsUsingAttributes() == hasInitialLocation);
CHK(appFileInfo.IsUsingResources() == hasInitialLocation);
}
NextSubTest();
{
BFile file;
BAppFileInfo appFileInfo(&file);
CHK(appFileInfo.InitCheck() == B_BAD_VALUE);
CHK(appFileInfo.IsUsingAttributes() == hasInitialLocation);
CHK(appFileInfo.IsUsingResources() == hasInitialLocation);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo(&file);
CHK(appFileInfo.InitCheck() == B_OK);
CHK(appFileInfo.IsUsingAttributes() == true);
CHK(appFileInfo.IsUsingResources() == true);
}
}
void
AppFileInfoTest::InitTest2()
{
#ifdef TEST_R5
const bool hasInitialLocation = false;
#else
const bool hasInitialLocation = true;
#endif
NextSubTest();
{
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(NULL) == B_BAD_VALUE);
CHK(appFileInfo.InitCheck() == B_BAD_VALUE);
CHK(appFileInfo.IsUsingAttributes() == hasInitialLocation);
CHK(appFileInfo.IsUsingResources() == hasInitialLocation);
}
NextSubTest();
{
BFile file;
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_BAD_VALUE);
CHK(appFileInfo.InitCheck() == B_BAD_VALUE);
CHK(appFileInfo.IsUsingAttributes() == hasInitialLocation);
CHK(appFileInfo.IsUsingResources() == hasInitialLocation);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.InitCheck() == B_OK);
CHK(appFileInfo.IsUsingAttributes() == true);
CHK(appFileInfo.IsUsingResources() == true);
off_t size;
CHK(file.GetSize(&size) == B_OK);
CHK(size == 0);
CheckNoAttr(file, kTypeAttribute);
CheckNoAttr(file, kMiniIconAttribute);
CheckNoAttr(file, kLargeIconAttribute);
CHK(appFileInfo.SetTo(NULL) == B_BAD_VALUE);
CHK(appFileInfo.InitCheck() == B_BAD_VALUE);
CHK(appFileInfo.IsUsingAttributes() == true);
CHK(appFileInfo.IsUsingResources() == true);
CHK(file.GetSize(&size) == B_OK);
CHK(size == 0);
CheckNoAttr(file, kTypeAttribute);
CheckNoAttr(file, kMiniIconAttribute);
CheckNoAttr(file, kLargeIconAttribute);
BFile file2(testFile2, B_READ_WRITE);
CHK(appFileInfo.SetTo(&file2) == B_OK);
CHK(appFileInfo.InitCheck() == B_OK);
CHK(appFileInfo.IsUsingAttributes() == true);
CHK(appFileInfo.IsUsingResources() == true);
}
}
void
AppFileInfoTest::TypeTest()
{
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(equals(appFileInfo.GetType(NULL), B_BAD_ADDRESS, B_BAD_VALUE));
}
NextSubTest();
{
BAppFileInfo appFileInfo;
char type[B_MIME_TYPE_LENGTH];
CHK(appFileInfo.GetType(type) == B_NO_INIT);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
char type[B_MIME_TYPE_LENGTH];
CHK(appFileInfo.GetType(type) == B_ENTRY_NOT_FOUND);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetType(testType1) == B_OK);
char type[B_MIME_TYPE_LENGTH];
CHK(appFileInfo.GetType(type) == B_OK);
CHK(strcmp(testType1, type) == 0);
CheckTypeAttr(file, testType1);
SyncResources(appFileInfo);
CheckTypeResource(file, testType1);
CHK(appFileInfo.SetType(testType2) == B_OK);
CHK(appFileInfo.GetType(type) == B_OK);
CHK(strcmp(testType2, type) == 0);
CheckTypeAttr(file, testType2);
SyncResources(appFileInfo);
CheckTypeResource(file, testType2);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetType(NULL) == B_OK);
char type[B_MIME_TYPE_LENGTH];
CHK(appFileInfo.GetType(type) == B_ENTRY_NOT_FOUND);
CheckNoAttr(file, kTypeAttribute);
SyncResources(appFileInfo);
CheckNoResource(file, kTypeAttribute);
}
NextSubTest();
{
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetType(testType1) == B_NO_INIT);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetType(invalidTestType) == B_OK);
char type[B_MIME_TYPE_LENGTH];
CHK(appFileInfo.GetType(type) == B_OK);
CHK(strcmp(invalidTestType, type) == 0);
CheckTypeAttr(file, invalidTestType);
SyncResources(appFileInfo);
CheckTypeResource(file, invalidTestType);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetType(NULL) == B_OK);
CHK(appFileInfo.SetType(tooLongTestType) == B_BAD_VALUE);
CheckNoAttr(file, kTypeAttribute);
SyncResources(appFileInfo);
CheckNoResource(file, kTypeAttribute);
}
}
void
AppFileInfoTest::SignatureTest()
{
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(equals(appFileInfo.GetSignature(NULL), B_BAD_ADDRESS, B_BAD_VALUE));
}
NextSubTest();
{
BAppFileInfo appFileInfo;
char signature[B_MIME_TYPE_LENGTH];
CHK(appFileInfo.GetSignature(signature) == B_NO_INIT);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
char signature[B_MIME_TYPE_LENGTH];
CHK(appFileInfo.GetSignature(signature) == B_ENTRY_NOT_FOUND);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetSignature(testAppSignature1) == B_OK);
CHK(BMimeType(testAppSignature1).IsInstalled() == false);
char signature[B_MIME_TYPE_LENGTH];
CHK(appFileInfo.GetSignature(signature) == B_OK);
CHK(strcmp(testAppSignature1, signature) == 0);
CheckSignatureAttr(file, testAppSignature1);
SyncResources(appFileInfo);
CheckSignatureResource(file, testAppSignature1);
CHK(appFileInfo.SetSignature(testAppSignature2) == B_OK);
CHK(BMimeType(testAppSignature2).IsInstalled() == false);
CHK(appFileInfo.GetSignature(signature) == B_OK);
CHK(strcmp(testAppSignature2, signature) == 0);
CheckSignatureAttr(file, testAppSignature2);
SyncResources(appFileInfo);
CheckSignatureResource(file, testAppSignature2);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetSignature(NULL) == B_OK);
char signature[B_MIME_TYPE_LENGTH];
CHK(appFileInfo.GetSignature(signature) == B_ENTRY_NOT_FOUND);
CheckNoAttr(file, kSignatureAttribute);
SyncResources(appFileInfo);
CheckNoResource(file, kSignatureAttribute);
}
NextSubTest();
{
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetSignature(testAppSignature1) == B_NO_INIT);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetSignature(invalidTestType) == B_OK);
char signature[B_MIME_TYPE_LENGTH];
CHK(appFileInfo.GetSignature(signature) == B_OK);
CHK(strcmp(invalidTestType, signature) == 0);
CheckSignatureAttr(file, invalidTestType);
SyncResources(appFileInfo);
CheckSignatureResource(file, invalidTestType);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetSignature(NULL) == B_OK);
CHK(appFileInfo.SetSignature(tooLongTestType) == B_BAD_VALUE);
CheckNoAttr(file, kSignatureAttribute);
SyncResources(appFileInfo);
CheckNoResource(file, kSignatureAttribute);
}
}
void
AppFileInfoTest::AppFlagsTest()
{
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(equals(appFileInfo.GetAppFlags(NULL), B_BAD_ADDRESS, B_BAD_VALUE));
}
NextSubTest();
{
BAppFileInfo appFileInfo;
uint32 flags;
CHK(appFileInfo.GetAppFlags(&flags) == B_NO_INIT);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
uint32 flags;
CHK(appFileInfo.GetAppFlags(&flags) == B_ENTRY_NOT_FOUND);
}
NextSubTest();
{
uint32 testFlags1 = B_SINGLE_LAUNCH | B_BACKGROUND_APP;
uint32 testFlags2 = B_MULTIPLE_LAUNCH | B_ARGV_ONLY;
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetAppFlags(testFlags1) == B_OK);
uint32 flags;
CHK(appFileInfo.GetAppFlags(&flags) == B_OK);
CHK(flags == testFlags1);
CheckAppFlagsAttr(file, testFlags1);
SyncResources(appFileInfo);
CheckAppFlagsResource(file, testFlags1);
CHK(appFileInfo.SetAppFlags(testFlags2) == B_OK);
CHK(appFileInfo.GetAppFlags(&flags) == B_OK);
CHK(flags == testFlags2);
CheckAppFlagsAttr(file, testFlags2);
SyncResources(appFileInfo);
CheckAppFlagsResource(file, testFlags2);
}
NextSubTest();
{
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetAppFlags(B_SINGLE_LAUNCH) == B_NO_INIT);
}
}
static
bool
IsSupportingApp(const char *type, const char *signature)
{
BMessage apps;
BMimeType(type).GetSupportingApps(&apps);
bool found = false;
BString app;
for (int32 i = 0;
!found && apps.FindString("applications", i, &app) == B_OK;
i++) {
found = (app == signature);
}
return found;
}
void
AppFileInfoTest::SupportedTypesTest()
{
BMessage testTypes1;
CHK(testTypes1.AddString("types", testType1) == B_OK);
CHK(testTypes1.AddString("types", testType2) == B_OK);
BMessage testTypes2;
CHK(testTypes2.AddString("types", testType3) == B_OK);
CHK(testTypes2.AddString("types", testType4) == B_OK);
BMimeType mimeTestType1(testType1);
BMimeType mimeTestType2(testType2);
BMimeType mimeTestType3(testType3);
BMimeType mimeTestType4(testType4);
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetSignature(testAppSignature1) == B_OK);
CHK(BMimeType(testAppSignature1).Install() == B_OK);
}
NextSubTest();
{
BAppFileInfo appFileInfo;
BMessage types;
CHK(appFileInfo.GetSupportedTypes(&types) == B_NO_INIT);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
BMessage types;
CHK(appFileInfo.GetSupportedTypes(&types) == B_ENTRY_NOT_FOUND);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(BMimeType(testType1).IsInstalled() == false);
CHK(BMimeType(testType2).IsInstalled() == false);
CHK(appFileInfo.SetSupportedTypes(&testTypes1) == B_OK);
BMessage types;
CHK(appFileInfo.GetSupportedTypes(&types) == B_OK);
CHK(SupportedTypesValue(types) == SupportedTypesValue(testTypes1));
CHK(appFileInfo.IsSupportedType(testType1) == true);
CHK(appFileInfo.IsSupportedType(testType2) == true);
CHK(appFileInfo.Supports(&mimeTestType1) == true);
CHK(appFileInfo.Supports(&mimeTestType2) == true);
CheckSupportedTypesAttr(file, &testTypes1);
SyncResources(appFileInfo);
CheckSupportedTypesResource(file, &testTypes1);
CHK(BMimeType(testType1).IsInstalled() == true);
CHK(BMimeType(testType2).IsInstalled() == true);
CHK(BMimeType(testType3).IsInstalled() == false);
CHK(BMimeType(testType4).IsInstalled() == false);
CHK(appFileInfo.SetSupportedTypes(&testTypes2) == B_OK);
BMessage types2;
CHK(appFileInfo.GetSupportedTypes(&types2) == B_OK);
CHK(SupportedTypesValue(types2) == SupportedTypesValue(testTypes2));
CHK(appFileInfo.IsSupportedType(testType1) == false);
CHK(appFileInfo.IsSupportedType(testType2) == false);
CHK(appFileInfo.IsSupportedType(testType3) == true);
CHK(appFileInfo.IsSupportedType(testType4) == true);
CHK(appFileInfo.Supports(&mimeTestType1) == false);
CHK(appFileInfo.Supports(&mimeTestType2) == false);
CHK(appFileInfo.Supports(&mimeTestType3) == true);
CHK(appFileInfo.Supports(&mimeTestType4) == true);
CheckSupportedTypesAttr(file, &testTypes2);
SyncResources(appFileInfo);
CheckSupportedTypesResource(file, &testTypes2);
CHK(BMimeType(testType3).IsInstalled() == true);
CHK(BMimeType(testType4).IsInstalled() == true);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
BMessage types2;
CHK(types2.AddString("types", testType1) == B_OK);
CHK(types2.AddString("dummy", "Hello") == B_OK);
CHK(appFileInfo.GetSupportedTypes(&types2) == B_OK);
CHK(SupportedTypesValue(types2) == SupportedTypesValue(testTypes2));
const char *dummy;
CHK(types2.FindString("dummy", &dummy) != B_OK);
}
#ifndef TEST_R5
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.GetSupportedTypes(NULL) == B_BAD_VALUE);
}
#endif
NextSubTest();
{
BAppFileInfo appFileInfo;
BMessage types;
CHK(appFileInfo.SetSupportedTypes(&types) == B_NO_INIT);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetSupportedTypes(NULL) == B_OK);
BMessage types;
CHK(appFileInfo.GetSupportedTypes(&types) == B_ENTRY_NOT_FOUND);
CHK(appFileInfo.IsSupportedType(testType1) == false);
CHK(appFileInfo.IsSupportedType(testType2) == false);
CHK(appFileInfo.IsSupportedType(testType3) == false);
CHK(appFileInfo.IsSupportedType(testType4) == false);
CHK(appFileInfo.Supports(&mimeTestType1) == false);
CHK(appFileInfo.Supports(&mimeTestType2) == false);
CHK(appFileInfo.Supports(&mimeTestType3) == false);
CHK(appFileInfo.Supports(&mimeTestType4) == false);
CheckNoAttr(file, kSupportedTypesAttribute);
SyncResources(appFileInfo);
CheckNoResource(file, kSupportedTypesAttribute);
#ifndef TEST_R5
CHK(appFileInfo.SetSupportedTypes(&testTypes1) == B_OK);
CHK(appFileInfo.SetSupportedTypes(NULL, true) == B_OK);
CHK(appFileInfo.GetSupportedTypes(&types) == B_ENTRY_NOT_FOUND);
CHK(appFileInfo.IsSupportedType(testType1) == false);
CHK(appFileInfo.IsSupportedType(testType2) == false);
CHK(appFileInfo.IsSupportedType(testType3) == false);
CHK(appFileInfo.IsSupportedType(testType4) == false);
CHK(appFileInfo.Supports(&mimeTestType1) == false);
CHK(appFileInfo.Supports(&mimeTestType2) == false);
CHK(appFileInfo.Supports(&mimeTestType3) == false);
CHK(appFileInfo.Supports(&mimeTestType4) == false);
CheckNoAttr(file, kSupportedTypesAttribute);
SyncResources(appFileInfo);
CheckNoResource(file, kSupportedTypesAttribute);
#endif
}
NextSubTest();
{
CHK(BMimeType(testType1).Delete() == B_OK);
CHK(BMimeType(testType2).Delete() == B_OK);
CHK(BMimeType(testType3).Delete() == B_OK);
CHK(BMimeType(testType4).Delete() == B_OK);
CHK(BMimeType(testAppSignature1).Delete() == B_OK);
CHK(BMimeType(testAppSignature1).Install() == B_OK);
CHK(BEntry(testFile1).Remove() == B_OK);
BFile file(testFile1, B_READ_WRITE | B_CREATE_FILE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetSignature(testAppSignature1) == B_OK);
CHK(appFileInfo.SetSupportedTypes(&testTypes1) == B_OK);
CHK(IsSupportingApp(testType1, testAppSignature1) == true);
CHK(IsSupportingApp(testType2, testAppSignature1) == true);
CHK(appFileInfo.SetSupportedTypes(&testTypes2) == B_OK);
CHK(IsSupportingApp(testType1, testAppSignature1) == true);
CHK(IsSupportingApp(testType2, testAppSignature1) == true);
CHK(IsSupportingApp(testType3, testAppSignature1) == true);
CHK(IsSupportingApp(testType4, testAppSignature1) == true);
}
NextSubTest();
{
CHK(BMimeType(testType1).Delete() == B_OK);
CHK(BMimeType(testType2).Delete() == B_OK);
CHK(BMimeType(testType3).Delete() == B_OK);
CHK(BMimeType(testType4).Delete() == B_OK);
CHK(BMimeType(testAppSignature1).Delete() == B_OK);
CHK(BMimeType(testAppSignature1).Install() == B_OK);
CHK(BEntry(testFile1).Remove() == B_OK);
BFile file(testFile1, B_READ_WRITE | B_CREATE_FILE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetSignature(testAppSignature1) == B_OK);
CHK(appFileInfo.SetSupportedTypes(&testTypes1, false) == B_OK);
CHK(IsSupportingApp(testType1, testAppSignature1) == true);
CHK(IsSupportingApp(testType2, testAppSignature1) == true);
CHK(appFileInfo.SetSupportedTypes(&testTypes2, false) == B_OK);
CHK(IsSupportingApp(testType1, testAppSignature1) == true);
CHK(IsSupportingApp(testType2, testAppSignature1) == true);
CHK(IsSupportingApp(testType3, testAppSignature1) == true);
CHK(IsSupportingApp(testType4, testAppSignature1) == true);
}
NextSubTest();
{
CHK(BMimeType(testType1).Delete() == B_OK);
CHK(BMimeType(testType2).Delete() == B_OK);
CHK(BMimeType(testType3).Delete() == B_OK);
CHK(BMimeType(testType4).Delete() == B_OK);
CHK(BMimeType(testAppSignature1).Delete() == B_OK);
CHK(BMimeType(testAppSignature1).Install() == B_OK);
CHK(BEntry(testFile1).Remove() == B_OK);
BFile file(testFile1, B_READ_WRITE | B_CREATE_FILE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetSignature(testAppSignature1) == B_OK);
CHK(appFileInfo.SetSupportedTypes(&testTypes1, true) == B_OK);
CHK(IsSupportingApp(testType1, testAppSignature1) == true);
CHK(IsSupportingApp(testType2, testAppSignature1) == true);
CHK(appFileInfo.SetSupportedTypes(&testTypes2, true) == B_OK);
CHK(IsSupportingApp(testType1, testAppSignature1) == false);
CHK(IsSupportingApp(testType2, testAppSignature1) == false);
CHK(IsSupportingApp(testType3, testAppSignature1) == true);
CHK(IsSupportingApp(testType4, testAppSignature1) == true);
}
#ifndef TEST_R5
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
BMessage invalidTestTypes;
CHK(invalidTestTypes.AddString("types", invalidTestType) == B_OK);
CHK(appFileInfo.SetSupportedTypes(NULL, true) == B_OK);
CHK(appFileInfo.SetSupportedTypes(&invalidTestTypes, false)
== B_BAD_VALUE);
BMessage types;
CHK(appFileInfo.GetSupportedTypes(&types) == B_ENTRY_NOT_FOUND);
CHK(appFileInfo.IsSupportedType(invalidTestType) == false);
CheckNoAttr(file, kSupportedTypesAttribute);
SyncResources(appFileInfo);
CheckNoResource(file, kSupportedTypesAttribute);
}
#endif
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.IsSupportedType(NULL) == false);
#ifndef TEST_R5
CHK(appFileInfo.Supports(NULL) == false);
#endif
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
BMimeType gifType("image/gif");
CHK(appFileInfo.IsSupportedType(gifType.Type()) == false);
CHK(appFileInfo.Supports(&gifType) == false);
BMessage types;
CHK(types.AddString("types", "application/octet-stream") == B_OK);
CHK(appFileInfo.SetSupportedTypes(&types) == B_OK);
CHK(appFileInfo.IsSupportedType(gifType.Type()) == true);
CHK(appFileInfo.Supports(&gifType) == false);
BMessage noTypes;
CHK(appFileInfo.SetSupportedTypes(&noTypes, true) == B_OK);
}
NextSubTest();
{
CHK(BMimeType(testType1).Delete() == B_OK);
CHK(BMimeType(testType2).Delete() == B_OK);
CHK(BMimeType(testType3).Delete() == B_OK);
CHK(BMimeType(testType4).Delete() == B_OK);
CHK(BMimeType(testAppSignature1).Delete() == B_OK);
CHK(BEntry(testFile1).Remove() == B_OK);
BFile file(testFile1, B_READ_WRITE | B_CREATE_FILE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetSignature(testAppSignature1) == B_OK);
CHK(BMimeType(testType1).IsInstalled() == false);
CHK(BMimeType(testType2).IsInstalled() == false);
CHK(appFileInfo.SetSupportedTypes(&testTypes1, true) == B_OK);
BMessage types;
CHK(appFileInfo.GetSupportedTypes(&types) == B_OK);
CHK(SupportedTypesValue(types) == SupportedTypesValue(testTypes1));
CHK(appFileInfo.IsSupportedType(testType1) == true);
CHK(appFileInfo.IsSupportedType(testType2) == true);
CHK(appFileInfo.Supports(&mimeTestType1) == true);
CHK(appFileInfo.Supports(&mimeTestType2) == true);
CheckSupportedTypesAttr(file, &testTypes1);
SyncResources(appFileInfo);
CheckSupportedTypesResource(file, &testTypes1);
CHK(BMimeType(testType1).IsInstalled() == false);
CHK(BMimeType(testType2).IsInstalled() == false);
CHK(BMimeType(testType3).IsInstalled() == false);
CHK(BMimeType(testType4).IsInstalled() == false);
CHK(appFileInfo.SetSupportedTypes(&testTypes2, true) == B_OK);
CHK(appFileInfo.GetSupportedTypes(&types) == B_OK);
CHK(SupportedTypesValue(types) == SupportedTypesValue(testTypes2));
CHK(appFileInfo.IsSupportedType(testType1) == false);
CHK(appFileInfo.IsSupportedType(testType2) == false);
CHK(appFileInfo.IsSupportedType(testType3) == true);
CHK(appFileInfo.IsSupportedType(testType4) == true);
CHK(appFileInfo.Supports(&mimeTestType1) == false);
CHK(appFileInfo.Supports(&mimeTestType2) == false);
CHK(appFileInfo.Supports(&mimeTestType3) == true);
CHK(appFileInfo.Supports(&mimeTestType4) == true);
CheckSupportedTypesAttr(file, &testTypes2);
SyncResources(appFileInfo);
CheckSupportedTypesResource(file, &testTypes2);
CHK(BMimeType(testType1).IsInstalled() == false);
CHK(BMimeType(testType2).IsInstalled() == false);
CHK(BMimeType(testType3).IsInstalled() == false);
#ifndef TEST_R5
CHK(BMimeType(testType4).IsInstalled() == false);
#endif
}
NextSubTest();
{
BMimeType(testType1).Delete();
BMimeType(testType2).Delete();
BMimeType(testType3).Delete();
BMimeType(testType4).Delete();
BMimeType(testAppSignature1).Delete();
CHK(BEntry(testFile1).Remove() == B_OK);
BFile file(testFile1, B_READ_WRITE | B_CREATE_FILE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetSignature(testAppSignature1) == B_OK);
CHK(BMimeType(testType1).IsInstalled() == false);
CHK(BMimeType(testType2).IsInstalled() == false);
#ifdef TEST_R5
CHK(appFileInfo.SetSupportedTypes(&testTypes1) == B_ENTRY_NOT_FOUND);
#else
CHK(appFileInfo.SetSupportedTypes(&testTypes1) == B_OK);
#endif
BMessage types;
CHK(appFileInfo.GetSupportedTypes(&types) == B_OK);
CHK(SupportedTypesValue(types) == SupportedTypesValue(testTypes1));
CHK(appFileInfo.IsSupportedType(testType1) == true);
CHK(appFileInfo.IsSupportedType(testType2) == true);
CHK(appFileInfo.Supports(&mimeTestType1) == true);
CHK(appFileInfo.Supports(&mimeTestType2) == true);
CheckSupportedTypesAttr(file, &testTypes1);
SyncResources(appFileInfo);
CheckSupportedTypesResource(file, &testTypes1);
CHK(BMimeType(testType1).IsInstalled() == false);
CHK(BMimeType(testType2).IsInstalled() == false);
CHK(BMimeType(testType3).IsInstalled() == false);
CHK(BMimeType(testType4).IsInstalled() == false);
#ifdef TEST_R5
CHK(appFileInfo.SetSupportedTypes(&testTypes2) == B_ENTRY_NOT_FOUND);
#else
CHK(appFileInfo.SetSupportedTypes(&testTypes2) == B_OK);
#endif
CHK(appFileInfo.GetSupportedTypes(&types) == B_OK);
CHK(SupportedTypesValue(types) == SupportedTypesValue(testTypes2));
CHK(appFileInfo.IsSupportedType(testType1) == false);
CHK(appFileInfo.IsSupportedType(testType2) == false);
CHK(appFileInfo.IsSupportedType(testType3) == true);
CHK(appFileInfo.IsSupportedType(testType4) == true);
CHK(appFileInfo.Supports(&mimeTestType1) == false);
CHK(appFileInfo.Supports(&mimeTestType2) == false);
CHK(appFileInfo.Supports(&mimeTestType3) == true);
CHK(appFileInfo.Supports(&mimeTestType4) == true);
CheckSupportedTypesAttr(file, &testTypes2);
SyncResources(appFileInfo);
CheckSupportedTypesResource(file, &testTypes2);
CHK(BMimeType(testType1).IsInstalled() == false);
CHK(BMimeType(testType2).IsInstalled() == false);
CHK(BMimeType(testType3).IsInstalled() == false);
#ifndef TEST_R5
CHK(BMimeType(testType4).IsInstalled() == false);
#endif
}
NextSubTest();
{
BMimeType(testType1).Delete();
BMimeType(testType2).Delete();
BMimeType(testType3).Delete();
BMimeType(testType4).Delete();
BMimeType(testAppSignature1).Delete();
CHK(BEntry(testFile1).Remove() == B_OK);
BFile file(testFile1, B_READ_WRITE | B_CREATE_FILE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(BMimeType(testType1).IsInstalled() == false);
CHK(BMimeType(testType2).IsInstalled() == false);
CHK(appFileInfo.SetSupportedTypes(&testTypes1, true)
== B_ENTRY_NOT_FOUND);
BMessage types;
CHK(appFileInfo.GetSupportedTypes(&types) == B_ENTRY_NOT_FOUND);
CHK(appFileInfo.IsSupportedType(testType1) == false);
CHK(appFileInfo.IsSupportedType(testType2) == false);
CHK(appFileInfo.Supports(&mimeTestType1) == false);
CHK(appFileInfo.Supports(&mimeTestType2) == false);
CheckNoAttr(file, kSupportedTypesAttribute);
SyncResources(appFileInfo);
CheckNoResource(file, kSupportedTypesAttribute);
CHK(BMimeType(testType1).IsInstalled() == false);
CHK(BMimeType(testType2).IsInstalled() == false);
CHK(BMimeType(testType1).IsInstalled() == false);
CHK(BMimeType(testType2).IsInstalled() == false);
CHK(appFileInfo.SetSupportedTypes(&testTypes1) == B_ENTRY_NOT_FOUND);
CHK(appFileInfo.GetSupportedTypes(&types) == B_ENTRY_NOT_FOUND);
CHK(appFileInfo.IsSupportedType(testType1) == false);
CHK(appFileInfo.IsSupportedType(testType2) == false);
CHK(appFileInfo.Supports(&mimeTestType1) == false);
CHK(appFileInfo.Supports(&mimeTestType2) == false);
CheckNoAttr(file, kSupportedTypesAttribute);
SyncResources(appFileInfo);
CheckNoResource(file, kSupportedTypesAttribute);
CHK(BMimeType(testType1).IsInstalled() == false);
CHK(BMimeType(testType2).IsInstalled() == false);
}
NextSubTest();
{
BMimeType(testType1).Delete();
BMimeType(testType2).Delete();
BMimeType(testType3).Delete();
BMimeType(testType4).Delete();
BMimeType(testAppSignature1).Delete();
CHK(BMimeType(testAppSignature1).Install() == B_OK);
CHK(BEntry(testFile1).Remove() == B_OK);
BFile file(testFile1, B_READ_WRITE | B_CREATE_FILE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetSignature(testAppSignature1) == B_OK);
CHK(appFileInfo.SetSupportedTypes(&testTypes1) == B_OK);
BMessage types;
CHK(appFileInfo.GetSupportedTypes(&types) == B_OK);
CHK(SupportedTypesValue(types) == SupportedTypesValue(testTypes1));
CHK(appFileInfo.IsSupportedType(testType1) == true);
CHK(appFileInfo.IsSupportedType(testType2) == true);
CHK(appFileInfo.Supports(&mimeTestType1) == true);
CHK(appFileInfo.Supports(&mimeTestType2) == true);
CheckSupportedTypesAttr(file, &testTypes1);
SyncResources(appFileInfo);
CheckSupportedTypesResource(file, &testTypes1);
CHK(IsSupportingApp(testType1, testAppSignature1) == true);
CHK(IsSupportingApp(testType2, testAppSignature1) == true);
appFileInfo.SetTo(NULL);
file.Unset();
CHK(BEntry(testFile1).Remove() == B_OK);
CHK(file.SetTo(testFile1, B_READ_WRITE | B_CREATE_FILE) == B_OK);
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetSignature(testAppSignature1) == B_OK);
BMessage types2;
CHK(appFileInfo.GetSupportedTypes(&types2) == B_ENTRY_NOT_FOUND);
CHK(appFileInfo.IsSupportedType(testType1) == false);
CHK(appFileInfo.IsSupportedType(testType2) == false);
CHK(appFileInfo.Supports(&mimeTestType1) == false);
CHK(appFileInfo.Supports(&mimeTestType2) == false);
CheckNoAttr(file, kSupportedTypesAttribute);
SyncResources(appFileInfo);
CheckNoResource(file, kSupportedTypesAttribute);
CHK(IsSupportingApp(testType1, testAppSignature1) == true);
CHK(IsSupportingApp(testType2, testAppSignature1) == true);
}
}
void
AppFileInfoTest::IconTest()
{
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.GetIcon(NULL, B_MINI_ICON) == B_BAD_VALUE);
CHK(appFileInfo.GetIcon(NULL, B_LARGE_ICON) == B_BAD_VALUE);
}
NextSubTest();
{
BAppFileInfo appFileInfo;
BBitmap icon(BRect(0, 0, 15, 15), B_CMAP8);
CHK(appFileInfo.GetIcon(&icon, B_MINI_ICON) == B_NO_INIT);
BBitmap icon2(BRect(0, 0, 31, 31), B_CMAP8);
CHK(appFileInfo.GetIcon(&icon2, B_LARGE_ICON) == B_NO_INIT);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
BBitmap icon(BRect(0, 0, 31, 31), B_CMAP8);
CHK(appFileInfo.GetIcon(&icon, B_MINI_ICON) == B_BAD_VALUE);
BBitmap icon2(BRect(0, 0, 15, 15), B_CMAP8);
CHK(appFileInfo.GetIcon(&icon2, B_LARGE_ICON) == B_BAD_VALUE);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
BBitmap icon(BRect(0, 0, 15, 15), B_CMAP8);
CHK(appFileInfo.GetIcon(&icon, B_MINI_ICON) == B_ENTRY_NOT_FOUND);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetIcon(fIconM1, B_MINI_ICON) == B_OK);
BBitmap icon(BRect(0, 0, 15, 15), B_CMAP8);
CHK(appFileInfo.GetIcon(&icon, B_MINI_ICON) == B_OK);
CHK(icon_equal(fIconM1, &icon));
CheckIconAttr(file, fIconM1);
SyncResources(appFileInfo);
CheckIconResource(file, fIconM1);
CHK(appFileInfo.SetIcon(fIconM2, B_MINI_ICON) == B_OK);
BBitmap icon2(BRect(0, 0, 15, 15), B_CMAP8);
CHK(appFileInfo.GetIcon(&icon2, B_MINI_ICON) == B_OK);
CHK(icon_equal(fIconM2, &icon2));
CheckIconAttr(file, fIconM2);
SyncResources(appFileInfo);
CheckIconResource(file, fIconM2);
CHK(appFileInfo.SetIcon(fIconL1, B_LARGE_ICON) == B_OK);
BBitmap icon3(BRect(0, 0, 31, 31), B_CMAP8);
CHK(appFileInfo.GetIcon(&icon3, B_LARGE_ICON) == B_OK);
CHK(icon_equal(fIconL1, &icon3));
CheckIconAttr(file, fIconL1);
SyncResources(appFileInfo);
CheckIconResource(file, fIconL1);
CHK(appFileInfo.SetIcon(fIconL2, B_LARGE_ICON) == B_OK);
BBitmap icon4(BRect(0, 0, 31, 31), B_CMAP8);
CHK(appFileInfo.GetIcon(&icon4, B_LARGE_ICON) == B_OK);
CHK(icon_equal(fIconL2, &icon4));
CheckIconAttr(file, fIconL2);
SyncResources(appFileInfo);
CheckIconResource(file, fIconL2);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
BBitmap icon(BRect(0, 0, 15, 15), B_RGB32);
CHK(appFileInfo.GetIcon(&icon, B_MINI_ICON) == B_OK);
BBitmap icon2(BRect(0, 0, 15, 15), B_RGB32);
icon2.SetBits(fIconM2->Bits(), fIconM2->BitsLength(), 0, B_CMAP8);
CHK(icon_equal(&icon, &icon2));
#ifndef TEST_R5
BBitmap icon3(BRect(0, 0, 31, 31), B_RGB32);
CHK(appFileInfo.GetIcon(&icon3, B_LARGE_ICON) == B_OK);
BBitmap icon4(BRect(0, 0, 31, 31), B_RGB32);
icon4.SetBits(fIconL2->Bits(), fIconL2->BitsLength(), 0, B_CMAP8);
CHK(icon_equal(&icon3, &icon4));
#endif
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetIcon(NULL, B_MINI_ICON) == B_OK);
BBitmap icon(BRect(0, 0, 15, 15), B_CMAP8);
CHK(appFileInfo.GetIcon(&icon, B_MINI_ICON) == B_ENTRY_NOT_FOUND);
CheckNoAttr(file, kMiniIconAttribute);
SyncResources(appFileInfo);
CheckNoResource(file, kMiniIconAttribute);
CHK(appFileInfo.SetIcon(NULL, B_LARGE_ICON) == B_OK);
BBitmap icon2(BRect(0, 0, 31, 31), B_CMAP8);
CHK(appFileInfo.GetIcon(&icon2, B_LARGE_ICON) == B_ENTRY_NOT_FOUND);
CheckNoAttr(file, kLargeIconAttribute);
SyncResources(appFileInfo);
CheckNoResource(file, kLargeIconAttribute);
}
NextSubTest();
{
BAppFileInfo appFileInfo;
BBitmap icon(BRect(0, 0, 15, 15), B_CMAP8);
CHK(appFileInfo.SetIcon(&icon, B_MINI_ICON) == B_NO_INIT);
BBitmap icon2(BRect(0, 0, 31, 31), B_CMAP8);
CHK(appFileInfo.SetIcon(&icon2, B_LARGE_ICON) == B_NO_INIT);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
BBitmap icon(BRect(0, 0, 31, 31), B_CMAP8);
CHK(appFileInfo.SetIcon(&icon, B_MINI_ICON) == B_BAD_VALUE);
BBitmap icon2(BRect(0, 0, 15, 15), B_CMAP8);
CHK(appFileInfo.SetIcon(&icon2, B_LARGE_ICON) == B_BAD_VALUE);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
BMimeType mimeType(testAppSignature1);
CHK(mimeType.IsInstalled() == false);
CHK(appFileInfo.SetSignature(testAppSignature1) == B_OK);
CHK(appFileInfo.SetIcon(fIconM1, B_MINI_ICON) == B_OK);
CHK(appFileInfo.SetIcon(fIconL1, B_LARGE_ICON) == B_OK);
CHK(mimeType.IsInstalled() == true);
BBitmap icon(BRect(0, 0, 15, 15), B_CMAP8);
CHK(mimeType.GetIcon(&icon, B_MINI_ICON) == B_OK);
CHK(icon_equal(fIconM1, &icon));
BBitmap icon2(BRect(0, 0, 31, 31), B_CMAP8);
CHK(mimeType.GetIcon(&icon2, B_LARGE_ICON) == B_OK);
CHK(icon_equal(fIconL1, &icon2));
CHK(appFileInfo.SetIcon(fIconM2, B_MINI_ICON) == B_OK);
CHK(appFileInfo.SetIcon(fIconL2, B_LARGE_ICON) == B_OK);
BBitmap icon3(BRect(0, 0, 15, 15), B_CMAP8);
CHK(mimeType.GetIcon(&icon3, B_MINI_ICON) == B_OK);
CHK(icon_equal(fIconM2, &icon3));
BBitmap icon4(BRect(0, 0, 31, 31), B_CMAP8);
CHK(mimeType.GetIcon(&icon4, B_LARGE_ICON) == B_OK);
CHK(icon_equal(fIconL2, &icon4));
}
}
void
AppFileInfoTest::VersionInfoTest()
{
version_info testInfo1 = { 1, 1, 1, 1, 1, "short1", "long1" };
version_info testInfo2 = { 2, 2, 2, 2, 2, "short2", "long2" };
version_info testInfo3 = { 3, 3, 3, 3, 3, "short3", "long3" };
version_info testInfo4 = { 4, 4, 4, 4, 4, "short4", "long4" };
NextSubTest();
{
BAppFileInfo appFileInfo;
version_info info;
CHK(appFileInfo.GetVersionInfo(&info, B_APP_VERSION_KIND)
== B_NO_INIT);
version_info info2;
CHK(appFileInfo.GetVersionInfo(&info2, B_SYSTEM_VERSION_KIND)
== B_NO_INIT);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
version_info info;
CHK(appFileInfo.GetVersionInfo(&info, B_APP_VERSION_KIND)
== B_ENTRY_NOT_FOUND);
version_info info2;
CHK(appFileInfo.GetVersionInfo(&info2, B_SYSTEM_VERSION_KIND)
== B_ENTRY_NOT_FOUND);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetVersionInfo(&testInfo1, B_APP_VERSION_KIND)
== B_OK);
version_info info;
CHK(appFileInfo.GetVersionInfo(&info, B_APP_VERSION_KIND) == B_OK);
CHK(info == testInfo1);
CHK(appFileInfo.GetVersionInfo(&info, B_SYSTEM_VERSION_KIND) == B_OK);
CHK(appFileInfo.SetVersionInfo(&testInfo2, B_SYSTEM_VERSION_KIND)
== B_OK);
CHK(appFileInfo.GetVersionInfo(&info, B_APP_VERSION_KIND) == B_OK);
CHK(info == testInfo1);
CHK(appFileInfo.GetVersionInfo(&info, B_SYSTEM_VERSION_KIND) == B_OK);
CHK(info == testInfo2);
version_info testInfos1[] = { testInfo1, testInfo2 };
CheckVersionInfoAttr(file, testInfos1);
SyncResources(appFileInfo);
CheckVersionInfoResource(file, testInfos1);
CHK(appFileInfo.SetVersionInfo(&testInfo3, B_APP_VERSION_KIND)
== B_OK);
CHK(appFileInfo.GetVersionInfo(&info, B_APP_VERSION_KIND) == B_OK);
CHK(info == testInfo3);
CHK(appFileInfo.GetVersionInfo(&info, B_SYSTEM_VERSION_KIND) == B_OK);
CHK(info == testInfo2);
version_info testInfos2[] = { testInfo3, testInfo2 };
CheckVersionInfoAttr(file, testInfos2);
SyncResources(appFileInfo);
CheckVersionInfoResource(file, testInfos2);
CHK(appFileInfo.SetVersionInfo(&testInfo4, B_SYSTEM_VERSION_KIND)
== B_OK);
CHK(appFileInfo.GetVersionInfo(&info, B_APP_VERSION_KIND) == B_OK);
CHK(info == testInfo3);
CHK(appFileInfo.GetVersionInfo(&info, B_SYSTEM_VERSION_KIND) == B_OK);
CHK(info == testInfo4);
version_info testInfos3[] = { testInfo3, testInfo4 };
CheckVersionInfoAttr(file, testInfos3);
SyncResources(appFileInfo);
CheckVersionInfoResource(file, testInfos3);
}
#ifndef TEST_R5
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(equals(appFileInfo.GetVersionInfo(NULL, B_APP_VERSION_KIND),
B_BAD_ADDRESS, B_BAD_VALUE));
CHK(equals(appFileInfo.GetVersionInfo(NULL, B_SYSTEM_VERSION_KIND),
B_BAD_ADDRESS, B_BAD_VALUE));
}
#endif
#ifndef TEST_R5
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetVersionInfo(NULL, B_APP_VERSION_KIND)
== B_OK);
version_info info;
CHK(appFileInfo.GetVersionInfo(&info, B_APP_VERSION_KIND)
== B_ENTRY_NOT_FOUND);
CHK(appFileInfo.GetVersionInfo(&info, B_SYSTEM_VERSION_KIND)
== B_ENTRY_NOT_FOUND);
CheckNoAttr(file, kVersionInfoAttribute);
SyncResources(appFileInfo);
CheckNoResource(file, kVersionInfoAttribute);
CHK(appFileInfo.SetVersionInfo(&testInfo1, B_APP_VERSION_KIND)
== B_OK);
CHK(appFileInfo.SetVersionInfo(&testInfo1, B_SYSTEM_VERSION_KIND)
== B_OK);
CHK(appFileInfo.SetVersionInfo(NULL, B_SYSTEM_VERSION_KIND) == B_OK);
CHK(appFileInfo.GetVersionInfo(&info, B_APP_VERSION_KIND)
== B_ENTRY_NOT_FOUND);
CHK(appFileInfo.GetVersionInfo(&info, B_SYSTEM_VERSION_KIND)
== B_ENTRY_NOT_FOUND);
CheckNoAttr(file, kVersionInfoAttribute);
SyncResources(appFileInfo);
CheckNoResource(file, kVersionInfoAttribute);
}
#endif
NextSubTest();
{
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetVersionInfo(&testInfo1, B_APP_VERSION_KIND)
== B_NO_INIT);
CHK(appFileInfo.GetVersionInfo(&testInfo1, B_SYSTEM_VERSION_KIND)
== B_NO_INIT);
}
}
void
AppFileInfoTest::IconForTypeTest()
{
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.GetIconForType(testType1, NULL, B_MINI_ICON)
== B_BAD_VALUE);
CHK(appFileInfo.GetIconForType(testType1, NULL, B_LARGE_ICON)
== B_BAD_VALUE);
}
NextSubTest();
{
BAppFileInfo appFileInfo;
BBitmap icon(BRect(0, 0, 15, 15), B_CMAP8);
CHK(appFileInfo.GetIconForType(testType1, &icon, B_MINI_ICON)
== B_NO_INIT);
BBitmap icon2(BRect(0, 0, 31, 31), B_CMAP8);
CHK(appFileInfo.GetIconForType(testType1, &icon2, B_LARGE_ICON)
== B_NO_INIT);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
BBitmap icon(BRect(0, 0, 31, 31), B_CMAP8);
CHK(appFileInfo.GetIconForType(testType1, &icon, B_MINI_ICON)
== B_BAD_VALUE);
BBitmap icon2(BRect(0, 0, 15, 15), B_CMAP8);
CHK(appFileInfo.GetIconForType(testType1, &icon2, B_LARGE_ICON)
== B_BAD_VALUE);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
BBitmap icon(BRect(0, 0, 15, 15), B_CMAP8);
CHK(appFileInfo.GetIconForType(testType1, &icon, B_MINI_ICON)
== B_ENTRY_NOT_FOUND);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetIconForType(testType1, fIconM1, B_MINI_ICON)
== B_OK);
BBitmap icon(BRect(0, 0, 15, 15), B_CMAP8);
CHK(appFileInfo.GetIconForType(testType1, &icon, B_MINI_ICON) == B_OK);
CHK(icon_equal(fIconM1, &icon));
CheckIconForTypeAttr(file, testType1, fIconM1);
SyncResources(appFileInfo);
CheckIconForTypeResource(file, testType1, fIconM1);
CHK(appFileInfo.SetIconForType(testType1, fIconM2, B_MINI_ICON)
== B_OK);
BBitmap icon2(BRect(0, 0, 15, 15), B_CMAP8);
CHK(appFileInfo.GetIconForType(testType1, &icon2, B_MINI_ICON)
== B_OK);
CHK(icon_equal(fIconM2, &icon2));
CheckIconForTypeAttr(file, testType1, fIconM2);
SyncResources(appFileInfo);
CheckIconForTypeResource(file, testType1, fIconM2);
CHK(appFileInfo.SetIconForType(testType1, fIconL1, B_LARGE_ICON)
== B_OK);
BBitmap icon3(BRect(0, 0, 31, 31), B_CMAP8);
CHK(appFileInfo.GetIconForType(testType1, &icon3, B_LARGE_ICON)
== B_OK);
CHK(icon_equal(fIconL1, &icon3));
CheckIconForTypeAttr(file, testType1, fIconL1);
SyncResources(appFileInfo);
CheckIconForTypeResource(file, testType1, fIconL1);
CHK(appFileInfo.SetIconForType(testType1, fIconL2, B_LARGE_ICON)
== B_OK);
BBitmap icon4(BRect(0, 0, 31, 31), B_CMAP8);
CHK(appFileInfo.GetIconForType(testType1, &icon4, B_LARGE_ICON)
== B_OK);
CHK(icon_equal(fIconL2, &icon4));
CheckIconForTypeAttr(file, testType1, fIconL2);
SyncResources(appFileInfo);
CheckIconForTypeResource(file, testType1, fIconL2);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
BBitmap icon(BRect(0, 0, 15, 15), B_RGB32);
CHK(appFileInfo.GetIconForType(testType1, &icon, B_MINI_ICON) == B_OK);
BBitmap icon2(BRect(0, 0, 15, 15), B_RGB32);
icon2.SetBits(fIconM2->Bits(), fIconM2->BitsLength(), 0, B_CMAP8);
CHK(icon_equal(&icon, &icon2));
#ifndef TEST_R5
BBitmap icon3(BRect(0, 0, 31, 31), B_RGB32);
CHK(appFileInfo.GetIconForType(testType1, &icon3, B_LARGE_ICON)
== B_OK);
BBitmap icon4(BRect(0, 0, 31, 31), B_RGB32);
icon4.SetBits(fIconL2->Bits(), fIconL2->BitsLength(), 0, B_CMAP8);
CHK(icon_equal(&icon3, &icon4));
#endif
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetIconForType(testType1, NULL, B_MINI_ICON) == B_OK);
BBitmap icon(BRect(0, 0, 15, 15), B_CMAP8);
CHK(appFileInfo.GetIconForType(testType1, &icon, B_MINI_ICON)
== B_ENTRY_NOT_FOUND);
CheckNoIconForTypeAttr(file, testType1, B_MINI_ICON);
SyncResources(appFileInfo);
CheckNoIconForTypeResource(file, testType1, B_MINI_ICON);
CHK(appFileInfo.SetIconForType(testType1, NULL, B_LARGE_ICON) == B_OK);
BBitmap icon2(BRect(0, 0, 31, 31), B_CMAP8);
CHK(appFileInfo.GetIconForType(testType1, &icon2, B_LARGE_ICON)
== B_ENTRY_NOT_FOUND);
CheckNoIconForTypeAttr(file, testType1, B_LARGE_ICON);
SyncResources(appFileInfo);
CheckNoIconForTypeResource(file, testType1, B_LARGE_ICON);
}
NextSubTest();
{
BAppFileInfo appFileInfo;
BBitmap icon(BRect(0, 0, 15, 15), B_CMAP8);
CHK(appFileInfo.SetIconForType(testType1, &icon, B_MINI_ICON)
== B_NO_INIT);
BBitmap icon2(BRect(0, 0, 31, 31), B_CMAP8);
CHK(appFileInfo.SetIconForType(testType1, &icon2, B_LARGE_ICON)
== B_NO_INIT);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
BBitmap icon(BRect(0, 0, 31, 31), B_CMAP8);
CHK(appFileInfo.SetIconForType(testType1, &icon, B_MINI_ICON)
== B_BAD_VALUE);
BBitmap icon2(BRect(0, 0, 15, 15), B_CMAP8);
CHK(appFileInfo.SetIconForType(testType1, &icon2, B_LARGE_ICON)
== B_BAD_VALUE);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetIconForType(NULL, fIconM1, B_MINI_ICON) == B_OK);
CHK(appFileInfo.SetIconForType(NULL, fIconL1, B_LARGE_ICON) == B_OK);
BBitmap icon(BRect(0, 0, 15, 15), B_CMAP8);
CHK(appFileInfo.GetIcon(&icon, B_MINI_ICON) == B_OK);
CHK(icon_equal(fIconM1, &icon));
CheckIconAttr(file, fIconM1);
SyncResources(appFileInfo);
CheckIconResource(file, fIconM1);
BBitmap icon2(BRect(0, 0, 31, 31), B_CMAP8);
CHK(appFileInfo.GetIcon(&icon2, B_LARGE_ICON) == B_OK);
CHK(icon_equal(fIconL1, &icon2));
CheckIconAttr(file, fIconL1);
SyncResources(appFileInfo);
CheckIconResource(file, fIconL1);
BBitmap icon3(BRect(0, 0, 15, 15), B_CMAP8);
CHK(appFileInfo.GetIconForType(NULL, &icon3, B_MINI_ICON) == B_OK);
CHK(icon_equal(fIconM1, &icon3));
CheckIconAttr(file, fIconM1);
SyncResources(appFileInfo);
CheckIconResource(file, fIconM1);
BBitmap icon4(BRect(0, 0, 31, 31), B_CMAP8);
CHK(appFileInfo.GetIconForType(NULL, &icon4, B_LARGE_ICON) == B_OK);
CHK(icon_equal(fIconL1, &icon4));
CheckIconAttr(file, fIconL1);
SyncResources(appFileInfo);
CheckIconResource(file, fIconL1);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetIconForType(testType1, fIconM1, B_MINI_ICON)
== B_OK);
CHK(appFileInfo.SetIconForType(testType1, fIconL1, B_LARGE_ICON)
== B_OK);
CHK(appFileInfo.SetIconForType(testType2, fIconM2, B_MINI_ICON)
== B_OK);
CHK(appFileInfo.SetIconForType(testType2, fIconL2, B_LARGE_ICON)
== B_OK);
BBitmap icon(BRect(0, 0, 15, 15), B_CMAP8);
CHK(appFileInfo.GetIconForType(testType1, &icon, B_MINI_ICON)
== B_OK);
CHK(icon_equal(fIconM1, &icon));
CheckIconForTypeAttr(file, testType1, fIconM1);
SyncResources(appFileInfo);
CheckIconForTypeResource(file, testType1, fIconM1);
BBitmap icon2(BRect(0, 0, 31, 31), B_CMAP8);
CHK(appFileInfo.GetIconForType(testType1, &icon2, B_LARGE_ICON)
== B_OK);
CHK(icon_equal(fIconL1, &icon2));
CheckIconForTypeAttr(file, testType1, fIconL1);
SyncResources(appFileInfo);
CheckIconForTypeResource(file, testType1, fIconL1);
BBitmap icon3(BRect(0, 0, 15, 15), B_CMAP8);
CHK(appFileInfo.GetIconForType(testType2, &icon3, B_MINI_ICON)
== B_OK);
CHK(icon_equal(fIconM2, &icon3));
CheckIconForTypeAttr(file, testType2, fIconM2);
SyncResources(appFileInfo);
CheckIconForTypeResource(file, testType2, fIconM2,
kMiniIconForTypeResourceID + 1);
BBitmap icon4(BRect(0, 0, 31, 31), B_CMAP8);
CHK(appFileInfo.GetIconForType(testType2, &icon4, B_LARGE_ICON)
== B_OK);
CHK(icon_equal(fIconL2, &icon4));
CheckIconForTypeAttr(file, testType2, fIconL2);
SyncResources(appFileInfo);
CheckIconForTypeResource(file, testType2, fIconL2,
kLargeIconForTypeResourceID + 1);
CHK(appFileInfo.SetIconForType(testType1, NULL, B_MINI_ICON) == B_OK);
CHK(appFileInfo.SetIconForType(testType1, NULL, B_LARGE_ICON) == B_OK);
CHK(appFileInfo.SetIconForType(testType2, NULL, B_MINI_ICON) == B_OK);
CHK(appFileInfo.SetIconForType(testType2, NULL, B_LARGE_ICON) == B_OK);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetIconForType(invalidTestType, fIconM1, B_MINI_ICON)
== B_BAD_VALUE);
CHK(appFileInfo.SetIconForType(invalidTestType, fIconL1, B_LARGE_ICON)
== B_BAD_VALUE);
BBitmap icon(BRect(0, 0, 15, 15), B_CMAP8);
CHK(appFileInfo.GetIconForType(invalidTestType, &icon, B_MINI_ICON)
== B_BAD_VALUE);
CheckNoIconForTypeAttr(file, invalidTestType, B_LARGE_ICON);
CheckNoIconForTypeResource(file, invalidTestType, B_LARGE_ICON);
BBitmap icon3(BRect(0, 0, 31, 31), B_CMAP8);
CHK(appFileInfo.GetIconForType(invalidTestType, &icon3, B_LARGE_ICON)
== B_BAD_VALUE);
CheckNoIconForTypeAttr(file, invalidTestType, B_MINI_ICON);
CheckNoIconForTypeResource(file, invalidTestType, B_MINI_ICON);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetIconForType(tooLongTestType, fIconM1, B_MINI_ICON)
== B_BAD_VALUE);
CHK(appFileInfo.SetIconForType(tooLongTestType, fIconL1, B_LARGE_ICON)
== B_BAD_VALUE);
}
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
BMimeType mimeType(testAppSignature1);
CHK(mimeType.IsInstalled() == false);
CHK(appFileInfo.SetSignature(testAppSignature1) == B_OK);
CHK(appFileInfo.SetIconForType(testType1, fIconM1, B_MINI_ICON)
== B_OK);
CHK(appFileInfo.SetIconForType(testType1, fIconL1, B_LARGE_ICON)
== B_OK);
CHK(mimeType.IsInstalled() == true);
CHK(BMimeType(testType1).IsInstalled() == false);
BBitmap icon(BRect(0, 0, 15, 15), B_CMAP8);
CHK(mimeType.GetIconForType(testType1, &icon, B_MINI_ICON)
== B_OK);
CHK(icon_equal(fIconM1, &icon));
BBitmap icon2(BRect(0, 0, 31, 31), B_CMAP8);
CHK(mimeType.GetIconForType(testType1, &icon2, B_LARGE_ICON)
== B_OK);
CHK(icon_equal(fIconL1, &icon2));
CHK(appFileInfo.SetIconForType(testType1, fIconM2, B_MINI_ICON)
== B_OK);
CHK(appFileInfo.SetIconForType(testType1, fIconL2, B_LARGE_ICON)
== B_OK);
BBitmap icon3(BRect(0, 0, 15, 15), B_CMAP8);
CHK(mimeType.GetIconForType(testType1, &icon3, B_MINI_ICON)
== B_OK);
CHK(icon_equal(fIconM2, &icon3));
BBitmap icon4(BRect(0, 0, 31, 31), B_CMAP8);
CHK(mimeType.GetIconForType(testType1, &icon4, B_LARGE_ICON)
== B_OK);
CHK(icon_equal(fIconL2, &icon4));
}
}
template<typename Value, typename Setter, typename Getter, typename Checker>
static
void
InfoLocationTester(const Value &testValue1, const Value &testValue2,
const Value &testValue3)
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.InitCheck() == B_OK);
CHK(appFileInfo.IsUsingAttributes() == true);
CHK(appFileInfo.IsUsingResources() == true);
CHK(Setter::Set(appFileInfo, testValue1) == B_OK);
CHK(appFileInfo.IsUsingAttributes() == true);
CHK(appFileInfo.IsUsingResources() == true);
SyncResources(appFileInfo);
Value value;
CHK(Getter::Get(appFileInfo, value) == B_OK);
CHK(value == testValue1);
Checker::CheckAttribute(file, testValue1);
Checker::CheckResource(file, testValue1);
appFileInfo.SetInfoLocation(B_USE_ATTRIBUTES);
CHK(appFileInfo.IsUsingAttributes() == true);
CHK(appFileInfo.IsUsingResources() == false);
CHK(Setter::Set(appFileInfo, testValue2) == B_OK);
SyncResources(appFileInfo);
Value value1;
CHK(Getter::Get(appFileInfo, value1) == B_OK);
CHK(value1 == testValue2);
Checker::CheckAttribute(file, testValue2);
Checker::CheckResource(file, testValue1);
appFileInfo.SetInfoLocation(B_USE_BOTH_LOCATIONS);
CHK(appFileInfo.IsUsingAttributes() == true);
CHK(appFileInfo.IsUsingResources() == true);
Value value2;
CHK(Getter::Get(appFileInfo, value2) == B_OK);
CHK(value2 == testValue2);
appFileInfo.SetInfoLocation(B_USE_RESOURCES);
CHK(appFileInfo.IsUsingAttributes() == false);
CHK(appFileInfo.IsUsingResources() == true);
CHK(Setter::Set(appFileInfo, testValue3) == B_OK);
SyncResources(appFileInfo);
Value value3;
CHK(Getter::Get(appFileInfo, value3) == B_OK);
CHK(value3 == testValue3);
Checker::CheckAttribute(file, testValue2);
Checker::CheckResource(file, testValue3);
}
void
AppFileInfoTest::InfoLocationTest()
{
NextSubTest();
InfoLocationTester<TypeValue, TypeSetter, TypeGetter, TypeChecker>(
TypeValue(testType1), TypeValue(testType2), TypeValue(testType3));
NextSubTest();
InfoLocationTester<SignatureValue, SignatureSetter, SignatureGetter,
SignatureChecker>(
SignatureValue(testAppSignature1), SignatureValue(testAppSignature2),
SignatureValue(testAppSignature3));
NextSubTest();
InfoLocationTester<AppFlagsValue, AppFlagsSetter, AppFlagsGetter,
AppFlagsChecker>(
AppFlagsValue(B_SINGLE_LAUNCH | B_ARGV_ONLY),
AppFlagsValue(B_EXCLUSIVE_LAUNCH | B_BACKGROUND_APP),
AppFlagsValue(B_MULTIPLE_LAUNCH));
NextSubTest();
{
BFile file(testFile1, B_READ_WRITE);
BAppFileInfo appFileInfo;
CHK(appFileInfo.SetTo(&file) == B_OK);
CHK(appFileInfo.SetSignature(testAppSignature1) == B_OK);
BMimeType type(testAppSignature1);
if (!type.IsInstalled())
CHK(type.Install() == B_OK);
}
const char *supportedTypes1[] = { testType1 };
const char *supportedTypes2[] = { testType2, testType3 };
const char *supportedTypes3[] = { testType3, testType2, testType1 };
InfoLocationTester<SupportedTypesValue, SupportedTypesSetter,
SupportedTypesGetter, SupportedTypesChecker>(
SupportedTypesValue(supportedTypes1, 1),
SupportedTypesValue(supportedTypes2, 2),
SupportedTypesValue(supportedTypes3, 3));
NextSubTest();
InfoLocationTester<IconValue, IconSetter, IconGetter, IconChecker>(
IconValue(fIconM1, fIconL1),
IconValue(fIconM2, fIconL2),
IconValue(fIconM3, fIconL3));
NextSubTest();
version_info versionInfo1 = { 1, 1, 1, 1, 1, "short1", "long1" };
version_info versionInfo2 = { 2, 2, 2, 2, 2, "short2", "long2" };
version_info versionInfo3 = { 3, 3, 3, 3, 3, "short3", "long3" };
InfoLocationTester<VersionInfoValue, VersionInfoSetter, VersionInfoGetter,
VersionInfoChecker>(
VersionInfoValue(versionInfo1, versionInfo1),
VersionInfoValue(versionInfo2, versionInfo2),
VersionInfoValue(versionInfo3, versionInfo3));
NextSubTest();
InfoLocationTester<IconForTypeValue, IconForTypeSetter, IconForTypeGetter,
IconForTypeChecker>(
IconForTypeValue(fIconM1, fIconL1),
IconForTypeValue(fIconM2, fIconL2),
IconForTypeValue(fIconM3, fIconL3));
}