diff options
Diffstat (limited to 'src/clean_test.cc')
-rw-r--r-- | src/clean_test.cc | 255 |
1 files changed, 255 insertions, 0 deletions
diff --git a/src/clean_test.cc b/src/clean_test.cc new file mode 100644 index 0000000..0e2114e --- /dev/null +++ b/src/clean_test.cc @@ -0,0 +1,255 @@ +// Copyright 2011 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. + +#include "clean.h" +#include "build.h" + +#include "test.h" + +struct CleanTest : public StateTestWithBuiltinRules { + VirtualFileSystem fs_; + BuildConfig config_; + virtual void SetUp() { + config_.verbosity = BuildConfig::QUIET; + } +}; + +TEST_F(CleanTest, CleanAll) { + ASSERT_NO_FATAL_FAILURE(AssertParse(&state_, +"build in1: cat src1\n" +"build out1: cat in1\n" +"build in2: cat src2\n" +"build out2: cat in2\n")); + fs_.Create("in1", 1, ""); + fs_.Create("out1", 1, ""); + fs_.Create("in2", 1, ""); + fs_.Create("out2", 1, ""); + + { + Cleaner cleaner(&state_, config_, &fs_); + + ASSERT_EQ(0, cleaner.cleaned_files_count()); + cleaner.CleanAll(); + EXPECT_EQ(4, cleaner.cleaned_files_count()); + EXPECT_EQ(4, fs_.files_removed_.size()); + } + + // Check they are removed. + EXPECT_EQ(0, fs_.Stat("in1")); + EXPECT_EQ(0, fs_.Stat("out1")); + EXPECT_EQ(0, fs_.Stat("in2")); + EXPECT_EQ(0, fs_.Stat("out2")); + fs_.files_removed_.clear(); + + { + Cleaner cleaner(&state_, config_, &fs_); + + ASSERT_EQ(0, cleaner.cleaned_files_count()); + cleaner.CleanAll(); + EXPECT_EQ(0, cleaner.cleaned_files_count()); + EXPECT_EQ(0, fs_.files_removed_.size()); + } +} + +TEST_F(CleanTest, CleanAllDryRun) { + ASSERT_NO_FATAL_FAILURE(AssertParse(&state_, +"build in1: cat src1\n" +"build out1: cat in1\n" +"build in2: cat src2\n" +"build out2: cat in2\n")); + fs_.Create("in1", 1, ""); + fs_.Create("out1", 1, ""); + fs_.Create("in2", 1, ""); + fs_.Create("out2", 1, ""); + + config_.dry_run = true; + { + Cleaner cleaner(&state_, config_, &fs_); + + ASSERT_EQ(0, cleaner.cleaned_files_count()); + cleaner.CleanAll(); + EXPECT_EQ(4, cleaner.cleaned_files_count()); + EXPECT_EQ(0, fs_.files_removed_.size()); + } + + // Check they are not removed. + EXPECT_NE(0, fs_.Stat("in1")); + EXPECT_NE(0, fs_.Stat("out1")); + EXPECT_NE(0, fs_.Stat("in2")); + EXPECT_NE(0, fs_.Stat("out2")); + fs_.files_removed_.clear(); + + { + Cleaner cleaner(&state_, config_, &fs_); + + ASSERT_EQ(0, cleaner.cleaned_files_count()); + cleaner.CleanAll(); + EXPECT_EQ(4, cleaner.cleaned_files_count()); + EXPECT_EQ(0, fs_.files_removed_.size()); + } +} + +TEST_F(CleanTest, CleanTarget) { + ASSERT_NO_FATAL_FAILURE(AssertParse(&state_, +"build in1: cat src1\n" +"build out1: cat in1\n" +"build in2: cat src2\n" +"build out2: cat in2\n")); + fs_.Create("in1", 1, ""); + fs_.Create("out1", 1, ""); + fs_.Create("in2", 1, ""); + fs_.Create("out2", 1, ""); + + { + Cleaner cleaner(&state_, config_, &fs_); + + ASSERT_EQ(0, cleaner.cleaned_files_count()); + ASSERT_EQ(0, cleaner.CleanTarget("out1")); + EXPECT_EQ(2, cleaner.cleaned_files_count()); + EXPECT_EQ(2, fs_.files_removed_.size()); + } + + // Check they are removed. + EXPECT_EQ(0, fs_.Stat("in1")); + EXPECT_EQ(0, fs_.Stat("out1")); + EXPECT_NE(0, fs_.Stat("in2")); + EXPECT_NE(0, fs_.Stat("out2")); + fs_.files_removed_.clear(); + + { + Cleaner cleaner(&state_, config_, &fs_); + + ASSERT_EQ(0, cleaner.cleaned_files_count()); + ASSERT_EQ(0, cleaner.CleanTarget("out1")); + EXPECT_EQ(0, cleaner.cleaned_files_count()); + EXPECT_EQ(0, fs_.files_removed_.size()); + } +} + +TEST_F(CleanTest, CleanTargetDryRun) { + ASSERT_NO_FATAL_FAILURE(AssertParse(&state_, +"build in1: cat src1\n" +"build out1: cat in1\n" +"build in2: cat src2\n" +"build out2: cat in2\n")); + fs_.Create("in1", 1, ""); + fs_.Create("out1", 1, ""); + fs_.Create("in2", 1, ""); + fs_.Create("out2", 1, ""); + + config_.dry_run = true; + { + Cleaner cleaner(&state_, config_, &fs_); + + ASSERT_EQ(0, cleaner.cleaned_files_count()); + ASSERT_EQ(0, cleaner.CleanTarget("out1")); + EXPECT_EQ(2, cleaner.cleaned_files_count()); + EXPECT_EQ(0, fs_.files_removed_.size()); + } + + // Check they are removed. + EXPECT_NE(0, fs_.Stat("in1")); + EXPECT_NE(0, fs_.Stat("out1")); + EXPECT_NE(0, fs_.Stat("in2")); + EXPECT_NE(0, fs_.Stat("out2")); + fs_.files_removed_.clear(); + + { + Cleaner cleaner(&state_, config_, &fs_); + + ASSERT_EQ(0, cleaner.cleaned_files_count()); + ASSERT_EQ(0, cleaner.CleanTarget("out1")); + EXPECT_EQ(2, cleaner.cleaned_files_count()); + EXPECT_EQ(0, fs_.files_removed_.size()); + } +} + +TEST_F(CleanTest, CleanRule) { + ASSERT_NO_FATAL_FAILURE(AssertParse(&state_, +"rule cat_e\n" +" command = cat -e $in > $out\n" +"build in1: cat_e src1\n" +"build out1: cat in1\n" +"build in2: cat_e src2\n" +"build out2: cat in2\n")); + fs_.Create("in1", 1, ""); + fs_.Create("out1", 1, ""); + fs_.Create("in2", 1, ""); + fs_.Create("out2", 1, ""); + + { + Cleaner cleaner(&state_, config_, &fs_); + + ASSERT_EQ(0, cleaner.cleaned_files_count()); + ASSERT_EQ(0, cleaner.CleanRule("cat_e")); + EXPECT_EQ(2, cleaner.cleaned_files_count()); + EXPECT_EQ(2, fs_.files_removed_.size()); + } + + // Check they are removed. + EXPECT_EQ(0, fs_.Stat("in1")); + EXPECT_NE(0, fs_.Stat("out1")); + EXPECT_EQ(0, fs_.Stat("in2")); + EXPECT_NE(0, fs_.Stat("out2")); + fs_.files_removed_.clear(); + + { + Cleaner cleaner(&state_, config_, &fs_); + + ASSERT_EQ(0, cleaner.cleaned_files_count()); + ASSERT_EQ(0, cleaner.CleanRule("cat_e")); + EXPECT_EQ(0, cleaner.cleaned_files_count()); + EXPECT_EQ(0, fs_.files_removed_.size()); + } +} + +TEST_F(CleanTest, CleanRuleDryRun) { + ASSERT_NO_FATAL_FAILURE(AssertParse(&state_, +"rule cat_e\n" +" command = cat -e $in > $out\n" +"build in1: cat_e src1\n" +"build out1: cat in1\n" +"build in2: cat_e src2\n" +"build out2: cat in2\n")); + fs_.Create("in1", 1, ""); + fs_.Create("out1", 1, ""); + fs_.Create("in2", 1, ""); + fs_.Create("out2", 1, ""); + + config_.dry_run = true; + { + Cleaner cleaner(&state_, config_, &fs_); + + ASSERT_EQ(0, cleaner.cleaned_files_count()); + ASSERT_EQ(0, cleaner.CleanRule("cat_e")); + EXPECT_EQ(2, cleaner.cleaned_files_count()); + EXPECT_EQ(0, fs_.files_removed_.size()); + } + + // Check they are removed. + EXPECT_NE(0, fs_.Stat("in1")); + EXPECT_NE(0, fs_.Stat("out1")); + EXPECT_NE(0, fs_.Stat("in2")); + EXPECT_NE(0, fs_.Stat("out2")); + fs_.files_removed_.clear(); + + { + Cleaner cleaner(&state_, config_, &fs_); + + ASSERT_EQ(0, cleaner.cleaned_files_count()); + ASSERT_EQ(0, cleaner.CleanRule("cat_e")); + EXPECT_EQ(2, cleaner.cleaned_files_count()); + EXPECT_EQ(0, fs_.files_removed_.size()); + } +} |