Skip to content

Commit

Permalink
Fix a bug in assisted injection, that caused a compilation error when…
Browse files Browse the repository at this point in the history
… more than 1 argument to a function was assisted and they had different types.

Fixes #12.
  • Loading branch information
poletti-marco committed Apr 30, 2016
1 parent 9ea3e31 commit 866e0fb
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 1 deletion.
2 changes: 1 addition & 1 deletion include/fruit/impl/meta/component.h
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ struct RemoveNonAssisted {

template <typename CurrentResult, typename T>
struct apply<CurrentResult, Type<Assisted<T>>> {
using type = PushFront(CurrentResult, Type<T>);
using type = PushBack(CurrentResult, Type<T>);
};
};

Expand Down
1 change: 1 addition & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ register_constructor_not_existing.cpp
register_constructor_not_existing_with_annotation.cpp
register_constructor_with_annotation.cpp
register_factory_autoinject.cpp
register_factory_autoinject2.cpp
register_factory_autoinject_from_provider.cpp
register_factory_autoinject_from_provider_with_annotation.cpp
register_factory_autoinject_with_binding.cpp
Expand Down
51 changes: 51 additions & 0 deletions tests/register_factory_autoinject2.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
// expect-success
/*
* Copyright 2014 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 <fruit/fruit.h>
#include "test_macros.h"

using fruit::Component;
using fruit::Injector;
using fruit::Assisted;
using fruit::createComponent;

struct Foo {
Foo(int x, float y) {
(void)x;
(void)y;
}
};

using FooFactory = std::function<Foo(int, float)>;

fruit::Component<FooFactory> getComponent() {
return fruit::createComponent()
.registerFactory<Foo(fruit::Assisted<int>, fruit::Assisted<float>)>(
[](int x, float y) {
return Foo(x, y);
});
}


int main() {
Injector<FooFactory> injector(getComponent());
FooFactory fooFactory(injector);
Foo foo = fooFactory(1, 2.3);
(void)foo;

return 0;
}

0 comments on commit 866e0fb

Please sign in to comment.