blob: 6ff733ec0b592ac996481a56789be158a15add60 [file] [log] [blame]
/*
* Copyright 2014 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: chenyu@google.com (Yu Chen)
#include "pagespeed/opt/ads/show_ads_snippet_parser.h"
#include "pagespeed/kernel/base/gtest.h"
namespace net_instaweb {
namespace ads_attribute {
namespace {
class ShowAdsSnippetParserTest : public ::testing::Test {
protected:
virtual void SetUp() {
::testing::Test::SetUp();
parsed_attributes_.clear();
}
void CheckParsedResults() {
EXPECT_EQ(4, parsed_attributes_.size());
EXPECT_EQ("ca-pub-xxxxxxxxxxxxxx", parsed_attributes_["google_ad_client"]);
EXPECT_EQ("xxxxxxxxx", parsed_attributes_["google_ad_slot"]);
EXPECT_EQ("728", parsed_attributes_["google_ad_width"]);
EXPECT_EQ("90", parsed_attributes_["google_ad_height"]);
}
bool ParseStrict(const GoogleString& snippet) {
return parser_.ParseStrict(
snippet, &tokenizer_patterns_, &parsed_attributes_);
}
ShowAdsSnippetParser parser_;
pagespeed::js::JsTokenizerPatterns tokenizer_patterns_;
std::map<GoogleString, GoogleString> parsed_attributes_;
};
TEST_F(ShowAdsSnippetParserTest, ParseStrictEmpty) {
EXPECT_TRUE(ParseStrict(""));
EXPECT_EQ(0, parsed_attributes_.size());
}
TEST_F(ShowAdsSnippetParserTest, ParseStrictValid) {
EXPECT_TRUE(ParseStrict(
"google_ad_client = \"ca-pub-xxxxxxxxxxxxxx\";"
"/* ad served */"
"google_ad_slot = \"xxxxxxxxx\";"
"google_ad_width = 728;"
"google_ad_height = 90;"));
CheckParsedResults();
}
TEST_F(ShowAdsSnippetParserTest, ParseStrictValidSingleQuote) {
EXPECT_TRUE(ParseStrict(
"google_ad_client = 'ca-pub-xxxxxxxxxxxxxx';"
"/* ad served */"
"google_ad_slot = 'xxxxxxxxx';"
"google_ad_width = 728;"
"google_ad_height = 90;"));
CheckParsedResults();
}
TEST_F(ShowAdsSnippetParserTest, ParseStrictValidEmptyLines) {
EXPECT_TRUE(ParseStrict(
"\n\n\n\n\n"
"google_ad_client = \"ca-pub-xxxxxxxxxxxxxx\";"
"/* ad served */"
"google_ad_slot = \"xxxxxxxxx\";\n\n\n\n"
"google_ad_width = 728;"
"google_ad_height = 90;"));
CheckParsedResults();
}
TEST_F(ShowAdsSnippetParserTest, ParseStrictValidEmptyStatement) {
EXPECT_TRUE(ParseStrict(
"\n\n\n\n\n"
"google_ad_client = \"ca-pub-xxxxxxxxxxxxxx\";"
"/* ad served */"
"google_ad_slot = \"xxxxxxxxx\";;;;;"
"google_ad_width = 728;"
"google_ad_height = 90;"));
CheckParsedResults();
}
TEST_F(ShowAdsSnippetParserTest, ParseStrictValidWithoutSemicolon) {
EXPECT_TRUE(ParseStrict(
"google_ad_client = \"ca-pub-xxxxxxxxxxxxxx\"\n"
"/* ad served */"
"google_ad_slot = \"xxxxxxxxx\"\n"
"google_ad_width = 728\n"
"google_ad_height = 90\n"));
CheckParsedResults();
}
TEST_F(ShowAdsSnippetParserTest, ParseStrictValidWithEnclosingCommentTag) {
EXPECT_TRUE(ParseStrict(
"<!--"
"google_ad_client = \"ca-pub-xxxxxxxxxxxxxx\";"
"/* ad served */"
"google_ad_slot = \"xxxxxxxxx\";"
"google_ad_width = 728;"
"google_ad_height = 90;"
"//-->"));
CheckParsedResults();
}
TEST_F(ShowAdsSnippetParserTest,
ParseStrictValidWithEnclosingCommentTagAndWhitespaces) {
EXPECT_TRUE(ParseStrict(
" <!--"
"google_ad_client = \"ca-pub-xxxxxxxxxxxxxx\";"
"/* ad served */"
"google_ad_slot = \"xxxxxxxxx\";"
"google_ad_width = 728;"
"google_ad_height = 90;"
"//--> "));
CheckParsedResults();
}
TEST_F(ShowAdsSnippetParserTest, ParseStrictGoogleAdFormat) {
EXPECT_TRUE(ParseStrict(
"google_ad_client = \"ca-pub-xxxxxxxxxxxxxx\";"
"/* ad served */"
"google_ad_slot = \"xxxxxxxxx\";"
"google_ad_format = \"728x90\";"
"google_ad_width = 728;"
"google_ad_height = 90;"));
EXPECT_EQ(5, parsed_attributes_.size());
EXPECT_EQ("ca-pub-xxxxxxxxxxxxxx", parsed_attributes_["google_ad_client"]);
EXPECT_EQ("xxxxxxxxx", parsed_attributes_["google_ad_slot"]);
EXPECT_EQ("728x90", parsed_attributes_["google_ad_format"]);
EXPECT_EQ("728", parsed_attributes_["google_ad_width"]);
EXPECT_EQ("90", parsed_attributes_["google_ad_height"]);
}
TEST_F(ShowAdsSnippetParserTest, ParseWeirdGoogleAdFormat1) {
EXPECT_TRUE(ParseStrict(
"google_ad_format = \"728x90_as\";"));
EXPECT_EQ(1, parsed_attributes_.size());
EXPECT_EQ("728x90_as", parsed_attributes_["google_ad_format"]);
}
TEST_F(ShowAdsSnippetParserTest, ParseWeirdGoogleAdFormat2) {
EXPECT_TRUE(ParseStrict(
"google_ad_format = \"180x90_0ads_al_s\";"));
EXPECT_EQ(1, parsed_attributes_.size());
EXPECT_EQ("180x90_0ads_al_s", parsed_attributes_["google_ad_format"]);
}
TEST_F(ShowAdsSnippetParserTest, ParseStrictGoogleAdFormatWithWhiteSpaces) {
EXPECT_TRUE(ParseStrict(
"google_ad_client = \"ca-pub-xxxxxxxxxxxxxx\";"
"/* ad served */"
"google_ad_slot = \"xxxxxxxxx\";"
"google_ad_format = \" 728x90 \";"
"google_ad_width = 728;"
"google_ad_height = 90;"));
EXPECT_EQ(5, parsed_attributes_.size());
EXPECT_EQ("ca-pub-xxxxxxxxxxxxxx", parsed_attributes_["google_ad_client"]);
EXPECT_EQ("xxxxxxxxx", parsed_attributes_["google_ad_slot"]);
EXPECT_EQ(" 728x90 ", parsed_attributes_["google_ad_format"]);
EXPECT_EQ("728", parsed_attributes_["google_ad_width"]);
EXPECT_EQ("90", parsed_attributes_["google_ad_height"]);
}
TEST_F(ShowAdsSnippetParserTest, ParseShortAttribute) {
EXPECT_TRUE(
ParseStrict("google_language = \"de\""));
EXPECT_EQ(1, parsed_attributes_.size());
EXPECT_EQ("de", parsed_attributes_["google_language"]);
}
TEST_F(ShowAdsSnippetParserTest,
ParseStrictGoogleAdFormatWithUnexpectedPrefix) {
EXPECT_FALSE(ParseStrict(
"google_ad_client = \"ca-pub-xxxxxxxxxxxxxx\";"
"/* ad served */"
"google_ad_slot = \"xxxxxxxxx\";"
"google_ad_format = \"test_722x92\";"
"google_ad_width = 728;"
"google_ad_height = 90;"));
}
TEST_F(ShowAdsSnippetParserTest, ParseStrictGoogleAdFormatWithUnexpectedEnds) {
EXPECT_FALSE(ParseStrict(
"google_ad_client = \"ca-pub-xxxxxxxxxxxxxx\";"
"/* ad served */"
"google_ad_slot = \"xxxxxxxxx\";"
"google_ad_format = \"test_722x92_rimg\";"
"google_ad_width = 728;"
"google_ad_height = 90;"));
}
TEST_F(ShowAdsSnippetParserTest,
ParseStrictInvalidAttributeNameNotStartedWithGoogle) {
EXPECT_FALSE(ParseStrict(
"<!--"
"dgoogle_ad_client = \"ca-pub-xxxxxxxxxxxxxx\";" // Invalid.
"/* ad served */"
"google_ad_slot = \"xxxxxxxxx\";"
"google_ad_width = 728;"
"google_ad_height = 90;"
"//-->"));
}
TEST_F(ShowAdsSnippetParserTest, ParseStrictInvalidAttributeNameIllegalChar) {
EXPECT_FALSE(ParseStrict(
"google_ad_invalid-name = \"ca-pub-xxxxxxxxxxxxxx\";" // Invalid.
"/* ad served */"
"google_ad_slot = \"xxxxxxxxx\";"
"google_ad_width = 728;"
"google_ad_height = 90;"));
}
TEST_F(ShowAdsSnippetParserTest, ParseStrictInvalidDuplicate) {
EXPECT_FALSE(ParseStrict(
"<!--"
"google_ad_client = \"ca-pub-xxxxxxxxxxxxxx\";"
"/* ad served */"
"google_ad_slot = \"xxxxxxxxx\";"
"google_ad_slot = \"xxxxxxxxy\";" // Duplicate assignment
"google_ad_width = 728;"
"google_ad_height = 90;"
"//-->"));
}
TEST_F(ShowAdsSnippetParserTest, ParseStrictInvalidMissingSemicolon) {
EXPECT_FALSE(ParseStrict(
"google_ad_client = \"ca-pub-xxxxxxxxxxxxxx\" " // ; or \n is missing
"/* ad served */"
"google_ad_slot = \"xxxxxxxxx\"\n"
"google_ad_width = 728\n"
"google_ad_height = 90\n"));
}
TEST_F(ShowAdsSnippetParserTest, ParseStrictInvalidModified) {
EXPECT_FALSE(ParseStrict(
"<!--"
"google_ad_client = \"ca-pub-xxxxxxxxxxxxxx\";"
"if (test) google_ad_client = \"ca-pub-xxxxxxxxxxxxxy\";" // Invalid
"/* ad served */"
"google_ad_slot = \"xxxxxxxxx\";"
"google_ad_width = 728;"
"google_ad_height = 90;"
"//-->"));
}
TEST_F(ShowAdsSnippetParserTest, ParseStrictInvalidAssignment) {
EXPECT_FALSE(ParseStrict(
"google_ad_client = \"ca-pub-xxxxxxxxxxxxxx\";"
"/* ad served */"
"google_ad_slot = \"xxxxxxxxx\";"
"google_ad_width = 728;"
"google_ad_height = google_ad_width;"));
}
TEST_F(ShowAdsSnippetParserTest, ParseColorArray) {
// TODO(morlovich): This could in principle be handled, but it's unclear it's
// common enough to be worth the effort.
EXPECT_FALSE(ParseStrict(
"google_color_border = [\"336699\",\"CC99CC\",\"578A24\",\"191933\"]"));
}
} // namespace
} // namespace ads_attribute
} // namespace net_instaweb