blob: 41f4b5db1718d4561ed37795ea71bc1334df9f0d [file] [log] [blame]
// Copyright 2018 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "core/fpdfdoc/cpdf_metadata.h"
#include "core/fpdfapi/parser/cpdf_stream.h"
#include "testing/gtest/include/gtest/gtest.h"
TEST(CPDF_MetadataTest, CheckSharedFormEmailAtTopLevel) {
static const char data[] =
"<?xml charset=\"utf-8\"?>\n"
"<node xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/\">\n"
"<adhocwf:workflowType>0</adhocwf:workflowType>\n"
"<adhocwf:version>1.1</adhocwf:version>\n"
"</node>";
auto stream = pdfium::MakeRetain<CPDF_Stream>();
stream->SetData(ByteStringView(data).raw_span());
CPDF_Metadata metadata(stream.Get());
auto results = metadata.CheckForSharedForm();
ASSERT_EQ(1U, results.size());
EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormEmail, results[0]);
}
TEST(CPDF_MetadataTest, CheckSharedFormAcrobatAtTopLevel) {
static const char data[] =
"<?xml charset=\"utf-8\"?>\n"
"<node xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/\">\n"
"<adhocwf:workflowType>1</adhocwf:workflowType>\n"
"<adhocwf:version>1.1</adhocwf:version>\n"
"</node>";
auto stream = pdfium::MakeRetain<CPDF_Stream>();
stream->SetData(ByteStringView(data).raw_span());
CPDF_Metadata metadata(stream.Get());
auto results = metadata.CheckForSharedForm();
ASSERT_EQ(1U, results.size());
EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormAcrobat, results[0]);
}
TEST(CPDF_MetadataTest, CheckSharedFormFilesystemAtTopLevel) {
static const char data[] =
"<?xml charset=\"utf-8\"?>\n"
"<node xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/\">\n"
"<adhocwf:workflowType>2</adhocwf:workflowType>\n"
"<adhocwf:version>1.1</adhocwf:version>\n"
"</node>";
auto stream = pdfium::MakeRetain<CPDF_Stream>();
stream->SetData(ByteStringView(data).raw_span());
CPDF_Metadata metadata(stream.Get());
auto results = metadata.CheckForSharedForm();
ASSERT_EQ(1U, results.size());
EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormFilesystem, results[0]);
}
TEST(CPDF_MetadataTest, CheckSharedFormWithoutWorkflow) {
static const char data[] =
"<?xml charset=\"utf-8\"?>\n"
"<node xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/\">\n"
"<adhocwf:state>2</adhocwf:state>\n"
"<adhocwf:version>1.1</adhocwf:version>\n"
"</node>";
auto stream = pdfium::MakeRetain<CPDF_Stream>();
stream->SetData(ByteStringView(data).raw_span());
CPDF_Metadata metadata(stream.Get());
auto results = metadata.CheckForSharedForm();
EXPECT_EQ(0U, results.size());
}
TEST(CPDF_MetadataTest, CheckSharedFormAsChild) {
static const char data[] =
"<?xml charset=\"utf-8\"?>\n"
"<grandparent><parent>\n"
"<node xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/\">\n"
"<adhocwf:workflowType>0</adhocwf:workflowType>\n"
"<adhocwf:version>1.1</adhocwf:version>\n"
"</node>"
"</parent></grandparent>";
auto stream = pdfium::MakeRetain<CPDF_Stream>();
stream->SetData(ByteStringView(data).raw_span());
CPDF_Metadata metadata(stream.Get());
auto results = metadata.CheckForSharedForm();
ASSERT_EQ(1U, results.size());
EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormEmail, results[0]);
}
TEST(CPDF_MetadataTest, CheckSharedFormAsNoAdhoc) {
static const char data[] =
"<?xml charset=\"utf-8\"?>\n"
"<node></node>";
auto stream = pdfium::MakeRetain<CPDF_Stream>();
stream->SetData(ByteStringView(data).raw_span());
CPDF_Metadata metadata(stream.Get());
auto results = metadata.CheckForSharedForm();
EXPECT_EQ(0U, results.size());
}
TEST(CPDF_MetadataTest, CheckSharedFormWrongNamespace) {
static const char data[] =
"<?xml charset=\"utf-8\"?>\n"
"<node xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/2.0/\">\n"
"<adhocwf:workflowType>1</adhocwf:workflowType>\n"
"<adhocwf:version>1.1</adhocwf:version>\n"
"</node>";
auto stream = pdfium::MakeRetain<CPDF_Stream>();
stream->SetData(ByteStringView(data).raw_span());
CPDF_Metadata metadata(stream.Get());
auto results = metadata.CheckForSharedForm();
EXPECT_EQ(0U, results.size());
}
TEST(CPDF_MetadataTest, CheckSharedFormMultipleErrors) {
static const char data[] =
"<?xml charset=\"utf-8\"?>\n"
"<grandparent>"
"<parent>\n"
"<node xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/\">\n"
"<adhocwf:workflowType>0</adhocwf:workflowType>\n"
"<adhocwf:version>1.1</adhocwf:version>\n"
"</node>"
"</parent>"
"<node2 "
"xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/\">\n"
"<adhocwf:workflowType>2</adhocwf:workflowType>\n"
"<adhocwf:version>1.1</adhocwf:version>\n"
"</node2>"
"<node3 "
"xmlns:adhocwf=\"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/\">\n"
"<adhocwf:workflowType>1</adhocwf:workflowType>\n"
"<adhocwf:version>1.1</adhocwf:version>\n"
"</node3>"
"</grandparent>";
auto stream = pdfium::MakeRetain<CPDF_Stream>();
stream->SetData(ByteStringView(data).raw_span());
CPDF_Metadata metadata(stream.Get());
auto results = metadata.CheckForSharedForm();
ASSERT_EQ(3U, results.size());
EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormEmail, results[0]);
EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormFilesystem, results[1]);
EXPECT_EQ(UnsupportedFeature::kDocumentSharedFormAcrobat, results[2]);
}