Add sqlite3 backend hack for android
[oweals/minetest.git] / src / test.cpp
index ddbcee7f2815c800f71bd18d5a7fd5feca3b0a5a..8a080454b6bf7f447bc66727360c6f3dd8d37b2b 100644 (file)
@@ -70,20 +70,18 @@ with this program; if not, write to the Free Software Foundation, Inc.,
        A few item and node definitions for those tests that need them
 */
 
-#define CONTENT_STONE 0
-#define CONTENT_GRASS 0x800
-#define CONTENT_TORCH 100
+static content_t CONTENT_STONE;
+static content_t CONTENT_GRASS;
+static content_t CONTENT_TORCH;
 
 void define_some_nodes(IWritableItemDefManager *idef, IWritableNodeDefManager *ndef)
 {
-       content_t i;
        ItemDefinition itemdef;
        ContentFeatures f;
 
        /*
                Stone
        */
-       i = CONTENT_STONE;
        itemdef = ItemDefinition();
        itemdef.type = ITEM_NODE;
        itemdef.name = "default:stone";
@@ -99,12 +97,11 @@ void define_some_nodes(IWritableItemDefManager *idef, IWritableNodeDefManager *n
                f.tiledef[i].name = "default_stone.png";
        f.is_ground_content = true;
        idef->registerItem(itemdef);
-       ndef->set(i, f);
+       CONTENT_STONE = ndef->set(f.name, f);
 
        /*
                Grass
        */
-       i = CONTENT_GRASS;
        itemdef = ItemDefinition();
        itemdef.type = ITEM_NODE;
        itemdef.name = "default:dirt_with_grass";
@@ -122,12 +119,11 @@ void define_some_nodes(IWritableItemDefManager *idef, IWritableNodeDefManager *n
                f.tiledef[i].name = "default_dirt.png^default_grass_side.png";
        f.is_ground_content = true;
        idef->registerItem(itemdef);
-       ndef->set(i, f);
+       CONTENT_GRASS = ndef->set(f.name, f);
 
        /*
                Torch (minimal definition for lighting tests)
        */
-       i = CONTENT_TORCH;
        itemdef = ItemDefinition();
        itemdef.type = ITEM_NODE;
        itemdef.name = "default:torch";
@@ -138,7 +134,7 @@ void define_some_nodes(IWritableItemDefManager *idef, IWritableNodeDefManager *n
        f.sunlight_propagates = true;
        f.light_source = LIGHT_MAX-1;
        idef->registerItem(itemdef);
-       ndef->set(i, f);
+       CONTENT_TORCH = ndef->set(f.name, f);
 }
 
 struct TestBase
@@ -161,6 +157,8 @@ struct TestUtilities: public TestBase
                UASSERT(fabs(wrapDegrees(-0.5) - (-0.5)) < 0.001);
                UASSERT(fabs(wrapDegrees(-365.5) - (-5.5)) < 0.001);
                UASSERT(lowercase("Foo bAR") == "foo bar");
+               UASSERT(trim("\n \t\r  Foo bAR  \r\n\t\t  ") == "Foo bAR");
+               UASSERT(trim("\n \t\r    \r\n\t\t  ") == "");
                UASSERT(is_yes("YeS") == true);
                UASSERT(is_yes("") == false);
                UASSERT(is_yes("FAlse") == false);
@@ -173,6 +171,10 @@ struct TestUtilities: public TestBase
                UASSERT(removeStringEnd("bc", ends) == "b");
                UASSERT(removeStringEnd("12c", ends) == "12");
                UASSERT(removeStringEnd("foo", ends) == "");
+               UASSERT(urlencode("\"Aardvarks lurk, OK?\"")
+                               == "%22Aardvarks%20lurk%2C%20OK%3F%22");
+               UASSERT(urldecode("%22Aardvarks%20lurk%2C%20OK%3F%22")
+                               == "\"Aardvarks lurk, OK?\"");
        }
 };
 
@@ -616,7 +618,7 @@ struct TestCompress: public TestBase
                fromdata[3]=1;
                
                std::ostringstream os(std::ios_base::binary);
-               compress(fromdata, os, SER_FMT_VER_HIGHEST);
+               compress(fromdata, os, SER_FMT_VER_HIGHEST_READ);
 
                std::string str_out = os.str();
                
@@ -631,7 +633,7 @@ struct TestCompress: public TestBase
                std::istringstream is(str_out, std::ios_base::binary);
                std::ostringstream os2(std::ios_base::binary);
 
-               decompress(is, os2, SER_FMT_VER_HIGHEST);
+               decompress(is, os2, SER_FMT_VER_HIGHEST_READ);
                std::string str_out2 = os2.str();
 
                infostream<<"decompress: ";
@@ -1504,37 +1506,46 @@ struct TestSocket: public TestBase
        void Run()
        {
                const int port = 30003;
+               Address address(0,0,0,0, port);
+               Address address6((IPv6AddressBytes*) NULL, port);
 
                // IPv6 socket test
                {
                        UDPSocket socket6(true);
-                       socket6.Bind(port);
+                       socket6.Bind(address6);
 
                        const char sendbuffer[] = "hello world!";
                        IPv6AddressBytes bytes;
                        bytes.bytes[15] = 1;
-                       socket6.Send(Address(&bytes, port), sendbuffer, sizeof(sendbuffer));
+                       
+                       try {
+                               socket6.Send(Address(&bytes, port), sendbuffer, sizeof(sendbuffer));
 
-                       sleep_ms(50);
+                               sleep_ms(50);
 
-                       char rcvbuffer[256];
-                       memset(rcvbuffer, 0, sizeof(rcvbuffer));
-                       Address sender;
-                       for(;;)
-                       {
-                               int bytes_read = socket6.Receive(sender, rcvbuffer, sizeof(rcvbuffer));
-                               if(bytes_read < 0)
-                                       break;
+                               char rcvbuffer[256];
+                               memset(rcvbuffer, 0, sizeof(rcvbuffer));
+                               Address sender;
+                               for(;;)
+                               {
+                                       int bytes_read = socket6.Receive(sender, rcvbuffer, sizeof(rcvbuffer));
+                                       if(bytes_read < 0)
+                                               break;
+                               }
+                               //FIXME: This fails on some systems
+                               UASSERT(strncmp(sendbuffer, rcvbuffer, sizeof(sendbuffer))==0);
+                               UASSERT(memcmp(sender.getAddress6().sin6_addr.s6_addr, Address(&bytes, 0).getAddress6().sin6_addr.s6_addr, 16) == 0);
                        }
-                       //FIXME: This fails on some systems
-                       UASSERT(strncmp(sendbuffer, rcvbuffer, sizeof(sendbuffer))==0);
-                       UASSERT(memcmp(sender.getAddress6().sin6_addr.s6_addr, Address(&bytes, 0).getAddress6().sin6_addr.s6_addr, 16) == 0);
+                       catch (SendFailedException e) {
+                               errorstream << "IPv6 support enabled but not available!" << std::endl;
+                       }
+                       
                }
 
                // IPv4 socket test
                {
                        UDPSocket socket(false);
-                       socket.Bind(port);
+                       socket.Bind(address);
 
                        const char sendbuffer[] = "hello world!";
                        socket.Send(Address(127,0,0,1,port), sendbuffer, sizeof(sendbuffer));
@@ -1654,7 +1665,8 @@ struct TestConnection: public TestBase
                
                infostream<<"** Creating server Connection"<<std::endl;
                con::Connection server(proto_id, 512, 5.0, false, &hand_server);
-               server.Serve(30001);
+               Address address(0,0,0,0, 30001);
+               server.Serve(address);
                
                infostream<<"** Creating client Connection"<<std::endl;
                con::Connection client(proto_id, 512, 5.0, false, &hand_client);