blob: bde8f23f75b0561ed9b2ae1062b1a10221264fa1 [file] [log] [blame]
/*
* Copyright 2012 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: mmohabey@google.com (Megha Mohabey)
#include "net/instaweb/rewriter/public/deterministic_js_filter.h"
#include "net/instaweb/rewriter/public/rewrite_driver.h"
#include "net/instaweb/rewriter/public/rewrite_test_base.h"
#include "net/instaweb/rewriter/public/server_context.h"
#include "net/instaweb/rewriter/public/static_asset_manager.h"
#include "pagespeed/kernel/base/gtest.h"
#include "pagespeed/kernel/base/scoped_ptr.h"
#include "pagespeed/kernel/base/string.h"
#include "pagespeed/kernel/base/string_util.h"
namespace net_instaweb {
class DeterministicJsFilterTest : public RewriteTestBase {
public:
DeterministicJsFilterTest() {}
protected:
virtual void SetUp() {
RewriteTestBase::SetUp();
SetHtmlMimetype(); // Prevent insertion of CDATA tags to static JS.
deterministic_js_filter_.reset(new DeterministicJsFilter(rewrite_driver()));
rewrite_driver()->AddFilter(deterministic_js_filter_.get());
}
private:
scoped_ptr<DeterministicJsFilter> deterministic_js_filter_;
DISALLOW_COPY_AND_ASSIGN(DeterministicJsFilterTest);
};
TEST_F(DeterministicJsFilterTest, DeterministicJsInjection) {
StringPiece deterministic_js_code =
server_context()->static_asset_manager()->GetAsset(
StaticAssetEnum::DETERMINISTIC_JS, options());
GoogleString expected_str = StrCat("<head><script type=\"text/javascript\" "
"data-pagespeed-no-defer>",
deterministic_js_code,
"</script></head><body></body>");
// Check if StaticAssetManager populated the script correctly.
EXPECT_NE(GoogleString::npos, deterministic_js_code.find("Date"));
EXPECT_NE(GoogleString::npos, deterministic_js_code.find("Math.random"));
// Check if the deterministic js is inserted correctly.
ValidateExpected("deterministicJs_injection",
"<head></head><body></body>",
expected_str);
}
TEST_F(DeterministicJsFilterTest, DeterministicJsInjectionWithSomeHeadContent) {
StringPiece deterministic_js_code =
server_context()->static_asset_manager()->GetAsset(
StaticAssetEnum::DETERMINISTIC_JS, options());
GoogleString expected_str = StrCat("<head><script type=\"text/javascript\" "
"data-pagespeed-no-defer>",
deterministic_js_code,
"</script>"
"<link rel=\"stylesheet\" href=\"a.css\">"
"</head><body></body>");
// Check if StaticAssetManager populated the script correctly.
EXPECT_NE(GoogleString::npos, deterministic_js_code.find("Date"));
EXPECT_NE(GoogleString::npos, deterministic_js_code.find("Math.random"));
// Check if the deterministic js is inserted correctly.
ValidateExpected("deterministicJs_injection",
"<head><link rel=\"stylesheet\" href=\"a.css\">"
"</head><body></body>",
expected_str);
}
} // namespace net_instaweb