blob: 5a6207ba236d84ec899bebf58ac613ae52b87825 [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: guptaa@google.com (Ashish Gupta)
#include "net/instaweb/rewriter/public/compute_visible_text_filter.h"
#include "net/instaweb/http/public/http_value.h"
#include "net/instaweb/rewriter/public/blink_util.h"
#include "net/instaweb/rewriter/public/rewrite_driver.h"
#include "net/instaweb/rewriter/public/rewrite_options.h"
#include "net/instaweb/rewriter/public/rewrite_test_base.h"
#include "pagespeed/kernel/base/gtest.h"
#include "pagespeed/kernel/base/mock_timer.h"
#include "pagespeed/kernel/base/string_util.h"
#include "pagespeed/kernel/base/string_writer.h"
#include "pagespeed/kernel/http/http_names.h"
#include "pagespeed/kernel/http/response_headers.h"
namespace net_instaweb {
namespace {
const char kHtmlInput[] =
"<html>"
"<head>"
"<title>Title.</title>"
"<meta http-equiv=\"last-modified\" content=\"2012-08-09T11:03:27Z\"/>"
"<script>Script.</script>"
"<script>"
"<![CDATA["
"document.write('foo')"
"]]>"
"</script>"
"<style>Style.</style>"
"<meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\"/>"
"</head>"
"<body>"
"<noscript>No Script.</noscript>"
"<!--[if IE]>"
"<p>This is IE.</p>"
"<![endif]-->"
"<div><span id=\"foo\"></span></div>"
"<div id=\"header\">Header.</div>"
"<div id=\"container\" class>"
"<h2 Id=\"beforeItems\">Header 2.</h2>"
"<div class=\"another item here\">"
"<img alt=\"alt1\" src=\"image1\"/>"
"<img src=\"image2\"/>"
"</div>"
"<div class=\"item\">"
"<img src=\"image3\"/>"
"<p>Paragraph text.</p>"
"</div>"
"</div>"
"</body></html>";
const char kTextContent[] =
"Title."
"<meta http-equiv=\"last-modified\" content=\"2012-08-09T11:03:27Z\"/>"
"<meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\"/>"
"Header.Header 2.image1image2image3Paragraph text.";
} // namespace
class ComputeVisibleTextFilterTest : public RewriteTestBase {
public:
ComputeVisibleTextFilterTest() {}
virtual void SetUp() {
options_->EnableFilter(RewriteOptions::kComputeVisibleText);
options_->DisableFilter(RewriteOptions::kHtmlWriterFilter);
SetUseManagedRewriteDrivers(true);
RewriteTestBase::SetUp();
rewrite_driver_->SetWriter(&write_to_string_);
response_headers_.set_status_code(HttpStatus::kOK);
response_headers_.SetDateAndCaching(MockTimer::kApr_5_2010_ms, 0);
rewrite_driver()->set_response_headers_ptr(&response_headers_);
}
virtual bool AddHtmlTags() const { return false; }
protected:
HTTPValue value_;
ResponseHeaders response_headers_;
private:
DISALLOW_COPY_AND_ASSIGN(ComputeVisibleTextFilterTest);
};
TEST_F(ComputeVisibleTextFilterTest, ComputeVisibleText) {
ValidateExpected("strip_tags", kHtmlInput,
StrCat(kTextContent,
BlinkUtil::kComputeVisibleTextFilterOutputEndMarker,
kHtmlInput));
}
} // namespace net_instaweb