From 5a8d1bee89af690ea9383252e7b509fa7a06665d Mon Sep 17 00:00:00 2001 From: Jiyong Park Date: Wed, 25 Apr 2018 22:57:34 +0900 Subject: Add prebuilt_etc_xml prebuilt_etc_xml installs an xml file to /etc[/] and validates the xml file against the given DTD file before installing it. This change also includes some fixes for prebuilt_etc which is the super module of prebuilt_etc_xml: 1) The module is changed to arch-specific module as the prebuilts are only for devices (installed under the etc dir), but not for hosts. 2) Dependency to android.Prebuilt is removed because android.Prebuilt is intended to be used for the case when a module can exist as prebuilts, source or both. These prebuilt_etc_* modules are prebuilt only. 3) srcs property which accepts a list of source files is changed to src that only accepts single source file, which makes more sense for prebuilts. Bug: 65686190 Test: m -j (xml_test.go) Change-Id: I40484f3f6615b99f6b8d43176db0c40c5bfd838e --- xml/xml_test.go | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 xml/xml_test.go (limited to 'xml/xml_test.go') diff --git a/xml/xml_test.go b/xml/xml_test.go new file mode 100644 index 000000000..e8fa49c2b --- /dev/null +++ b/xml/xml_test.go @@ -0,0 +1,86 @@ +// Copyright 2018 Google Inc. All rights reserved. +// +// 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. + +package xml + +import ( + "android/soong/android" + "io/ioutil" + "os" + "testing" +) + +func testXml(t *testing.T, bp string) *android.TestContext { + config, buildDir := setup(t) + defer teardown(buildDir) + ctx := android.NewTestArchContext() + ctx.RegisterModuleType("prebuilt_etc", android.ModuleFactoryAdaptor(android.PrebuiltEtcFactory)) + ctx.RegisterModuleType("prebuilt_etc_xml", android.ModuleFactoryAdaptor(PrebuiltEtcXmlFactory)) + ctx.Register() + mockFiles := map[string][]byte{ + "Android.bp": []byte(bp), + "foo.xml": nil, + "foo.dtd": nil, + "bar.xml": nil, + "bar.xsd": nil, + } + ctx.MockFileSystem(mockFiles) + _, errs := ctx.ParseFileList(".", []string{"Android.bp"}) + android.FailIfErrored(t, errs) + _, errs = ctx.PrepareBuildActions(config) + android.FailIfErrored(t, errs) + + return ctx +} + +func setup(t *testing.T) (config android.Config, buildDir string) { + buildDir, err := ioutil.TempDir("", "soong_xml_test") + if err != nil { + t.Fatal(err) + } + + config = android.TestArchConfig(buildDir, nil) + + return +} + +func teardown(buildDir string) { + os.RemoveAll(buildDir) +} + +// Minimal test +func TestPrebuiltEtcXml(t *testing.T) { + ctx := testXml(t, ` + prebuilt_etc_xml { + name: "foo.xml", + src: "foo.xml", + schema: "foo.dtd", + } + prebuilt_etc_xml { + name: "bar.xml", + src: "bar.xml", + schema: "bar.xsd", + } + `) + + xmllint := ctx.ModuleForTests("foo.xml", "android_common").Rule("xmllint") + input := xmllint.Input.String() + if input != "foo.xml" { + t.Errorf("input expected %q != got %q", "foo.xml", input) + } + schema := xmllint.Args["dtd"] + if schema != "foo.dtd" { + t.Errorf("dtd expected %q != got %q", "foo.dtdl", schema) + } +} -- cgit v1.2.3-59-g8ed1b