152a38012Sejakowatz // SymLinkTest.cpp
252a38012Sejakowatz
352a38012Sejakowatz #include <stdio.h>
477aa0e2aSOliver Tappe #include <string.h>
577aa0e2aSOliver Tappe
652a38012Sejakowatz #include <string>
777aa0e2aSOliver Tappe using std::string;
852a38012Sejakowatz
952a38012Sejakowatz #include <Directory.h>
1052a38012Sejakowatz #include <Entry.h>
1152a38012Sejakowatz #include <Path.h>
1252a38012Sejakowatz #include <SymLink.h>
1352a38012Sejakowatz
1452a38012Sejakowatz #include "SymLinkTest.h"
1552a38012Sejakowatz
1652a38012Sejakowatz // Suite
1752a38012Sejakowatz SymLinkTest::Test*
Suite()1852a38012Sejakowatz SymLinkTest::Suite()
1952a38012Sejakowatz {
2052a38012Sejakowatz CppUnit::TestSuite *suite = new CppUnit::TestSuite();
2152a38012Sejakowatz typedef CppUnit::TestCaller<SymLinkTest> TC;
2252a38012Sejakowatz
2352a38012Sejakowatz NodeTest::AddBaseClassTests<SymLinkTest>("BSymLink::", suite);
2452a38012Sejakowatz
2552a38012Sejakowatz suite->addTest( new TC("BSymLink::Init Test 1", &SymLinkTest::InitTest1) );
2652a38012Sejakowatz suite->addTest( new TC("BSymLink::Init Test 2", &SymLinkTest::InitTest2) );
2752a38012Sejakowatz suite->addTest( new TC("BSymLink::ReadLink Test",
2852a38012Sejakowatz &SymLinkTest::ReadLinkTest) );
2952a38012Sejakowatz suite->addTest( new TC("BSymLink::MakeLinkedPath Test",
3052a38012Sejakowatz &SymLinkTest::MakeLinkedPathTest) );
3152a38012Sejakowatz suite->addTest( new TC("BSymLink::IsAbsolute Test",
3252a38012Sejakowatz &SymLinkTest::IsAbsoluteTest) );
3352a38012Sejakowatz suite->addTest( new TC("BSymLink::Assignment Test",
3452a38012Sejakowatz &SymLinkTest::AssignmentTest) );
3552a38012Sejakowatz
3652a38012Sejakowatz return suite;
3752a38012Sejakowatz }
3852a38012Sejakowatz
3952a38012Sejakowatz // CreateRONodes
4052a38012Sejakowatz void
CreateRONodes(TestNodes & testEntries)4152a38012Sejakowatz SymLinkTest::CreateRONodes(TestNodes& testEntries)
4252a38012Sejakowatz {
4352a38012Sejakowatz testEntries.clear();
4452a38012Sejakowatz const char *filename;
4552a38012Sejakowatz filename = "/tmp";
4652a38012Sejakowatz testEntries.add(new BSymLink(filename), filename);
4752a38012Sejakowatz filename = dirLinkname;
4852a38012Sejakowatz testEntries.add(new BSymLink(filename), filename);
4952a38012Sejakowatz filename = fileLinkname;
5052a38012Sejakowatz testEntries.add(new BSymLink(filename), filename);
5152a38012Sejakowatz filename = badLinkname;
5252a38012Sejakowatz testEntries.add(new BSymLink(filename), filename);
5352a38012Sejakowatz filename = cyclicLinkname1;
5452a38012Sejakowatz testEntries.add(new BSymLink(filename), filename);
5552a38012Sejakowatz }
5652a38012Sejakowatz
5752a38012Sejakowatz // CreateRWNodes
5852a38012Sejakowatz void
CreateRWNodes(TestNodes & testEntries)5952a38012Sejakowatz SymLinkTest::CreateRWNodes(TestNodes& testEntries)
6052a38012Sejakowatz {
6152a38012Sejakowatz testEntries.clear();
6252a38012Sejakowatz const char *filename;
6352a38012Sejakowatz filename = dirLinkname;
6452a38012Sejakowatz testEntries.add(new BSymLink(filename), filename);
6552a38012Sejakowatz filename = fileLinkname;
6652a38012Sejakowatz testEntries.add(new BSymLink(filename), filename);
6752a38012Sejakowatz }
6852a38012Sejakowatz
6952a38012Sejakowatz // CreateUninitializedNodes
7052a38012Sejakowatz void
CreateUninitializedNodes(TestNodes & testEntries)7152a38012Sejakowatz SymLinkTest::CreateUninitializedNodes(TestNodes& testEntries)
7252a38012Sejakowatz {
7352a38012Sejakowatz testEntries.clear();
7452a38012Sejakowatz testEntries.add(new BSymLink, "");
7552a38012Sejakowatz }
7652a38012Sejakowatz
7752a38012Sejakowatz // setUp
setUp()7852a38012Sejakowatz void SymLinkTest::setUp()
7952a38012Sejakowatz {
8052a38012Sejakowatz NodeTest::setUp();
8152a38012Sejakowatz }
8252a38012Sejakowatz
8352a38012Sejakowatz // tearDown
tearDown()8452a38012Sejakowatz void SymLinkTest::tearDown()
8552a38012Sejakowatz {
8652a38012Sejakowatz NodeTest::tearDown();
8752a38012Sejakowatz }
8852a38012Sejakowatz
8952a38012Sejakowatz // InitTest1
9052a38012Sejakowatz void
InitTest1()9152a38012Sejakowatz SymLinkTest::InitTest1()
9252a38012Sejakowatz {
9352a38012Sejakowatz const char *dirLink = dirLinkname;
9452a38012Sejakowatz const char *dirSuperLink = dirSuperLinkname;
9552a38012Sejakowatz const char *dirRelLink = dirRelLinkname;
9652a38012Sejakowatz const char *fileLink = fileLinkname;
9752a38012Sejakowatz const char *existingDir = existingDirname;
9852a38012Sejakowatz const char *existingSuperDir = existingSuperDirname;
9952a38012Sejakowatz const char *existingRelDir = existingRelDirname;
10052a38012Sejakowatz const char *existingFile = existingFilename;
10152a38012Sejakowatz const char *existingSuperFile = existingSuperFilename;
10252a38012Sejakowatz const char *existingRelFile = existingRelFilename;
10352a38012Sejakowatz const char *nonExisting = nonExistingDirname;
10452a38012Sejakowatz const char *nonExistingSuper = nonExistingSuperDirname;
10552a38012Sejakowatz const char *nonExistingRel = nonExistingRelDirname;
10652a38012Sejakowatz // 1. default constructor
107aad997bdSTyler Dauwalder NextSubTest();
10852a38012Sejakowatz {
10952a38012Sejakowatz BSymLink link;
11052a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_NO_INIT );
11152a38012Sejakowatz }
11252a38012Sejakowatz
11352a38012Sejakowatz // 2. BSymLink(const char*)
114aad997bdSTyler Dauwalder NextSubTest();
11552a38012Sejakowatz {
11652a38012Sejakowatz BSymLink link(fileLink);
11752a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
11852a38012Sejakowatz }
119aad997bdSTyler Dauwalder NextSubTest();
12052a38012Sejakowatz {
12152a38012Sejakowatz BSymLink link(nonExisting);
12252a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_ENTRY_NOT_FOUND );
12352a38012Sejakowatz }
124aad997bdSTyler Dauwalder NextSubTest();
12552a38012Sejakowatz {
12652a38012Sejakowatz BSymLink link((const char *)NULL);
12752a38012Sejakowatz CPPUNIT_ASSERT( equals(link.InitCheck(), B_BAD_VALUE, B_NO_INIT) );
12852a38012Sejakowatz }
129aad997bdSTyler Dauwalder NextSubTest();
13052a38012Sejakowatz {
13152a38012Sejakowatz BSymLink link("");
13252a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_ENTRY_NOT_FOUND );
13352a38012Sejakowatz }
134aad997bdSTyler Dauwalder NextSubTest();
13552a38012Sejakowatz {
13652a38012Sejakowatz BSymLink link(existingFile);
13752a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
13852a38012Sejakowatz }
139aad997bdSTyler Dauwalder NextSubTest();
14052a38012Sejakowatz {
14152a38012Sejakowatz BSymLink link(existingDir);
14252a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
14352a38012Sejakowatz }
144aad997bdSTyler Dauwalder NextSubTest();
14552a38012Sejakowatz {
14652a38012Sejakowatz BSymLink link(tooLongEntryname);
14752a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_NAME_TOO_LONG );
14852a38012Sejakowatz }
14952a38012Sejakowatz
15052a38012Sejakowatz // 3. BSymLink(const BEntry*)
151aad997bdSTyler Dauwalder NextSubTest();
15252a38012Sejakowatz {
15352a38012Sejakowatz BEntry entry(dirLink);
15452a38012Sejakowatz CPPUNIT_ASSERT( entry.InitCheck() == B_OK );
15552a38012Sejakowatz BSymLink link(&entry);
15652a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
15752a38012Sejakowatz }
158aad997bdSTyler Dauwalder NextSubTest();
15952a38012Sejakowatz {
16052a38012Sejakowatz BEntry entry(nonExisting);
16152a38012Sejakowatz CPPUNIT_ASSERT( entry.InitCheck() == B_OK );
16252a38012Sejakowatz BSymLink link(&entry);
16352a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_ENTRY_NOT_FOUND );
16452a38012Sejakowatz }
165aad997bdSTyler Dauwalder NextSubTest();
16652a38012Sejakowatz {
16752a38012Sejakowatz BSymLink link((BEntry *)NULL);
16852a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_BAD_VALUE );
16952a38012Sejakowatz }
170aad997bdSTyler Dauwalder NextSubTest();
17152a38012Sejakowatz {
17252a38012Sejakowatz BEntry entry;
17352a38012Sejakowatz BSymLink link(&entry);
17452a38012Sejakowatz CPPUNIT_ASSERT( equals(link.InitCheck(), B_BAD_ADDRESS, B_BAD_VALUE) );
17552a38012Sejakowatz }
176aad997bdSTyler Dauwalder NextSubTest();
17752a38012Sejakowatz {
17852a38012Sejakowatz BEntry entry(existingFile);
17952a38012Sejakowatz CPPUNIT_ASSERT( entry.InitCheck() == B_OK );
18052a38012Sejakowatz BSymLink link(&entry);
18152a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
18252a38012Sejakowatz
18352a38012Sejakowatz }
184aad997bdSTyler Dauwalder NextSubTest();
18552a38012Sejakowatz {
18652a38012Sejakowatz BEntry entry(existingDir);
18752a38012Sejakowatz CPPUNIT_ASSERT( entry.InitCheck() == B_OK );
18852a38012Sejakowatz BSymLink link(&entry);
18952a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
19052a38012Sejakowatz
19152a38012Sejakowatz }
192aad997bdSTyler Dauwalder NextSubTest();
19352a38012Sejakowatz {
19452a38012Sejakowatz BEntry entry(tooLongEntryname);
19552a38012Sejakowatz // R5 returns E2BIG instead of B_NAME_TOO_LONG
19652a38012Sejakowatz CPPUNIT_ASSERT( equals(entry.InitCheck(), E2BIG, B_NAME_TOO_LONG) );
19752a38012Sejakowatz BSymLink link(&entry);
19852a38012Sejakowatz CPPUNIT_ASSERT( equals(link.InitCheck(), B_BAD_ADDRESS, B_BAD_VALUE) );
19952a38012Sejakowatz }
20052a38012Sejakowatz
20152a38012Sejakowatz // 4. BSymLink(const entry_ref*)
202aad997bdSTyler Dauwalder NextSubTest();
20352a38012Sejakowatz {
20452a38012Sejakowatz BEntry entry(dirLink);
20552a38012Sejakowatz CPPUNIT_ASSERT( entry.InitCheck() == B_OK );
20652a38012Sejakowatz entry_ref ref;
20752a38012Sejakowatz CPPUNIT_ASSERT( entry.GetRef(&ref) == B_OK );
20852a38012Sejakowatz BSymLink link(&ref);
20952a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
21052a38012Sejakowatz }
211aad997bdSTyler Dauwalder NextSubTest();
21252a38012Sejakowatz {
21352a38012Sejakowatz BEntry entry(nonExisting);
21452a38012Sejakowatz CPPUNIT_ASSERT( entry.InitCheck() == B_OK );
21552a38012Sejakowatz entry_ref ref;
21652a38012Sejakowatz CPPUNIT_ASSERT( entry.GetRef(&ref) == B_OK );
21752a38012Sejakowatz BSymLink link(&ref);
21852a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_ENTRY_NOT_FOUND );
21952a38012Sejakowatz }
220aad997bdSTyler Dauwalder NextSubTest();
22152a38012Sejakowatz {
22252a38012Sejakowatz BSymLink link((entry_ref *)NULL);
22352a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_BAD_VALUE );
22452a38012Sejakowatz }
225aad997bdSTyler Dauwalder NextSubTest();
22652a38012Sejakowatz {
22752a38012Sejakowatz BEntry entry(existingFile);
22852a38012Sejakowatz CPPUNIT_ASSERT( entry.InitCheck() == B_OK );
22952a38012Sejakowatz entry_ref ref;
23052a38012Sejakowatz CPPUNIT_ASSERT( entry.GetRef(&ref) == B_OK );
23152a38012Sejakowatz BSymLink link(&ref);
23252a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
23352a38012Sejakowatz }
234aad997bdSTyler Dauwalder NextSubTest();
23552a38012Sejakowatz {
23652a38012Sejakowatz BEntry entry(existingDir);
23752a38012Sejakowatz CPPUNIT_ASSERT( entry.InitCheck() == B_OK );
23852a38012Sejakowatz entry_ref ref;
23952a38012Sejakowatz CPPUNIT_ASSERT( entry.GetRef(&ref) == B_OK );
24052a38012Sejakowatz BSymLink link(&ref);
24152a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
24252a38012Sejakowatz }
24352a38012Sejakowatz
24452a38012Sejakowatz // 5. BSymLink(const BDirectory*, const char*)
245aad997bdSTyler Dauwalder NextSubTest();
24652a38012Sejakowatz {
24752a38012Sejakowatz BDirectory pathDir(dirSuperLink);
24852a38012Sejakowatz CPPUNIT_ASSERT( pathDir.InitCheck() == B_OK );
24952a38012Sejakowatz BSymLink link(&pathDir, dirRelLink);
25052a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
25152a38012Sejakowatz }
252aad997bdSTyler Dauwalder NextSubTest();
25352a38012Sejakowatz {
25452a38012Sejakowatz BDirectory pathDir(dirSuperLink);
25552a38012Sejakowatz CPPUNIT_ASSERT( pathDir.InitCheck() == B_OK );
25652a38012Sejakowatz BSymLink link(&pathDir, dirLink);
25752a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_BAD_VALUE );
25852a38012Sejakowatz }
259aad997bdSTyler Dauwalder NextSubTest();
26052a38012Sejakowatz {
26152a38012Sejakowatz BDirectory pathDir(nonExistingSuper);
26252a38012Sejakowatz CPPUNIT_ASSERT( pathDir.InitCheck() == B_OK );
26352a38012Sejakowatz BSymLink link(&pathDir, nonExistingRel);
26452a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_ENTRY_NOT_FOUND );
26552a38012Sejakowatz }
266aad997bdSTyler Dauwalder NextSubTest();
26752a38012Sejakowatz {
26852a38012Sejakowatz BSymLink link((BDirectory *)NULL, (const char *)NULL);
26952a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_BAD_VALUE );
27052a38012Sejakowatz }
271aad997bdSTyler Dauwalder NextSubTest();
27252a38012Sejakowatz {
27352a38012Sejakowatz BSymLink link((BDirectory *)NULL, dirLink);
27452a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_BAD_VALUE );
27552a38012Sejakowatz }
276aad997bdSTyler Dauwalder NextSubTest();
27752a38012Sejakowatz {
27852a38012Sejakowatz BDirectory pathDir(dirSuperLink);
27952a38012Sejakowatz CPPUNIT_ASSERT( pathDir.InitCheck() == B_OK );
28052a38012Sejakowatz BSymLink link(&pathDir, (const char *)NULL);
28152a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_BAD_VALUE );
28252a38012Sejakowatz }
283aad997bdSTyler Dauwalder NextSubTest();
28452a38012Sejakowatz {
28552a38012Sejakowatz BDirectory pathDir(dirSuperLink);
28652a38012Sejakowatz CPPUNIT_ASSERT( pathDir.InitCheck() == B_OK );
28752a38012Sejakowatz BSymLink link(&pathDir, "");
288e1b7c1c7SKyle Ambroff-Kao CPPUNIT_ASSERT(link.InitCheck() == B_ENTRY_NOT_FOUND);
28952a38012Sejakowatz }
290aad997bdSTyler Dauwalder NextSubTest();
29152a38012Sejakowatz {
29252a38012Sejakowatz BDirectory pathDir(existingSuperFile);
29352a38012Sejakowatz CPPUNIT_ASSERT( pathDir.InitCheck() == B_OK );
29452a38012Sejakowatz BSymLink link(&pathDir, existingRelFile);
29552a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
29652a38012Sejakowatz }
297aad997bdSTyler Dauwalder NextSubTest();
29852a38012Sejakowatz {
29952a38012Sejakowatz BDirectory pathDir(existingSuperDir);
30052a38012Sejakowatz CPPUNIT_ASSERT( pathDir.InitCheck() == B_OK );
30152a38012Sejakowatz BSymLink link(&pathDir, existingRelDir);
30252a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
30352a38012Sejakowatz }
304aad997bdSTyler Dauwalder NextSubTest();
30552a38012Sejakowatz {
30652a38012Sejakowatz BDirectory pathDir(tooLongSuperEntryname);
30752a38012Sejakowatz CPPUNIT_ASSERT( pathDir.InitCheck() == B_OK );
30852a38012Sejakowatz BSymLink link(&pathDir, tooLongRelEntryname);
30952a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_NAME_TOO_LONG );
31052a38012Sejakowatz }
311aad997bdSTyler Dauwalder NextSubTest();
31252a38012Sejakowatz {
31352a38012Sejakowatz BDirectory pathDir(fileSuperDirname);
31452a38012Sejakowatz CPPUNIT_ASSERT( pathDir.InitCheck() == B_OK );
31552a38012Sejakowatz BSymLink link(&pathDir, fileRelDirname);
31652a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_ENTRY_NOT_FOUND );
31752a38012Sejakowatz }
31852a38012Sejakowatz }
31952a38012Sejakowatz
32052a38012Sejakowatz // InitTest2
32152a38012Sejakowatz void
InitTest2()32252a38012Sejakowatz SymLinkTest::InitTest2()
32352a38012Sejakowatz {
32452a38012Sejakowatz const char *dirLink = dirLinkname;
32552a38012Sejakowatz const char *dirSuperLink = dirSuperLinkname;
32652a38012Sejakowatz const char *dirRelLink = dirRelLinkname;
32752a38012Sejakowatz const char *fileLink = fileLinkname;
32852a38012Sejakowatz const char *existingDir = existingDirname;
32952a38012Sejakowatz const char *existingSuperDir = existingSuperDirname;
33052a38012Sejakowatz const char *existingRelDir = existingRelDirname;
33152a38012Sejakowatz const char *existingFile = existingFilename;
33252a38012Sejakowatz const char *existingSuperFile = existingSuperFilename;
33352a38012Sejakowatz const char *existingRelFile = existingRelFilename;
33452a38012Sejakowatz const char *nonExisting = nonExistingDirname;
33552a38012Sejakowatz const char *nonExistingSuper = nonExistingSuperDirname;
33652a38012Sejakowatz const char *nonExistingRel = nonExistingRelDirname;
33752a38012Sejakowatz BSymLink link;
33852a38012Sejakowatz // 2. BSymLink(const char*)
339aad997bdSTyler Dauwalder NextSubTest();
34052a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(fileLink) == B_OK );
34152a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
34252a38012Sejakowatz //
343aad997bdSTyler Dauwalder NextSubTest();
34452a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(nonExisting) == B_ENTRY_NOT_FOUND );
34552a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_ENTRY_NOT_FOUND );
34652a38012Sejakowatz //
347aad997bdSTyler Dauwalder NextSubTest();
34852a38012Sejakowatz CPPUNIT_ASSERT( equals(link.SetTo((const char *)NULL), B_BAD_VALUE,
34952a38012Sejakowatz B_NO_INIT) );
35052a38012Sejakowatz CPPUNIT_ASSERT( equals(link.InitCheck(), B_BAD_VALUE, B_NO_INIT) );
35152a38012Sejakowatz //
352aad997bdSTyler Dauwalder NextSubTest();
35352a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo("") == B_ENTRY_NOT_FOUND );
35452a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_ENTRY_NOT_FOUND );
35552a38012Sejakowatz //
356aad997bdSTyler Dauwalder NextSubTest();
35752a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(existingFile) == B_OK );
35852a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
35952a38012Sejakowatz //
360aad997bdSTyler Dauwalder NextSubTest();
36152a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(existingDir) == B_OK );
36252a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
36352a38012Sejakowatz //
364aad997bdSTyler Dauwalder NextSubTest();
36552a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(tooLongEntryname) == B_NAME_TOO_LONG );
36652a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_NAME_TOO_LONG );
36752a38012Sejakowatz
36852a38012Sejakowatz // 3. BSymLink(const BEntry*)
369aad997bdSTyler Dauwalder NextSubTest();
37052a38012Sejakowatz BEntry entry(dirLink);
37152a38012Sejakowatz CPPUNIT_ASSERT( entry.InitCheck() == B_OK );
37252a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(&entry) == B_OK );
37352a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
37452a38012Sejakowatz //
375aad997bdSTyler Dauwalder NextSubTest();
37652a38012Sejakowatz CPPUNIT_ASSERT( entry.SetTo(nonExisting) == B_OK );
37752a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(&entry) == B_ENTRY_NOT_FOUND );
37852a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_ENTRY_NOT_FOUND );
37952a38012Sejakowatz //
380aad997bdSTyler Dauwalder NextSubTest();
38152a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo((BEntry *)NULL) == B_BAD_VALUE );
38252a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_BAD_VALUE );
38352a38012Sejakowatz //
384aad997bdSTyler Dauwalder NextSubTest();
38552a38012Sejakowatz entry.Unset();
38652a38012Sejakowatz CPPUNIT_ASSERT( entry.InitCheck() == B_NO_INIT );
38752a38012Sejakowatz CPPUNIT_ASSERT( equals(link.SetTo(&entry), B_BAD_ADDRESS, B_BAD_VALUE) );
38852a38012Sejakowatz CPPUNIT_ASSERT( equals(link.InitCheck(), B_BAD_ADDRESS, B_BAD_VALUE) );
38952a38012Sejakowatz //
390aad997bdSTyler Dauwalder NextSubTest();
39152a38012Sejakowatz CPPUNIT_ASSERT( entry.SetTo(existingFile) == B_OK );
39252a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(&entry) == B_OK );
39352a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
39452a38012Sejakowatz //
395aad997bdSTyler Dauwalder NextSubTest();
39652a38012Sejakowatz CPPUNIT_ASSERT( entry.SetTo(existingDir) == B_OK );
39752a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(&entry) == B_OK );
39852a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
39952a38012Sejakowatz //
400aad997bdSTyler Dauwalder NextSubTest();
40152a38012Sejakowatz // R5 returns E2BIG instead of B_NAME_TOO_LONG
40252a38012Sejakowatz CPPUNIT_ASSERT( equals(entry.SetTo(tooLongEntryname), E2BIG,
40352a38012Sejakowatz B_NAME_TOO_LONG) );
40452a38012Sejakowatz CPPUNIT_ASSERT( equals(link.SetTo(&entry), B_BAD_ADDRESS, B_BAD_VALUE) );
40552a38012Sejakowatz CPPUNIT_ASSERT( equals(link.InitCheck(), B_BAD_ADDRESS, B_BAD_VALUE) );
40652a38012Sejakowatz
40752a38012Sejakowatz // 4. BSymLink(const entry_ref*)
408aad997bdSTyler Dauwalder NextSubTest();
40952a38012Sejakowatz CPPUNIT_ASSERT( entry.SetTo(dirLink) == B_OK );
41052a38012Sejakowatz entry_ref ref;
41152a38012Sejakowatz CPPUNIT_ASSERT( entry.GetRef(&ref) == B_OK );
41252a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(&ref) == B_OK );
41352a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
41452a38012Sejakowatz //
415aad997bdSTyler Dauwalder NextSubTest();
41652a38012Sejakowatz CPPUNIT_ASSERT( entry.SetTo(nonExisting) == B_OK );
41752a38012Sejakowatz CPPUNIT_ASSERT( entry.GetRef(&ref) == B_OK );
41852a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(&ref) == B_ENTRY_NOT_FOUND );
41952a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_ENTRY_NOT_FOUND );
42052a38012Sejakowatz //
421aad997bdSTyler Dauwalder NextSubTest();
42252a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo((entry_ref *)NULL) == B_BAD_VALUE );
42352a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_BAD_VALUE );
42452a38012Sejakowatz //
425aad997bdSTyler Dauwalder NextSubTest();
42652a38012Sejakowatz CPPUNIT_ASSERT( entry.SetTo(existingFile) == B_OK );
42752a38012Sejakowatz CPPUNIT_ASSERT( entry.GetRef(&ref) == B_OK );
42852a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(&ref) == B_OK );
42952a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
43052a38012Sejakowatz //
431aad997bdSTyler Dauwalder NextSubTest();
43252a38012Sejakowatz CPPUNIT_ASSERT( entry.SetTo(existingDir) == B_OK );
43352a38012Sejakowatz CPPUNIT_ASSERT( entry.GetRef(&ref) == B_OK );
43452a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(&ref) == B_OK );
43552a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
43652a38012Sejakowatz
43752a38012Sejakowatz // 5. BSymLink(const BDirectory*, const char*)
438aad997bdSTyler Dauwalder NextSubTest();
43952a38012Sejakowatz BDirectory pathDir(dirSuperLink);
44052a38012Sejakowatz CPPUNIT_ASSERT( pathDir.InitCheck() == B_OK );
44152a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(&pathDir, dirRelLink) == B_OK );
44252a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
44352a38012Sejakowatz //
444aad997bdSTyler Dauwalder NextSubTest();
44552a38012Sejakowatz CPPUNIT_ASSERT( pathDir.SetTo(dirSuperLink) == B_OK );
44652a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(&pathDir, dirLink) == B_BAD_VALUE );
44752a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_BAD_VALUE );
44852a38012Sejakowatz //
449aad997bdSTyler Dauwalder NextSubTest();
45052a38012Sejakowatz CPPUNIT_ASSERT( pathDir.SetTo(nonExistingSuper) == B_OK );
45152a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(&pathDir, nonExistingRel) == B_ENTRY_NOT_FOUND );
45252a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_ENTRY_NOT_FOUND );
45352a38012Sejakowatz //
454aad997bdSTyler Dauwalder NextSubTest();
45552a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo((BDirectory *)NULL, (const char *)NULL)
45652a38012Sejakowatz == B_BAD_VALUE );
45752a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_BAD_VALUE );
45852a38012Sejakowatz //
459aad997bdSTyler Dauwalder NextSubTest();
46052a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo((BDirectory *)NULL, dirLink) == B_BAD_VALUE );
46152a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_BAD_VALUE );
46252a38012Sejakowatz //
463aad997bdSTyler Dauwalder NextSubTest();
46452a38012Sejakowatz CPPUNIT_ASSERT( pathDir.SetTo(dirSuperLink) == B_OK );
46552a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(&pathDir, (const char *)NULL) == B_BAD_VALUE );
46652a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_BAD_VALUE );
46752a38012Sejakowatz //
468aad997bdSTyler Dauwalder NextSubTest();
46952a38012Sejakowatz CPPUNIT_ASSERT( pathDir.SetTo(dirSuperLink) == B_OK );
470e1b7c1c7SKyle Ambroff-Kao CPPUNIT_ASSERT(link.SetTo(&pathDir, "") == B_ENTRY_NOT_FOUND);
471e1b7c1c7SKyle Ambroff-Kao CPPUNIT_ASSERT(link.InitCheck() == B_ENTRY_NOT_FOUND);
47252a38012Sejakowatz //
473aad997bdSTyler Dauwalder NextSubTest();
47452a38012Sejakowatz CPPUNIT_ASSERT( pathDir.SetTo(existingSuperFile) == B_OK );
47552a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(&pathDir, existingRelFile) == B_OK );
47652a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
47752a38012Sejakowatz //
478aad997bdSTyler Dauwalder NextSubTest();
47952a38012Sejakowatz CPPUNIT_ASSERT( pathDir.SetTo(existingSuperDir) == B_OK );
48052a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(&pathDir, existingRelDir) == B_OK );
48152a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
48252a38012Sejakowatz //
483aad997bdSTyler Dauwalder NextSubTest();
48452a38012Sejakowatz CPPUNIT_ASSERT( pathDir.SetTo(tooLongSuperEntryname) == B_OK );
48552a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(&pathDir, tooLongRelEntryname)
48652a38012Sejakowatz == B_NAME_TOO_LONG );
48752a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_NAME_TOO_LONG );
48852a38012Sejakowatz //
489aad997bdSTyler Dauwalder NextSubTest();
49052a38012Sejakowatz CPPUNIT_ASSERT( pathDir.SetTo(fileSuperDirname) == B_OK );
49152a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(&pathDir, fileRelDirname) == B_ENTRY_NOT_FOUND );
49252a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_ENTRY_NOT_FOUND );
49352a38012Sejakowatz }
49452a38012Sejakowatz
49552a38012Sejakowatz // ReadLinkTest
49652a38012Sejakowatz void
ReadLinkTest()49752a38012Sejakowatz SymLinkTest::ReadLinkTest()
49852a38012Sejakowatz {
49952a38012Sejakowatz const char *dirLink = dirLinkname;
50052a38012Sejakowatz const char *fileLink = fileLinkname;
50152a38012Sejakowatz const char *badLink = badLinkname;
50252a38012Sejakowatz const char *cyclicLink1 = cyclicLinkname1;
50352a38012Sejakowatz const char *cyclicLink2 = cyclicLinkname2;
50452a38012Sejakowatz const char *existingDir = existingDirname;
50552a38012Sejakowatz const char *existingFile = existingFilename;
50652a38012Sejakowatz const char *nonExisting = nonExistingDirname;
50752a38012Sejakowatz BSymLink link;
50852a38012Sejakowatz char buffer[B_PATH_NAME_LENGTH + 1];
50952a38012Sejakowatz // uninitialized
51052a38012Sejakowatz // R5: returns B_BAD_ADDRESS instead of (as doc'ed) B_FILE_ERROR
511aad997bdSTyler Dauwalder NextSubTest();
51252a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_NO_INIT );
51352a38012Sejakowatz CPPUNIT_ASSERT( equals(link.ReadLink(buffer, sizeof(buffer)),
51452a38012Sejakowatz B_BAD_ADDRESS, B_FILE_ERROR) );
51552a38012Sejakowatz // existing dir link
516aad997bdSTyler Dauwalder NextSubTest();
51752a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(dirLink) == B_OK );
51852a38012Sejakowatz CPPUNIT_ASSERT( link.ReadLink(buffer, sizeof(buffer))
51952a38012Sejakowatz == (ssize_t)strlen(existingDir) );
52052a38012Sejakowatz CPPUNIT_ASSERT( strcmp(buffer, existingDir) == 0 );
52152a38012Sejakowatz // existing file link
522aad997bdSTyler Dauwalder NextSubTest();
52352a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(fileLink) == B_OK );
52452a38012Sejakowatz CPPUNIT_ASSERT( link.ReadLink(buffer, sizeof(buffer))
52552a38012Sejakowatz == (ssize_t)strlen(existingFile) );
52652a38012Sejakowatz CPPUNIT_ASSERT( strcmp(buffer, existingFile) == 0 );
52752a38012Sejakowatz // existing cyclic link
528aad997bdSTyler Dauwalder NextSubTest();
52952a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(cyclicLink1) == B_OK );
53052a38012Sejakowatz CPPUNIT_ASSERT( link.ReadLink(buffer, sizeof(buffer))
53152a38012Sejakowatz == (ssize_t)strlen(cyclicLink2) );
53252a38012Sejakowatz CPPUNIT_ASSERT( strcmp(buffer, cyclicLink2) == 0 );
53352a38012Sejakowatz // existing link to non-existing entry
534aad997bdSTyler Dauwalder NextSubTest();
53552a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(badLink) == B_OK );
53652a38012Sejakowatz CPPUNIT_ASSERT( link.ReadLink(buffer, sizeof(buffer))
53752a38012Sejakowatz == (ssize_t)strlen(nonExisting) );
53852a38012Sejakowatz CPPUNIT_ASSERT( strcmp(buffer, nonExisting) == 0 );
53952a38012Sejakowatz // non-existing link
54052a38012Sejakowatz // R5: returns B_BAD_ADDRESS instead of (as doc'ed) B_FILE_ERROR
541aad997bdSTyler Dauwalder NextSubTest();
54252a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(nonExisting) == B_ENTRY_NOT_FOUND );
54352a38012Sejakowatz CPPUNIT_ASSERT( equals(link.ReadLink(buffer, sizeof(buffer)),
54452a38012Sejakowatz B_BAD_ADDRESS, B_FILE_ERROR) );
54552a38012Sejakowatz // dir
546aad997bdSTyler Dauwalder NextSubTest();
54752a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(existingDir) == B_OK );
54852a38012Sejakowatz CPPUNIT_ASSERT( link.ReadLink(buffer, sizeof(buffer)) == B_BAD_VALUE );
54952a38012Sejakowatz // file
550aad997bdSTyler Dauwalder NextSubTest();
55152a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(existingFile) == B_OK );
55252a38012Sejakowatz CPPUNIT_ASSERT( link.ReadLink(buffer, sizeof(buffer)) == B_BAD_VALUE );
55352a38012Sejakowatz // small buffer
55452a38012Sejakowatz // R5: returns the size of the contents, not the number of bytes copied
555*2ca13760SColdfirex // Haiku: ... so do we
556aad997bdSTyler Dauwalder NextSubTest();
55752a38012Sejakowatz char smallBuffer[2];
55852a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(dirLink) == B_OK );
559e1b7c1c7SKyle Ambroff-Kao ssize_t linkLength = link.ReadLink(smallBuffer, sizeof(smallBuffer));
560e1b7c1c7SKyle Ambroff-Kao CPPUNIT_ASSERT(linkLength == static_cast<ssize_t>(strlen(existingDir)));
561e1b7c1c7SKyle Ambroff-Kao CPPUNIT_ASSERT_EQUAL('/', smallBuffer[0]);
562e1b7c1c7SKyle Ambroff-Kao CPPUNIT_ASSERT_EQUAL('\0', smallBuffer[1]);
563e1b7c1c7SKyle Ambroff-Kao
564e1b7c1c7SKyle Ambroff-Kao // Invoke with one extra byte of length to ensure that the result is NULL
565e1b7c1c7SKyle Ambroff-Kao // terminated.
566e1b7c1c7SKyle Ambroff-Kao NextSubTest();
567e1b7c1c7SKyle Ambroff-Kao buffer[17] = 'x';
568e1b7c1c7SKyle Ambroff-Kao CPPUNIT_ASSERT(link.ReadLink(buffer, 18));
569e1b7c1c7SKyle Ambroff-Kao CPPUNIT_ASSERT_EQUAL('\0', buffer[17]);
570e1b7c1c7SKyle Ambroff-Kao CPPUNIT_ASSERT_EQUAL(strcmp(buffer, "/tmp/existing-dir"), 0);
571e1b7c1c7SKyle Ambroff-Kao
57252a38012Sejakowatz // bad args
573aad997bdSTyler Dauwalder NextSubTest();
57452a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(fileLink) == B_OK );
57552a38012Sejakowatz CPPUNIT_ASSERT( equals(link.ReadLink(NULL, sizeof(buffer)), B_BAD_ADDRESS,
57652a38012Sejakowatz B_BAD_VALUE) );
57752a38012Sejakowatz }
57852a38012Sejakowatz
57952a38012Sejakowatz // MakeLinkedPathTest
58052a38012Sejakowatz void
MakeLinkedPathTest()58152a38012Sejakowatz SymLinkTest::MakeLinkedPathTest()
58252a38012Sejakowatz {
58352a38012Sejakowatz const char *dirLink = dirLinkname;
58452a38012Sejakowatz const char *fileLink = fileLinkname;
58552a38012Sejakowatz const char *relDirLink = relDirLinkname;
58652a38012Sejakowatz const char *relFileLink = relFileLinkname;
58752a38012Sejakowatz const char *cyclicLink1 = cyclicLinkname1;
58852a38012Sejakowatz const char *cyclicLink2 = cyclicLinkname2;
58952a38012Sejakowatz const char *existingDir = existingDirname;
59052a38012Sejakowatz const char *existingSuperDir = existingSuperDirname;
59152a38012Sejakowatz const char *existingFile = existingFilename;
59252a38012Sejakowatz const char *existingSuperFile = existingSuperFilename;
59352a38012Sejakowatz const char *nonExisting = nonExistingDirname;
59452a38012Sejakowatz BSymLink link;
59552a38012Sejakowatz BPath path;
59652a38012Sejakowatz // 1. MakeLinkedPath(const char*, BPath*)
59752a38012Sejakowatz // uninitialized
598aad997bdSTyler Dauwalder NextSubTest();
59952a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_NO_INIT );
60052a38012Sejakowatz CPPUNIT_ASSERT( equals(link.MakeLinkedPath("/boot", &path), B_BAD_ADDRESS,
60152a38012Sejakowatz B_FILE_ERROR) );
60252a38012Sejakowatz link.Unset();
60352a38012Sejakowatz path.Unset();
60452a38012Sejakowatz // existing absolute dir link
605aad997bdSTyler Dauwalder NextSubTest();
60652a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(dirLink) == B_OK );
60752a38012Sejakowatz CPPUNIT_ASSERT( link.MakeLinkedPath("/boot", &path)
60852a38012Sejakowatz == (ssize_t)strlen(existingDir) );
60952a38012Sejakowatz CPPUNIT_ASSERT( path.InitCheck() == B_OK );
61052a38012Sejakowatz CPPUNIT_ASSERT( string(existingDir) == path.Path() );
61152a38012Sejakowatz link.Unset();
61252a38012Sejakowatz path.Unset();
61352a38012Sejakowatz // existing absolute file link
614aad997bdSTyler Dauwalder NextSubTest();
61552a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(fileLink) == B_OK );
61652a38012Sejakowatz CPPUNIT_ASSERT( link.MakeLinkedPath("/boot", &path)
61752a38012Sejakowatz == (ssize_t)strlen(existingFile) );
61852a38012Sejakowatz CPPUNIT_ASSERT( path.InitCheck() == B_OK );
61952a38012Sejakowatz CPPUNIT_ASSERT( string(existingFile) == path.Path() );
62052a38012Sejakowatz link.Unset();
62152a38012Sejakowatz path.Unset();
62252a38012Sejakowatz // existing absolute cyclic link
623aad997bdSTyler Dauwalder NextSubTest();
62452a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(cyclicLink1) == B_OK );
62552a38012Sejakowatz CPPUNIT_ASSERT( link.MakeLinkedPath("/boot", &path)
62652a38012Sejakowatz == (ssize_t)strlen(cyclicLink2) );
62752a38012Sejakowatz CPPUNIT_ASSERT( path.InitCheck() == B_OK );
62852a38012Sejakowatz CPPUNIT_ASSERT( string(cyclicLink2) == path.Path() );
62952a38012Sejakowatz link.Unset();
63052a38012Sejakowatz path.Unset();
63152a38012Sejakowatz // existing relative dir link
632aad997bdSTyler Dauwalder NextSubTest();
63352a38012Sejakowatz BEntry entry;
63452a38012Sejakowatz BPath entryPath;
63552a38012Sejakowatz CPPUNIT_ASSERT( entry.SetTo(existingDir) == B_OK );
63652a38012Sejakowatz CPPUNIT_ASSERT( entry.GetPath(&entryPath) == B_OK );
63752a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(relDirLink) == B_OK );
63852a38012Sejakowatz CPPUNIT_ASSERT( link.MakeLinkedPath(existingSuperDir, &path)
63952a38012Sejakowatz == (ssize_t)strlen(entryPath.Path()) );
64052a38012Sejakowatz CPPUNIT_ASSERT( path.InitCheck() == B_OK );
64152a38012Sejakowatz CPPUNIT_ASSERT( entryPath == path );
64252a38012Sejakowatz link.Unset();
64352a38012Sejakowatz path.Unset();
64452a38012Sejakowatz entry.Unset();
64552a38012Sejakowatz entryPath.Unset();
64652a38012Sejakowatz // existing relative file link
647aad997bdSTyler Dauwalder NextSubTest();
64852a38012Sejakowatz CPPUNIT_ASSERT( entry.SetTo(existingFile) == B_OK );
64952a38012Sejakowatz CPPUNIT_ASSERT( entry.GetPath(&entryPath) == B_OK );
65052a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(relFileLink) == B_OK );
65152a38012Sejakowatz CPPUNIT_ASSERT( link.MakeLinkedPath(existingSuperFile, &path)
65252a38012Sejakowatz == (ssize_t)strlen(entryPath.Path()) );
65352a38012Sejakowatz CPPUNIT_ASSERT( path.InitCheck() == B_OK );
65452a38012Sejakowatz CPPUNIT_ASSERT( entryPath == path );
65552a38012Sejakowatz link.Unset();
65652a38012Sejakowatz path.Unset();
65752a38012Sejakowatz entry.Unset();
65852a38012Sejakowatz entryPath.Unset();
65952a38012Sejakowatz // bad args
660aad997bdSTyler Dauwalder NextSubTest();
66152a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(dirLink) == B_OK );
66252a38012Sejakowatz // R5: crashs, when passing a NULL path
663aad997bdSTyler Dauwalder #if !TEST_R5
66452a38012Sejakowatz CPPUNIT_ASSERT( link.MakeLinkedPath("/boot", NULL) == B_BAD_VALUE );
66552a38012Sejakowatz #endif
66652a38012Sejakowatz CPPUNIT_ASSERT( link.MakeLinkedPath((const char*)NULL, &path)
66752a38012Sejakowatz == B_BAD_VALUE );
66852a38012Sejakowatz // R5: crashs, when passing a NULL path
669aad997bdSTyler Dauwalder #if !TEST_R5
67052a38012Sejakowatz CPPUNIT_ASSERT( link.MakeLinkedPath((const char*)NULL, NULL)
67152a38012Sejakowatz == B_BAD_VALUE );
67252a38012Sejakowatz #endif
67352a38012Sejakowatz link.Unset();
67452a38012Sejakowatz path.Unset();
67552a38012Sejakowatz
67652a38012Sejakowatz // 2. MakeLinkedPath(const BDirectory*, BPath*)
67752a38012Sejakowatz // uninitialized
678aad997bdSTyler Dauwalder NextSubTest();
67952a38012Sejakowatz link.Unset();
68052a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_NO_INIT );
68152a38012Sejakowatz BDirectory dir;
68252a38012Sejakowatz CPPUNIT_ASSERT( dir.SetTo("/boot") == B_OK);
68352a38012Sejakowatz CPPUNIT_ASSERT( equals(link.MakeLinkedPath(&dir, &path), B_BAD_ADDRESS,
68452a38012Sejakowatz B_FILE_ERROR) );
68552a38012Sejakowatz link.Unset();
68652a38012Sejakowatz path.Unset();
68752a38012Sejakowatz dir.Unset();
68852a38012Sejakowatz // existing absolute dir link
689aad997bdSTyler Dauwalder NextSubTest();
69052a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(dirLink) == B_OK );
69152a38012Sejakowatz CPPUNIT_ASSERT( dir.SetTo("/boot") == B_OK);
69252a38012Sejakowatz CPPUNIT_ASSERT( link.MakeLinkedPath(&dir, &path)
69352a38012Sejakowatz == (ssize_t)strlen(existingDir) );
69452a38012Sejakowatz CPPUNIT_ASSERT( path.InitCheck() == B_OK );
69552a38012Sejakowatz CPPUNIT_ASSERT( string(existingDir) == path.Path() );
69652a38012Sejakowatz link.Unset();
69752a38012Sejakowatz path.Unset();
69852a38012Sejakowatz dir.Unset();
69952a38012Sejakowatz // existing absolute file link
700aad997bdSTyler Dauwalder NextSubTest();
70152a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(fileLink) == B_OK );
70252a38012Sejakowatz CPPUNIT_ASSERT( dir.SetTo("/boot") == B_OK);
70352a38012Sejakowatz CPPUNIT_ASSERT( link.MakeLinkedPath(&dir, &path)
70452a38012Sejakowatz == (ssize_t)strlen(existingFile) );
70552a38012Sejakowatz CPPUNIT_ASSERT( path.InitCheck() == B_OK );
70652a38012Sejakowatz CPPUNIT_ASSERT( string(existingFile) == path.Path() );
70752a38012Sejakowatz link.Unset();
70852a38012Sejakowatz path.Unset();
70952a38012Sejakowatz dir.Unset();
71052a38012Sejakowatz // existing absolute cyclic link
711aad997bdSTyler Dauwalder NextSubTest();
71252a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(cyclicLink1) == B_OK );
71352a38012Sejakowatz CPPUNIT_ASSERT( dir.SetTo("/boot") == B_OK);
71452a38012Sejakowatz CPPUNIT_ASSERT( link.MakeLinkedPath(&dir, &path)
71552a38012Sejakowatz == (ssize_t)strlen(cyclicLink2) );
71652a38012Sejakowatz CPPUNIT_ASSERT( path.InitCheck() == B_OK );
71752a38012Sejakowatz CPPUNIT_ASSERT( string(cyclicLink2) == path.Path() );
71852a38012Sejakowatz link.Unset();
71952a38012Sejakowatz path.Unset();
72052a38012Sejakowatz dir.Unset();
72152a38012Sejakowatz // existing relative dir link
722aad997bdSTyler Dauwalder NextSubTest();
72352a38012Sejakowatz CPPUNIT_ASSERT( entry.SetTo(existingDir) == B_OK );
72452a38012Sejakowatz CPPUNIT_ASSERT( entry.GetPath(&entryPath) == B_OK );
72552a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(relDirLink) == B_OK );
72652a38012Sejakowatz CPPUNIT_ASSERT( dir.SetTo(existingSuperDir) == B_OK);
72752a38012Sejakowatz CPPUNIT_ASSERT( link.MakeLinkedPath(&dir, &path)
72852a38012Sejakowatz == (ssize_t)strlen(entryPath.Path()) );
72952a38012Sejakowatz CPPUNIT_ASSERT( path.InitCheck() == B_OK );
73052a38012Sejakowatz CPPUNIT_ASSERT( entryPath == path );
73152a38012Sejakowatz link.Unset();
73252a38012Sejakowatz path.Unset();
73352a38012Sejakowatz dir.Unset();
73452a38012Sejakowatz entry.Unset();
73552a38012Sejakowatz entryPath.Unset();
73652a38012Sejakowatz // existing relative file link
737aad997bdSTyler Dauwalder NextSubTest();
73852a38012Sejakowatz CPPUNIT_ASSERT( entry.SetTo(existingFile) == B_OK );
73952a38012Sejakowatz CPPUNIT_ASSERT( entry.GetPath(&entryPath) == B_OK );
74052a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(relFileLink) == B_OK );
74152a38012Sejakowatz CPPUNIT_ASSERT( dir.SetTo(existingSuperFile) == B_OK);
74252a38012Sejakowatz CPPUNIT_ASSERT( link.MakeLinkedPath(&dir, &path)
74352a38012Sejakowatz == (ssize_t)strlen(entryPath.Path()) );
74452a38012Sejakowatz CPPUNIT_ASSERT( path.InitCheck() == B_OK );
74552a38012Sejakowatz CPPUNIT_ASSERT( entryPath == path );
74652a38012Sejakowatz link.Unset();
74752a38012Sejakowatz path.Unset();
74852a38012Sejakowatz dir.Unset();
74952a38012Sejakowatz entry.Unset();
75052a38012Sejakowatz entryPath.Unset();
75152a38012Sejakowatz // absolute link, uninitialized dir
752aad997bdSTyler Dauwalder NextSubTest();
75352a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(dirLink) == B_OK );
75452a38012Sejakowatz CPPUNIT_ASSERT( dir.InitCheck() == B_NO_INIT);
75552a38012Sejakowatz CPPUNIT_ASSERT( link.MakeLinkedPath(&dir, &path)
75652a38012Sejakowatz == (ssize_t)strlen(existingDir) );
75752a38012Sejakowatz CPPUNIT_ASSERT( path.InitCheck() == B_OK );
75852a38012Sejakowatz CPPUNIT_ASSERT( string(existingDir) == path.Path() );
75952a38012Sejakowatz // absolute link, badly initialized dir
760aad997bdSTyler Dauwalder NextSubTest();
76152a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(dirLink) == B_OK );
76252a38012Sejakowatz CPPUNIT_ASSERT( dir.SetTo(nonExisting) == B_ENTRY_NOT_FOUND);
76352a38012Sejakowatz CPPUNIT_ASSERT( link.MakeLinkedPath(&dir, &path)
76452a38012Sejakowatz == (ssize_t)strlen(existingDir) );
76552a38012Sejakowatz CPPUNIT_ASSERT( path.InitCheck() == B_OK );
76652a38012Sejakowatz CPPUNIT_ASSERT( string(existingDir) == path.Path() );
76752a38012Sejakowatz link.Unset();
76852a38012Sejakowatz path.Unset();
76952a38012Sejakowatz dir.Unset();
77052a38012Sejakowatz // relative link, uninitialized dir
771aad997bdSTyler Dauwalder NextSubTest();
77252a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(relDirLink) == B_OK );
77352a38012Sejakowatz CPPUNIT_ASSERT( dir.InitCheck() == B_NO_INIT);
77452a38012Sejakowatz CPPUNIT_ASSERT( equals(link.MakeLinkedPath(&dir, &path), B_NO_INIT,
77552a38012Sejakowatz B_BAD_VALUE) );
77652a38012Sejakowatz link.Unset();
77752a38012Sejakowatz // relative link, badly initialized dir
778aad997bdSTyler Dauwalder NextSubTest();
77952a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(relDirLink) == B_OK );
78052a38012Sejakowatz CPPUNIT_ASSERT( dir.SetTo(nonExisting) == B_ENTRY_NOT_FOUND);
78152a38012Sejakowatz CPPUNIT_ASSERT( equals(link.MakeLinkedPath(&dir, &path), B_NO_INIT,
78252a38012Sejakowatz B_BAD_VALUE) );
78352a38012Sejakowatz link.Unset();
78452a38012Sejakowatz path.Unset();
78552a38012Sejakowatz dir.Unset();
78652a38012Sejakowatz // bad args
787aad997bdSTyler Dauwalder NextSubTest();
78852a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(dirLink) == B_OK );
78952a38012Sejakowatz CPPUNIT_ASSERT( dir.SetTo("/boot") == B_OK);
79052a38012Sejakowatz // R5: crashs, when passing a NULL path
791aad997bdSTyler Dauwalder #if !TEST_R5
79252a38012Sejakowatz CPPUNIT_ASSERT( link.MakeLinkedPath(&dir, NULL) == B_BAD_VALUE );
79352a38012Sejakowatz #endif
79452a38012Sejakowatz
79552a38012Sejakowatz CPPUNIT_ASSERT( link.MakeLinkedPath((const BDirectory*)NULL, &path)
79652a38012Sejakowatz == B_BAD_VALUE );
79752a38012Sejakowatz // R5: crashs, when passing a NULL path
798aad997bdSTyler Dauwalder #if !TEST_R5
79952a38012Sejakowatz CPPUNIT_ASSERT( link.MakeLinkedPath((const BDirectory*)NULL, NULL)
80052a38012Sejakowatz == B_BAD_VALUE );
80152a38012Sejakowatz #endif
80252a38012Sejakowatz link.Unset();
80352a38012Sejakowatz path.Unset();
80452a38012Sejakowatz dir.Unset();
80552a38012Sejakowatz }
80652a38012Sejakowatz
80752a38012Sejakowatz // IsAbsoluteTest
80852a38012Sejakowatz void
IsAbsoluteTest()80952a38012Sejakowatz SymLinkTest::IsAbsoluteTest()
81052a38012Sejakowatz {
81152a38012Sejakowatz const char *dirLink = dirLinkname;
81252a38012Sejakowatz const char *relFileLink = relFileLinkname;
81352a38012Sejakowatz const char *existingDir = existingDirname;
81452a38012Sejakowatz const char *existingFile = existingFilename;
81552a38012Sejakowatz const char *nonExisting = nonExistingDirname;
81652a38012Sejakowatz BSymLink link;
81752a38012Sejakowatz // uninitialized
818aad997bdSTyler Dauwalder NextSubTest();
81952a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_NO_INIT );
82052a38012Sejakowatz CPPUNIT_ASSERT( link.IsAbsolute() == false );
82152a38012Sejakowatz link.Unset();
82252a38012Sejakowatz // existing absolute dir link
823aad997bdSTyler Dauwalder NextSubTest();
82452a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(dirLink) == B_OK );
82552a38012Sejakowatz CPPUNIT_ASSERT( link.IsAbsolute() == true );
82652a38012Sejakowatz link.Unset();
82752a38012Sejakowatz // existing relative file link
828aad997bdSTyler Dauwalder NextSubTest();
82952a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(relFileLink) == B_OK );
83052a38012Sejakowatz CPPUNIT_ASSERT( link.IsAbsolute() == false );
83152a38012Sejakowatz link.Unset();
83252a38012Sejakowatz // non-existing link
833aad997bdSTyler Dauwalder NextSubTest();
83452a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(nonExisting) == B_ENTRY_NOT_FOUND );
83552a38012Sejakowatz CPPUNIT_ASSERT( link.IsAbsolute() == false );
83652a38012Sejakowatz link.Unset();
83752a38012Sejakowatz // dir
838aad997bdSTyler Dauwalder NextSubTest();
83952a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(existingDir) == B_OK );
84052a38012Sejakowatz CPPUNIT_ASSERT( link.IsAbsolute() == false );
84152a38012Sejakowatz link.Unset();
84252a38012Sejakowatz // file
843aad997bdSTyler Dauwalder NextSubTest();
84452a38012Sejakowatz CPPUNIT_ASSERT( link.SetTo(existingFile) == B_OK );
84552a38012Sejakowatz CPPUNIT_ASSERT( link.IsAbsolute() == false );
84652a38012Sejakowatz link.Unset();
84752a38012Sejakowatz }
84852a38012Sejakowatz
84952a38012Sejakowatz // AssignmentTest
85052a38012Sejakowatz void
AssignmentTest()85152a38012Sejakowatz SymLinkTest::AssignmentTest()
85252a38012Sejakowatz {
85352a38012Sejakowatz const char *dirLink = dirLinkname;
85452a38012Sejakowatz const char *fileLink = fileLinkname;
85552a38012Sejakowatz // 1. copy constructor
85652a38012Sejakowatz // uninitialized
857aad997bdSTyler Dauwalder NextSubTest();
85852a38012Sejakowatz {
85952a38012Sejakowatz BSymLink link;
86052a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_NO_INIT );
86152a38012Sejakowatz BSymLink link2(link);
86252a38012Sejakowatz // R5 returns B_BAD_VALUE instead of B_NO_INIT
86352a38012Sejakowatz CPPUNIT_ASSERT( equals(link2.InitCheck(), B_BAD_VALUE, B_NO_INIT) );
86452a38012Sejakowatz }
86552a38012Sejakowatz // existing dir link
866aad997bdSTyler Dauwalder NextSubTest();
86752a38012Sejakowatz {
86852a38012Sejakowatz BSymLink link(dirLink);
86952a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
87052a38012Sejakowatz BSymLink link2(link);
87152a38012Sejakowatz CPPUNIT_ASSERT( link2.InitCheck() == B_OK );
87252a38012Sejakowatz }
87352a38012Sejakowatz // existing file link
874aad997bdSTyler Dauwalder NextSubTest();
87552a38012Sejakowatz {
87652a38012Sejakowatz BSymLink link(fileLink);
87752a38012Sejakowatz CPPUNIT_ASSERT( link.InitCheck() == B_OK );
87852a38012Sejakowatz BSymLink link2(link);
87952a38012Sejakowatz CPPUNIT_ASSERT( link2.InitCheck() == B_OK );
88052a38012Sejakowatz }
88152a38012Sejakowatz
88252a38012Sejakowatz // 2. assignment operator
88352a38012Sejakowatz // uninitialized
884aad997bdSTyler Dauwalder NextSubTest();
88552a38012Sejakowatz {
88652a38012Sejakowatz BSymLink link;
88752a38012Sejakowatz BSymLink link2;
88852a38012Sejakowatz link2 = link;
88952a38012Sejakowatz // R5 returns B_BAD_VALUE instead of B_NO_INIT
89052a38012Sejakowatz CPPUNIT_ASSERT( equals(link2.InitCheck(), B_BAD_VALUE, B_NO_INIT) );
89152a38012Sejakowatz }
892aad997bdSTyler Dauwalder NextSubTest();
89352a38012Sejakowatz {
89452a38012Sejakowatz BSymLink link;
89552a38012Sejakowatz BSymLink link2(dirLink);
89652a38012Sejakowatz link2 = link;
89752a38012Sejakowatz // R5 returns B_BAD_VALUE instead of B_NO_INIT
89852a38012Sejakowatz CPPUNIT_ASSERT( equals(link2.InitCheck(), B_BAD_VALUE, B_NO_INIT) );
89952a38012Sejakowatz }
90052a38012Sejakowatz // existing dir link
901aad997bdSTyler Dauwalder NextSubTest();
90252a38012Sejakowatz {
90352a38012Sejakowatz BSymLink link(dirLink);
90452a38012Sejakowatz BSymLink link2;
90552a38012Sejakowatz link2 = link;
90652a38012Sejakowatz CPPUNIT_ASSERT( link2.InitCheck() == B_OK );
90752a38012Sejakowatz }
90852a38012Sejakowatz // existing file link
909aad997bdSTyler Dauwalder NextSubTest();
91052a38012Sejakowatz {
91152a38012Sejakowatz BSymLink link(fileLink);
91252a38012Sejakowatz BSymLink link2;
91352a38012Sejakowatz link2 = link;
91452a38012Sejakowatz CPPUNIT_ASSERT( link2.InitCheck() == B_OK );
91552a38012Sejakowatz }
91652a38012Sejakowatz }
91752a38012Sejakowatz
918