145 lines
4.7 KiB
C++
145 lines
4.7 KiB
C++
/*
|
|
* Copyright 2013 Google Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
// Author: poojatandon@google.com (Pooja Verlani)
|
|
|
|
// Unit test for css_url_encoder.
|
|
|
|
#include "net/instaweb/rewriter/cached_result.pb.h"
|
|
#include "net/instaweb/rewriter/public/css_url_encoder.h"
|
|
#include "net/instaweb/rewriter/public/request_properties.h"
|
|
#include "testing/base/public/gunit.h"
|
|
#include "pagespeed/kernel/base/google_message_handler.h"
|
|
#include "pagespeed/kernel/base/scoped_ptr.h" // for scoped_ptr
|
|
#include "pagespeed/kernel/base/string.h"
|
|
#include "pagespeed/kernel/base/string_util.h"
|
|
#include "pagespeed/kernel/http/user_agent_matcher.h"
|
|
|
|
|
|
namespace net_instaweb {
|
|
namespace {
|
|
|
|
class CssUrlEncoderTest : public ::testing::Test {
|
|
protected:
|
|
scoped_ptr<RequestProperties> request_properties;
|
|
CssUrlEncoder encoder_;
|
|
GoogleMessageHandler handler_;
|
|
};
|
|
|
|
TEST_F(CssUrlEncoderTest, TestEncodingAndDecoding) {
|
|
GoogleString kOriginalUrl = "a.css";
|
|
StringVector url_vector;
|
|
url_vector.push_back(kOriginalUrl);
|
|
|
|
GoogleString encoded_url;
|
|
|
|
ResourceContext context;
|
|
context.set_libwebp_level(ResourceContext::LIBWEBP_LOSSY_ONLY);
|
|
context.set_inline_images(true);
|
|
|
|
encoder_.Encode(url_vector, &context, &encoded_url);
|
|
EXPECT_EQ("A.a.css", encoded_url);
|
|
|
|
encoder_.Decode(encoded_url, &url_vector, &context, &handler_);
|
|
|
|
EXPECT_EQ(context.libwebp_level(), ResourceContext::LIBWEBP_LOSSY_ONLY);
|
|
EXPECT_TRUE(context.inline_images());
|
|
|
|
GoogleString decoded_url = url_vector.back();
|
|
EXPECT_EQ(kOriginalUrl, decoded_url);
|
|
}
|
|
|
|
TEST_F(CssUrlEncoderTest, TestEncodingAndDecodingWithoutWebpAndInlineImagesUA) {
|
|
GoogleString kOriginalUrl = "a.css";
|
|
StringVector url_vector;
|
|
url_vector.push_back(kOriginalUrl);
|
|
|
|
GoogleString encoded_url;
|
|
|
|
ResourceContext context;
|
|
context.set_libwebp_level(ResourceContext::LIBWEBP_NONE);
|
|
context.set_inline_images(false);
|
|
|
|
encoder_.Encode(url_vector, &context, &encoded_url);
|
|
EXPECT_EQ("A.a.css", encoded_url);
|
|
|
|
encoder_.Decode(encoded_url, &url_vector, &context, &handler_);
|
|
|
|
// Check the resource context returned.
|
|
EXPECT_EQ(context.libwebp_level(), ResourceContext::LIBWEBP_NONE);
|
|
EXPECT_FALSE(context.inline_images());
|
|
|
|
// Check the decoded url after encoding is the same as original.
|
|
GoogleString decoded_url = url_vector.back();
|
|
EXPECT_EQ(kOriginalUrl, decoded_url);
|
|
}
|
|
|
|
TEST_F(CssUrlEncoderTest, TestLegacyInlineWebpLossyOnlyDecoding) {
|
|
StringPiece kEncodedUrl = "W.a.css";
|
|
StringVector url_vector;
|
|
ResourceContext context;
|
|
|
|
context.set_libwebp_level(ResourceContext::LIBWEBP_LOSSY_ONLY);
|
|
context.set_inline_images(true);
|
|
encoder_.Decode(kEncodedUrl, &url_vector, &context, &handler_);
|
|
|
|
EXPECT_EQ(context.libwebp_level(), ResourceContext::LIBWEBP_LOSSY_ONLY);
|
|
EXPECT_TRUE(context.inline_images());
|
|
|
|
GoogleString decoded_url = url_vector.back();
|
|
EXPECT_EQ("a.css", decoded_url);
|
|
}
|
|
|
|
TEST_F(CssUrlEncoderTest, TestLegacyInlineWebpLossyLosslessAlphaDecoding) {
|
|
StringPiece kEncodedUrl = "V.a.css";
|
|
StringVector url_vector;
|
|
ResourceContext context;
|
|
|
|
context.set_libwebp_level(ResourceContext::LIBWEBP_LOSSY_LOSSLESS_ALPHA);
|
|
context.set_inline_images(true);
|
|
|
|
encoder_.Decode(kEncodedUrl, &url_vector, &context, &handler_);
|
|
|
|
EXPECT_EQ(context.libwebp_level(),
|
|
ResourceContext::LIBWEBP_LOSSY_LOSSLESS_ALPHA);
|
|
EXPECT_TRUE(context.inline_images());
|
|
|
|
GoogleString decoded_url = url_vector.back();
|
|
EXPECT_EQ("a.css", decoded_url);
|
|
}
|
|
|
|
TEST_F(CssUrlEncoderTest, TestSetInliningImages) {
|
|
GoogleString user_agent_string = "Chrome/";
|
|
ResourceContext resource_context;
|
|
UserAgentMatcher user_agent_matcher;
|
|
request_properties.reset(new RequestProperties(&user_agent_matcher));
|
|
request_properties->SetUserAgent(user_agent_string);
|
|
|
|
encoder_.SetInliningImages(*request_properties, &resource_context);
|
|
|
|
EXPECT_TRUE(resource_context.inline_images());
|
|
|
|
user_agent_string = "MSIE 6.0"; // An older UA to check inlining is not set.
|
|
request_properties.reset(new RequestProperties(&user_agent_matcher));
|
|
request_properties->SetUserAgent(user_agent_string);
|
|
|
|
encoder_.SetInliningImages(*request_properties, &resource_context);
|
|
|
|
EXPECT_FALSE(resource_context.inline_images());
|
|
}
|
|
|
|
} // namespace
|
|
} // namespace net_instaweb
|