1// NodeTest.h
2
3#ifndef __sk_node_test_h__
4#define __sk_node_test_h__
5
6#include "StatableTest.h"
7
8class BNode;
9
10typedef TestEntries<BNode> TestNodes;
11
12class NodeTest : public StatableTest {
13public:
14	static CppUnit::Test* Suite();
15
16	template<typename DerivedClass>
17	static inline void AddBaseClassTests(const char *prefix,
18										 CppUnit::TestSuite *suite);
19
20	virtual void CreateROStatables(TestStatables& testEntries);
21	virtual void CreateRWStatables(TestStatables& testEntries);
22	virtual void CreateUninitializedStatables(TestStatables& testEntries);
23
24	virtual void CreateRONodes(TestNodes& testEntries);
25	virtual void CreateRWNodes(TestNodes& testEntries);
26	virtual void CreateUninitializedNodes(TestNodes& testEntries);
27
28	// This function is called before *each* test added in Suite()
29	void setUp();
30
31	// This function is called after *each* test added in Suite()
32	void tearDown();
33
34	// Tests
35	void InitTest1();
36	void InitTest2();
37	void AttrDirTest();
38	void AttrTest();
39	void AttrRenameTest();
40	void AttrInfoTest();
41	void AttrBStringTest();
42	void DupTest();
43	void SyncTest();
44	void EqualityTest();
45	void AssignmentTest();
46	void LockTest(); // Locking isn't implemented for the Posix versions
47
48	// Helper functions
49	void AttrDirTest(BNode &node);
50	void AttrTest(BNode &node);
51	void AttrRenameTest(BNode &node);
52	void AttrInfoTest(BNode &node);
53	void AttrBStringTest(BNode &node);
54	void DupTest(BNode &node);
55	void LockTest(BNode &node, const char *entryName);
56	void EqualityTest(BNode &n1, BNode &n2, BNode &y1a, BNode &y1b, BNode &y2);
57
58	// entry names used by this class or derived classes
59	static	const char *		existingFilename;
60	static	const char *		existingSuperFilename;
61	static	const char *		existingRelFilename;
62	static	const char *		existingDirname;
63	static	const char *		existingSuperDirname;
64	static	const char *		existingRelDirname;
65	static	const char *		existingSubDirname;
66	static	const char *		existingRelSubDirname;
67	static	const char *		nonExistingFilename;
68	static	const char *		nonExistingDirname;
69	static	const char *		nonExistingSuperDirname;
70	static	const char *		nonExistingRelDirname;
71	static	const char *		testFilename1;
72	static	const char *		testDirname1;
73	static	const char *		tooLongEntryname;
74	static	const char *		tooLongSuperEntryname;
75	static	const char *		tooLongRelEntryname;
76	static	const char *		fileDirname;
77	static	const char *		fileSuperDirname;
78	static	const char *		fileRelDirname;
79	static	const char *		dirLinkname;
80	static	const char *		dirSuperLinkname;
81	static	const char *		dirRelLinkname;
82	static	const char *		fileLinkname;
83	static	const char *		fileSuperLinkname;
84	static	const char *		fileRelLinkname;
85	static	const char *		relDirLinkname;
86	static	const char *		relFileLinkname;
87	static	const char *		badLinkname;
88	static	const char *		cyclicLinkname1;
89	static	const char *		cyclicLinkname2;
90
91	static	const char *		allFilenames[];
92	static	const int32 		allFilenameCount;
93};
94
95// AddBaseClassTests
96template<typename DerivedClass>
97inline void
98NodeTest::AddBaseClassTests(const char *prefix, CppUnit::TestSuite *suite)
99{
100	StatableTest::AddBaseClassTests<DerivedClass>(prefix, suite);
101
102	typedef CppUnit::TestCaller<DerivedClass> TC;
103	string p(prefix);
104
105	suite->addTest( new TC(p + "BNode::AttrDir Test", &NodeTest::AttrDirTest) );
106	suite->addTest( new TC(p + "BNode::Attr Test", &NodeTest::AttrTest) );
107	suite->addTest( new TC(p + "BNode::AttrRename Test"
108#if TEST_R5
109								" (NOTE: test not actually performed with R5 libraries)"
110#endif
111								, &NodeTest::AttrRenameTest) );
112	suite->addTest( new TC(p + "BNode::AttrInfo Test", &NodeTest::AttrInfoTest) );
113	// TODO: AttrBString deadlocks entire OS (UnitTester at 100% CPU,
114	// windows don't respond to actions, won't open, OS won't even shut down)
115	//suite->addTest( new TC(p + "BNode::AttrBString Test", &NodeTest::AttrBStringTest) );
116	suite->addTest( new TC(p + "BNode::Sync Test", &NodeTest::SyncTest) );
117	suite->addTest( new TC(p + "BNode::Dup Test", &NodeTest::DupTest) );
118	suite->addTest( new TC(p + "BNode::Lock Test"
119#if TEST_OBOS /* !!!POSIX ONLY!!! */
120								" (NOTE: test not actually performed with Haiku Posix libraries)"
121#endif
122								, &NodeTest::LockTest) );
123}
124
125
126#endif	// __sk_node_test_h__
127
128
129
130
131