diff options
Diffstat (limited to 'indra/llprimitive')
| -rw-r--r-- | indra/llprimitive/llmediaentry.cpp | 1 | ||||
| -rw-r--r-- | indra/llprimitive/llprimitive.cpp | 193 | ||||
| -rw-r--r-- | indra/llprimitive/llprimtexturelist.cpp | 19 | ||||
| -rw-r--r-- | indra/llprimitive/lltextureentry.cpp | 8 | ||||
| -rw-r--r-- | indra/llprimitive/lltextureentry.h | 4 | ||||
| -rw-r--r-- | indra/llprimitive/tests/llmediaentry_test.cpp | 118 |
6 files changed, 280 insertions, 63 deletions
diff --git a/indra/llprimitive/llmediaentry.cpp b/indra/llprimitive/llmediaentry.cpp index fa04bf80e7..701300163a 100644 --- a/indra/llprimitive/llmediaentry.cpp +++ b/indra/llprimitive/llmediaentry.cpp @@ -164,6 +164,7 @@ void LLMediaEntry::asLLSD(LLSD& sd) const // "security" fields sd[WHITELIST_ENABLE_KEY] = mWhiteListEnable; + sd.erase(WHITELIST_KEY); for (U32 i=0; i<mWhiteList.size(); i++) { sd[WHITELIST_KEY].append(mWhiteList[i]); diff --git a/indra/llprimitive/llprimitive.cpp b/indra/llprimitive/llprimitive.cpp index b102254b62..5ad758072c 100644 --- a/indra/llprimitive/llprimitive.cpp +++ b/indra/llprimitive/llprimitive.cpp @@ -43,7 +43,7 @@ #include "llvolumemgr.h" #include "llstring.h" #include "lldatapacker.h" -#include "llsdutil.h" +#include "llsdutil_math.h" #include "llprimtexturelist.h" /** @@ -746,16 +746,201 @@ BOOL LLPrimitive::setVolume(const LLVolumeParams &volume_params, const S32 detai U32 old_face_mask = mVolumep->mFaceMask; + S32 face_bit = 0; + S32 cur_mask = 0; + + // Grab copies of the old faces from the original shape, ordered by type. + // We will use these to figure out what old texture info gets mapped to new + // faces in the new shape. + std::vector<LLProfile::Face> old_faces; + for (S32 face = 0; face < mVolumep->getNumFaces(); face++) + { + old_faces.push_back(mVolumep->getProfile().mFaces[face]); + } + + // Copy the old texture info off to the side, but not in the order in which + // they live in the mTextureList, rather in order of ther "face id" which + // is the corresponding value of LLVolueParams::LLProfile::mFaces::mIndex. + // + // Hence, some elements of old_tes::mEntryList will be invalid. It is + // initialized to a size of 9 (max number of possible faces on a volume?) + // and only the ones with valid types are filled in. + LLPrimTextureList old_tes; + old_tes.setSize(9); + for (face_bit = 0; face_bit < 9; face_bit++) + { + cur_mask = 0x1 << face_bit; + if (old_face_mask & cur_mask) + { + S32 te_index = face_index_from_id(cur_mask, old_faces); + old_tes.copyTexture(face_bit, *(getTE(te_index))); + //llinfos << face_bit << ":" << te_index << ":" << old_tes[face_bit].getID() << llendl; + } + } + + // build the new object sVolumeManager->unrefVolume(mVolumep); mVolumep = volumep; U32 new_face_mask = mVolumep->mFaceMask; - if (old_face_mask != new_face_mask) + S32 i; + + if (old_face_mask == new_face_mask) { + // nothing to do + return TRUE; + } + + if (mVolumep->getNumFaces() == 0 && new_face_mask != 0) + { + llwarns << "Object with 0 faces found...INCORRECT!" << llendl; setNumTEs(mVolumep->getNumFaces()); + return TRUE; + } + + // initialize face_mapping + S32 face_mapping[9]; + for (face_bit = 0; face_bit < 9; face_bit++) + { + face_mapping[face_bit] = face_bit; + } + + // The new shape may have more faces than the original, but we can't just + // add them to the end -- the ordering matters and it may be that we must + // insert the new faces in the middle of the list. When we add a face it + // will pick up the texture/color info of one of the old faces an so we + // now figure out which old face info gets mapped to each new face, and + // store in the face_mapping lookup table. + for (face_bit = 0; face_bit < 9; face_bit++) + { + cur_mask = 0x1 << face_bit; + if (!(new_face_mask & cur_mask)) + { + // Face doesn't exist in new map. + face_mapping[face_bit] = -1; + continue; + } + else if (old_face_mask & cur_mask) + { + // Face exists in new and old map. + face_mapping[face_bit] = face_bit; + continue; + } + + // OK, how we've got a mismatch, where we have to fill a new face with one from + // the old face. + if (cur_mask & (LL_FACE_PATH_BEGIN | LL_FACE_PATH_END | LL_FACE_INNER_SIDE)) + { + // It's a top/bottom/hollow interior face. + if (old_face_mask & LL_FACE_PATH_END) + { + face_mapping[face_bit] = 1; + continue; + } + else + { + S32 cur_outer_mask = LL_FACE_OUTER_SIDE_0; + for (i = 0; i < 4; i++) + { + if (old_face_mask & cur_outer_mask) + { + face_mapping[face_bit] = 5 + i; + break; + } + cur_outer_mask <<= 1; + } + if (i == 4) + { + llwarns << "No path end or outer face in volume!" << llendl; + } + continue; + } + } + + if (cur_mask & (LL_FACE_PROFILE_BEGIN | LL_FACE_PROFILE_END)) + { + // A cut slice. Use the hollow interior if we have it. + if (old_face_mask & LL_FACE_INNER_SIDE) + { + face_mapping[face_bit] = 2; + continue; + } + + // No interior, use the bottom face. + // Could figure out which of the outer faces was nearest, but that would be harder. + if (old_face_mask & LL_FACE_PATH_END) + { + face_mapping[face_bit] = 1; + continue; + } + else + { + S32 cur_outer_mask = LL_FACE_OUTER_SIDE_0; + for (i = 0; i < 4; i++) + { + if (old_face_mask & cur_outer_mask) + { + face_mapping[face_bit] = 5 + i; + break; + } + cur_outer_mask <<= 1; + } + if (i == 4) + { + llwarns << "No path end or outer face in volume!" << llendl; + } + continue; + } + } + + // OK, the face that's missing is an outer face... + // Pull from the nearest adjacent outer face (there's always guaranteed to be one... + S32 cur_outer = face_bit - 5; + S32 min_dist = 5; + S32 min_outer_bit = -1; + S32 i; + for (i = 0; i < 4; i++) + { + if (old_face_mask & (LL_FACE_OUTER_SIDE_0 << i)) + { + S32 dist = abs(i - cur_outer); + if (dist < min_dist) + { + min_dist = dist; + min_outer_bit = i + 5; + } + } + } + if (-1 == min_outer_bit) + { + llinfos << (LLVolume *)mVolumep << llendl; + llwarns << "Bad! No outer faces, impossible!" << llendl; + } + face_mapping[face_bit] = min_outer_bit; } + + setNumTEs(mVolumep->getNumFaces()); + for (face_bit = 0; face_bit < 9; face_bit++) + { + // For each possible face type on the new shape we check to see if that + // face exists and if it does we create a texture entry that is a copy + // of one of the originals. Since the originals might not have a + // matching face, we use the face_mapping lookup table to figure out + // which face information to copy. + cur_mask = 0x1 << face_bit; + if (new_face_mask & cur_mask) + { + if (-1 == face_mapping[face_bit]) + { + llwarns << "No mapping from old face to new face!" << llendl; + } + + S32 te_num = face_index_from_id(cur_mask, mVolumep->getProfile().mFaces); + setTE(te_num, *(old_tes.getTexture(face_mapping[face_bit]))); + } + } return TRUE; } @@ -1715,10 +1900,10 @@ LLSD LLLightImageParams::asLLSD() const bool LLLightImageParams::fromLLSD(LLSD& sd) { - if (sd.has("texture") && sd.has("params") && sd["params"].size() == 3) + if (sd.has("texture")) { setLightTexture( sd["texture"] ); - setParams( LLVector3(sd["params"][0].asReal(), sd["params"][1].asReal(), sd["params"][2].asReal()) ); + setParams( LLVector3( sd["params"] ) ); return true; } diff --git a/indra/llprimitive/llprimtexturelist.cpp b/indra/llprimitive/llprimtexturelist.cpp index d03150fc78..1c7de95975 100644 --- a/indra/llprimitive/llprimtexturelist.cpp +++ b/indra/llprimitive/llprimtexturelist.cpp @@ -135,13 +135,12 @@ S32 LLPrimTextureList::copyTexture(const U8 index, const LLTextureEntry& te) { if (S32(index) >= mEntryList.size()) { - // TODO -- assert here S32 current_size = mEntryList.size(); - llerrs << "index = " << S32(index) << " current_size = " << current_size << llendl; + llwarns << "ignore copy of index = " << S32(index) << " into texture entry list of size = " << current_size << llendl; return TEM_CHANGE_NONE; } - // we're changing an existing entry + // we're changing an existing entry llassert(mEntryList[index]); delete (mEntryList[index]); if (&te) @@ -387,8 +386,18 @@ void LLPrimTextureList::setSize(S32 new_size) mEntryList.resize(new_size); for (S32 index = current_size; index < new_size; ++index) { - LLTextureEntry* new_entry = LLPrimTextureList::newTextureEntry(); - mEntryList[index] = new_entry; + if (current_size > 0 + && mEntryList[current_size - 1]) + { + // copy the last valid entry for the new one + mEntryList[index] = mEntryList[current_size - 1]->newCopy(); + } + else + { + // no valid enries to copy, so we new one up + LLTextureEntry* new_entry = LLPrimTextureList::newTextureEntry(); + mEntryList[index] = new_entry; + } } } else if (new_size < current_size) diff --git a/indra/llprimitive/lltextureentry.cpp b/indra/llprimitive/lltextureentry.cpp index b534939dfc..f75f1d9b8c 100644 --- a/indra/llprimitive/lltextureentry.cpp +++ b/indra/llprimitive/lltextureentry.cpp @@ -35,7 +35,7 @@ #include "lluuid.h" #include "llmediaentry.h" #include "lltextureentry.h" -#include "llsdutil.h" +#include "llsdutil_math.h" #include "v4color.h" const U8 DEFAULT_BUMP_CODE = 0; // no bump or shininess @@ -646,3 +646,9 @@ LLUUID LLTextureEntry::getAgentIDFromMediaVersionString(const std::string &versi } return id; } + +//static +bool LLTextureEntry::isMediaVersionString(const std::string &version_string) +{ + return std::string::npos != version_string.find(MEDIA_VERSION_STRING_PREFIX); +} diff --git a/indra/llprimitive/lltextureentry.h b/indra/llprimitive/lltextureentry.h index 8d2834f78c..d6366b9bb2 100644 --- a/indra/llprimitive/lltextureentry.h +++ b/indra/llprimitive/lltextureentry.h @@ -171,7 +171,9 @@ public: static U32 getVersionFromMediaVersionString(const std::string &version_string); // Given a media version string, return the UUID of the agent static LLUUID getAgentIDFromMediaVersionString(const std::string &version_string); - + // Return whether or not the given string is actually a media version + static bool isMediaVersionString(const std::string &version_string); + // Media flags enum { MF_NONE = 0x0, MF_HAS_MEDIA = 0x1 }; diff --git a/indra/llprimitive/tests/llmediaentry_test.cpp b/indra/llprimitive/tests/llmediaentry_test.cpp index 72478d0459..cd9608d56b 100644 --- a/indra/llprimitive/tests/llmediaentry_test.cpp +++ b/indra/llprimitive/tests/llmediaentry_test.cpp @@ -157,7 +157,7 @@ namespace tut void ensure_llsd_equals(const std::string& msg, const LLSD& expected, const LLSD& actual) { - if (! llsd_equals(expected, actual)) + if (!tut::llsd_equals(expected, actual)) { std::string message = msg; message += ": actual: "; @@ -223,8 +223,7 @@ namespace tut { set_test_name("Test LLMediaEntry Instantiation"); LLMediaEntry entry; - ensure_llsd_equals(get_test_name(), defaultMediaEntryLLSD, entry.asLLSD()); - + ensure_llsd_equals(get_test_name() + " failed", defaultMediaEntryLLSD, entry.asLLSD()); } template<> template<> @@ -251,12 +250,27 @@ namespace tut ensure_llsd_equals(get_test_name() + " failed", golden, entry.asLLSD()); } + template<> template<> + void object::test<4>() + { + set_test_name("Test LLMediaEntry::asLLSD()"); + LLMediaEntry entry; + LLSD sd; + // Put some cruft in the LLSD + sd[LLMediaEntry::CURRENT_URL_KEY] = "http://www.example.com"; + LLSD whitelist; + whitelist.append("*.example.com"); + sd[LLMediaEntry::WHITELIST_KEY] = whitelist; + entry.asLLSD(sd); + ensure_llsd_equals(get_test_name() + " failed", defaultMediaEntryLLSD, sd); + } + // limit tests const char *URL_OK = "http://www.example.com"; const char *URL_TOO_BIG = "http://www.example.com.qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"; template<> template<> - void object::test<4>() + void object::test<5>() { set_test_name("Test Limits on setting current URL"); LLMediaEntry entry; @@ -267,7 +281,7 @@ namespace tut } template<> template<> - void object::test<5>() + void object::test<6>() { set_test_name("Test Limits on setting home URL"); LLMediaEntry entry; @@ -278,7 +292,7 @@ namespace tut } template<> template<> - void object::test<6>() + void object::test<7>() { set_test_name("Test Limits on setting whitelist"); @@ -292,7 +306,7 @@ namespace tut } template<> template<> - void object::test<7>() + void object::test<8>() { set_test_name("Test Limits on setting whitelist too big"); @@ -307,7 +321,7 @@ namespace tut } template<> template<> - void object::test<8>() + void object::test<9>() { set_test_name("Test Limits on setting whitelist too many"); @@ -323,7 +337,7 @@ namespace tut } template<> template<> - void object::test<9>() + void object::test<10>() { set_test_name("Test to make sure both setWhiteList() functions behave the same"); @@ -341,7 +355,7 @@ namespace tut } template<> template<> - void object::test<10>() + void object::test<11>() { set_test_name("Test to make sure both setWhiteList() functions behave the same"); @@ -362,7 +376,7 @@ namespace tut } template<> template<> - void object::test<11>() + void object::test<12>() { set_test_name("Test to make sure both setWhiteList() functions behave the same"); @@ -386,99 +400,99 @@ namespace tut // Check the "empty whitelist" case template<> template<> - void object::test<12>() { whitelist_test("", "http://www.example.com", true); } + void object::test<13>() { whitelist_test("", "http://www.example.com", true); } // Check the "missing scheme" case template<> template<> - void object::test<13>() { whitelist_test("www.example.com", "http://www.example.com", true); } + void object::test<14>() { whitelist_test("www.example.com", "http://www.example.com", true); } // Check the "exactly the same" case template<> template<> - void object::test<14>() { whitelist_test("http://example.com", "http://example.com", true); } + void object::test<15>() { whitelist_test("http://example.com", "http://example.com", true); } // Check the enable flag template<> template<> - void object::test<15>() { whitelist_test(false, "www.example.com", "http://www.secondlife.com", true); } + void object::test<16>() { whitelist_test(false, "www.example.com", "http://www.secondlife.com", true); } template<> template<> - void object::test<16>() { whitelist_test(true, "www.example.com", "http://www.secondlife.com", false); } + void object::test<17>() { whitelist_test(true, "www.example.com", "http://www.secondlife.com", false); } // Check permutations of trailing slash: template<> template<> - void object::test<17>() { whitelist_test("http://www.example.com", "http://www.example.com/", true); } + void object::test<18>() { whitelist_test("http://www.example.com", "http://www.example.com/", true); } template<> template<> - void object::test<18>() { whitelist_test("http://www.example.com/", "http://www.example.com/", true); } + void object::test<19>() { whitelist_test("http://www.example.com/", "http://www.example.com/", true); } template<> template<> - void object::test<19>() { whitelist_test("http://www.example.com/", "http://www.example.com", false); } + void object::test<20>() { whitelist_test("http://www.example.com/", "http://www.example.com", false); } template<> template<> - void object::test<20>() { whitelist_test("http://www.example.com", "http://www.example.com/foobar", true); } + void object::test<21>() { whitelist_test("http://www.example.com", "http://www.example.com/foobar", true); } template<> template<> - void object::test<21>() { whitelist_test("http://www.example.com/", "http://www.example.com/foobar", false); } + void object::test<22>() { whitelist_test("http://www.example.com/", "http://www.example.com/foobar", false); } // More cases... template<> template<> - void object::test<22>() { whitelist_test("http://example.com", "http://example.com/wiki", true); } + void object::test<23>() { whitelist_test("http://example.com", "http://example.com/wiki", true); } template<> template<> - void object::test<23>() { whitelist_test("www.example.com", "http://www.example.com/help", true); } + void object::test<24>() { whitelist_test("www.example.com", "http://www.example.com/help", true); } template<> template<> - void object::test<24>() { whitelist_test("http://www.example.com", "http://wwwexample.com", false); } + void object::test<25>() { whitelist_test("http://www.example.com", "http://wwwexample.com", false); } template<> template<> - void object::test<25>() { whitelist_test("http://www.example.com", "http://www.example.com/wiki", true); } + void object::test<26>() { whitelist_test("http://www.example.com", "http://www.example.com/wiki", true); } template<> template<> - void object::test<26>() { whitelist_test("example.com", "http://wwwexample.com", false); } + void object::test<27>() { whitelist_test("example.com", "http://wwwexample.com", false); } template<> template<> - void object::test<27>() { whitelist_test("http://www.example.com/", "http://www.amazon.com/wiki", false); } + void object::test<28>() { whitelist_test("http://www.example.com/", "http://www.amazon.com/wiki", false); } template<> template<> - void object::test<28>() { whitelist_test("www.example.com", "http://www.amazon.com", false); } + void object::test<29>() { whitelist_test("www.example.com", "http://www.amazon.com", false); } // regexp cases template<> template<> - void object::test<29>() { whitelist_test("*.example.com", "http://www.example.com", true); } + void object::test<30>() { whitelist_test("*.example.com", "http://www.example.com", true); } template<> template<> - void object::test<30>() { whitelist_test("*.example.com", "http://www.amazon.com", false); } + void object::test<31>() { whitelist_test("*.example.com", "http://www.amazon.com", false); } template<> template<> - void object::test<31>() { whitelist_test("*.example.com", "http://www.example.com/foo/bar", true); } + void object::test<32>() { whitelist_test("*.example.com", "http://www.example.com/foo/bar", true); } template<> template<> - void object::test<32>() { whitelist_test("*.example.com", "http:/example.com/foo/bar", false); } + void object::test<33>() { whitelist_test("*.example.com", "http:/example.com/foo/bar", false); } template<> template<> - void object::test<33>() { whitelist_test("*example.com", "http://example.com/foo/bar", true); } + void object::test<34>() { whitelist_test("*example.com", "http://example.com/foo/bar", true); } template<> template<> - void object::test<34>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?example.com", false); } + void object::test<35>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?example.com", false); } template<> template<> - void object::test<35>() { whitelist_test("example.com", "http://my.virus.com/foo/bar?example.com", false); } + void object::test<36>() { whitelist_test("example.com", "http://my.virus.com/foo/bar?example.com", false); } template<> template<> - void object::test<36>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?*example.com", false); } + void object::test<37>() { whitelist_test("*example.com", "http://my.virus.com/foo/bar?*example.com", false); } template<> template<> - void object::test<37>() { whitelist_test("http://*example.com", "http://www.example.com", true); } + void object::test<38>() { whitelist_test("http://*example.com", "http://www.example.com", true); } template<> template<> - void object::test<38>() { whitelist_test("http://*.example.com", "http://www.example.com", true); } + void object::test<39>() { whitelist_test("http://*.example.com", "http://www.example.com", true); } template<> template<> - void object::test<39>() { whitelist_test("http://*.e$?^.com", "http://www.e$?^.com", true); } + void object::test<40>() { whitelist_test("http://*.e$?^.com", "http://www.e$?^.com", true); } template<> template<> - void object::test<40>() { whitelist_test("*.example.com/foo/bar", "http://www.example.com/", false); } + void object::test<41>() { whitelist_test("*.example.com/foo/bar", "http://www.example.com/", false); } template<> template<> - void object::test<41>() { whitelist_test("*.example.com/foo/bar", "http://example.com/foo/bar", false); } + void object::test<42>() { whitelist_test("*.example.com/foo/bar", "http://example.com/foo/bar", false); } template<> template<> - void object::test<42>() { whitelist_test("http://*.example.com/foo/bar", "http://www.example.com", false); } + void object::test<43>() { whitelist_test("http://*.example.com/foo/bar", "http://www.example.com", false); } template<> template<> - void object::test<43>() { whitelist_test("http://*.example.com", "https://www.example.com", false); } + void object::test<44>() { whitelist_test("http://*.example.com", "https://www.example.com", false); } template<> template<> - void object::test<44>() { whitelist_test("http*://*.example.com", "rtsp://www.example.com", false); } + void object::test<45>() { whitelist_test("http*://*.example.com", "rtsp://www.example.com", false); } template<> template<> - void object::test<45>() { whitelist_test("http*://*.example.com", "https://www.example.com", true); } + void object::test<46>() { whitelist_test("http*://*.example.com", "https://www.example.com", true); } template<> template<> - void object::test<46>() { whitelist_test("example.com", "http://www.example.com", false); } + void object::test<47>() { whitelist_test("example.com", "http://www.example.com", false); } template<> template<> - void object::test<47>() { whitelist_test("www.example.com", "http://www.example.com:80", false); } + void object::test<48>() { whitelist_test("www.example.com", "http://www.example.com:80", false); } template<> template<> - void object::test<48>() { whitelist_test("www.example.com", "http://www.example.com", true); } + void object::test<49>() { whitelist_test("www.example.com", "http://www.example.com", true); } template<> template<> - void object::test<49>() { whitelist_test("www.example.com/", "http://www.example.com", false); } + void object::test<50>() { whitelist_test("www.example.com/", "http://www.example.com", false); } template<> template<> - void object::test<50>() { whitelist_test("www.example.com/foo/bar/*", "http://www.example.com/foo/bar/baz", true); } + void object::test<51>() { whitelist_test("www.example.com/foo/bar/*", "http://www.example.com/foo/bar/baz", true); } // Path only template<> template<> - void object::test<51>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/baz", true); } + void object::test<52>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/baz", true); } template<> template<> - void object::test<52>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/", false); } + void object::test<53>() { whitelist_test("/foo/*/baz", "http://www.example.com/foo/bar/", false); } } |
