Unreviewed, rolling out r241559 and r241566.
[WebKit-https.git] / Tools / TestWebKitAPI / Tests / WebKit / EnvironmentUtilitiesTest.cpp
1 /*
2  * Copyright (C) 2017 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #include "config.h"
27 #include "Test.h"
28
29 #include <WebKit/EnvironmentUtilities.h>
30 #include <stdlib.h>
31
32 namespace TestWebKitAPI {
33
34 const char* const environmentVariable = "DYLD_INSERT_LIBRARIES";
35 #define PROCESS_DYLIB "Process.dylib"
36 const char* const stripValue = "/" PROCESS_DYLIB;
37
38 static const char* strip(const char* input)
39 {
40     setenv(environmentVariable, input, 1);
41     WebKit::EnvironmentUtilities::stripValuesEndingWithString(environmentVariable, stripValue);
42     return getenv(environmentVariable);
43 }
44
45 TEST(WebKit, StripValuesEndingWithString)
46 {
47     EXPECT_STREQ(strip(""), "");
48     EXPECT_STREQ(strip(":"), ":");
49     EXPECT_STREQ(strip("::"), "::");
50     EXPECT_STREQ(strip(":::"), ":::");
51     EXPECT_STREQ(strip("::::"), "::::");
52     EXPECT_STREQ(strip(":::::"), ":::::");
53
54     EXPECT_STREQ(strip(PROCESS_DYLIB), PROCESS_DYLIB);
55     EXPECT_STREQ(strip(":" PROCESS_DYLIB), ":" PROCESS_DYLIB);
56     EXPECT_STREQ(strip(PROCESS_DYLIB ":"), PROCESS_DYLIB ":");
57     EXPECT_STREQ(strip(":" PROCESS_DYLIB ":"), ":" PROCESS_DYLIB ":");
58
59     EXPECT_STREQ(strip("/" PROCESS_DYLIB), nullptr);
60     EXPECT_STREQ(strip(":/" PROCESS_DYLIB), nullptr);
61     EXPECT_STREQ(strip("/" PROCESS_DYLIB ":"), nullptr);
62     EXPECT_STREQ(strip(":/" PROCESS_DYLIB ":"), ":");
63
64     EXPECT_STREQ(strip(PROCESS_DYLIB "/"), PROCESS_DYLIB "/");
65     EXPECT_STREQ(strip(":" PROCESS_DYLIB "/"), ":" PROCESS_DYLIB "/");
66     EXPECT_STREQ(strip(PROCESS_DYLIB "/:"), PROCESS_DYLIB "/:");
67     EXPECT_STREQ(strip(":" PROCESS_DYLIB "/:"), ":" PROCESS_DYLIB "/:");
68
69     EXPECT_STREQ(strip("/" PROCESS_DYLIB "/"), "/" PROCESS_DYLIB "/");
70     EXPECT_STREQ(strip(":/" PROCESS_DYLIB "/"), ":/" PROCESS_DYLIB "/");
71     EXPECT_STREQ(strip("/" PROCESS_DYLIB "/:"), "/" PROCESS_DYLIB "/:");
72     EXPECT_STREQ(strip(":/" PROCESS_DYLIB "/:"), ":/" PROCESS_DYLIB "/:");
73
74     EXPECT_STREQ(strip("/Before.dylib:/" PROCESS_DYLIB), "/Before.dylib");
75     EXPECT_STREQ(strip("/" PROCESS_DYLIB ":/After.dylib"), "/After.dylib");
76     EXPECT_STREQ(strip("/Before.dylib:/" PROCESS_DYLIB ":/After.dylib"), "/Before.dylib:/After.dylib");
77     EXPECT_STREQ(strip("/Before.dylib:/" PROCESS_DYLIB ":/Middle.dylib:/" PROCESS_DYLIB ":/After.dylib"), "/Before.dylib:/Middle.dylib:/After.dylib");
78
79     EXPECT_STREQ(strip("/" PROCESS_DYLIB ":/" PROCESS_DYLIB), nullptr);
80     EXPECT_STREQ(strip("/" PROCESS_DYLIB ":/" PROCESS_DYLIB ":/" PROCESS_DYLIB), nullptr);
81
82     EXPECT_STREQ(strip("/usr/lib/" PROCESS_DYLIB), nullptr);
83     EXPECT_STREQ(strip("/" PROCESS_DYLIB "/" PROCESS_DYLIB), nullptr);
84 }
85
86 }