From 940b4d1848e8c70ab7642901a68594e8016caffc Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 27 Apr 2024 18:51:28 +0200 Subject: Adding upstream version 1:7.0.4. Signed-off-by: Daniel Baumann --- .../test-getsystempathfromfileurl.cxx | 243 +++++++++++++++++++++ 1 file changed, 243 insertions(+) create mode 100644 sal/qa/osl/getsystempathfromfileurl/test-getsystempathfromfileurl.cxx (limited to 'sal/qa/osl/getsystempathfromfileurl/test-getsystempathfromfileurl.cxx') diff --git a/sal/qa/osl/getsystempathfromfileurl/test-getsystempathfromfileurl.cxx b/sal/qa/osl/getsystempathfromfileurl/test-getsystempathfromfileurl.cxx new file mode 100644 index 000000000..4fd5d6b16 --- /dev/null +++ b/sal/qa/osl/getsystempathfromfileurl/test-getsystempathfromfileurl.cxx @@ -0,0 +1,243 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you 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 . + */ + +#include + +#include +#include +#include +#include + +#include + +#if defined(_WIN32) +#define MY_PATH_IN "/c:/foo/bar" +#define MY_PATH_OUT "c:\\foo\\bar" +#define MY_PATH_OUT_CONT MY_PATH_OUT "\\" +#define MY_PATH_OUT_REL "foo\\bar" +#else +#define MY_PATH_IN "/foo/bar" +#define MY_PATH_OUT MY_PATH_IN +#define MY_PATH_OUT_CONT MY_PATH_OUT "/" +#define MY_PATH_OUT_REL "foo/bar" +#endif + +namespace { + +class Test: public CppUnit::TestFixture { +private: + CPPUNIT_TEST_SUITE(Test); + CPPUNIT_TEST(testBadScheme); + CPPUNIT_TEST(testNoScheme); + CPPUNIT_TEST(testBadAuthority); + CPPUNIT_TEST(testLocalhost1Authority); + CPPUNIT_TEST(testLocalhost2Authority); + CPPUNIT_TEST(testLocalhost3Authority); + CPPUNIT_TEST(testNoAuthority); + CPPUNIT_TEST(testEmptyPath); + CPPUNIT_TEST(testHomeAbbreviation); + CPPUNIT_TEST(testOtherHomeAbbreviation); + CPPUNIT_TEST(testRelative); + CPPUNIT_TEST(testEscape); + CPPUNIT_TEST(testBadEscape2f); + CPPUNIT_TEST(testBadEscape2F); + CPPUNIT_TEST(testBad0); + CPPUNIT_TEST(testBadEscape0); + CPPUNIT_TEST(testBadQuery); + CPPUNIT_TEST(testBadFragment); + CPPUNIT_TEST_SUITE_END(); + + void testBadScheme(); + void testNoScheme(); + void testBadAuthority(); + void testLocalhost1Authority(); + void testLocalhost2Authority(); + void testLocalhost3Authority(); + void testNoAuthority(); + void testEmptyPath(); + void testHomeAbbreviation(); + void testOtherHomeAbbreviation(); + void testRelative(); + void testEscape(); + void testBadEscape2f(); + void testBadEscape2F(); + void testBad0(); + void testBadEscape0(); + void testBadQuery(); + void testBadFragment(); +}; + +void Test::testBadScheme() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL("foo:bar", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e); + CPPUNIT_ASSERT_EQUAL(OUString(), p); +} + +void Test::testNoScheme() { +#if !defined(_WIN32) //TODO + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL("//" MY_PATH_IN, p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e); + CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT), p); +#endif +} + +void Test::testBadAuthority() { +#if defined UNX + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file://baz" MY_PATH_IN, p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e); + CPPUNIT_ASSERT_EQUAL(OUString(), p); +#endif +} + +void Test::testLocalhost1Authority() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file://localhost" MY_PATH_IN, p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e); + CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT), p); +} + +void Test::testLocalhost2Authority() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file://LOCALHOST" MY_PATH_IN, p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e); + CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT), p); +} + +void Test::testLocalhost3Authority() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file://127.0.0.1" MY_PATH_IN, p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e); + CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT), p); +} + +void Test::testNoAuthority() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL("file:" MY_PATH_IN, p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e); + CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT), p); +} + +void Test::testEmptyPath() { +#if defined UNX + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL("file://", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e); + CPPUNIT_ASSERT_EQUAL(OUString("/"), p); +#endif +} + +void Test::testHomeAbbreviation() { +#if defined UNX + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL("file:///~", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e); + // could theoretically fail due to osl::Security::getHomeDir problem + e = osl::FileBase::getSystemPathFromFileURL("file:///~/foo%2525/bar", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e); + // could theoretically fail due to osl::Security::getHomeDir problem + CPPUNIT_ASSERT(p.endsWith("/foo%25/bar")); +#endif +} + +void Test::testOtherHomeAbbreviation() { +#if defined UNX + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file:///~baz" MY_PATH_IN, p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e); // not supported for now + CPPUNIT_ASSERT_EQUAL(OUString(), p); +#endif +} + +void Test::testRelative() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL("foo/bar", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e); + CPPUNIT_ASSERT(p.endsWith(MY_PATH_OUT_REL)); +} + +void Test::testEscape() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file://" MY_PATH_IN "/b%61z", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_None, e); + CPPUNIT_ASSERT_EQUAL(OUString(MY_PATH_OUT_CONT "baz"), p); +} + +void Test::testBadEscape2f() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file://" MY_PATH_IN "/b%2fz", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e); + CPPUNIT_ASSERT_EQUAL(OUString(), p); +} + +void Test::testBadEscape2F() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file://" MY_PATH_IN "/b%2Fz", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e); + CPPUNIT_ASSERT_EQUAL(OUString(), p); +} + +void Test::testBad0() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + OUString(RTL_CONSTASCII_USTRINGPARAM("file://" MY_PATH_IN "/b\x00z")), + p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e); + CPPUNIT_ASSERT_EQUAL(OUString(), p); +} + +void Test::testBadEscape0() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file://" MY_PATH_IN "/b%00z", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e); + CPPUNIT_ASSERT_EQUAL(OUString(), p); +} + +void Test::testBadQuery() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file://" MY_PATH_IN "?baz", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e); + CPPUNIT_ASSERT_EQUAL(OUString(), p); +} + +void Test::testBadFragment() { + OUString p; + auto e = osl::FileBase::getSystemPathFromFileURL( + "file://" MY_PATH_IN "#baz", p); + CPPUNIT_ASSERT_EQUAL(osl::FileBase::E_INVAL, e); + CPPUNIT_ASSERT_EQUAL(OUString(), p); +} + +CPPUNIT_TEST_SUITE_REGISTRATION(Test); + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit v1.2.3